diff --git a/.editorconfig b/.editorconfig
index 9088a165761ee325a61054c3d32c17409ddec5ca..d88e75a283fa0f7569a9c561ba784c11fbffff7e 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,15 +1,19 @@
 ; http://editorconfig.org/
 
+root = true
+
 [*]
 indent_style = space
 indent_size = 4
+end_of_line = lf
 charset = utf-8
 trim_trailing_whitespace = true
 insert_final_newline = true
 
-[inc/{geshi,phpseclib}/**]
+[{vendor,inc/phpseclib}/**]
 ; Use editor default (possible autodetection).
 indent_style =
 indent_size =
-trim_trailing_whitespace = false
-insert_final_newline = false
+end_of_line =
+trim_trailing_whitespace =
+insert_final_newline =
diff --git a/.gitattributes b/.gitattributes
index 1012087d4713eeeed96628ad8638ad419115f81a..6beb1fb7a7b4a9e58415a5d82f6ab073654e51a3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -9,6 +9,8 @@
 .gitignore export-ignore
 .editorconfig export-ignore
 .travis.yml export-ignore
+composer.json export-ignore
+composer.lock export-ignore
 _test export-ignore
 _cs export-ignore
 lib/plugins/testing export-ignore
diff --git a/.gitignore b/.gitignore
index bb39ba7cf6b011a3875a25b80594da199a27b92a..7410ee1c3e71bd8e654216c86323551491589fe9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -47,6 +47,7 @@
 !/lib/plugins/popularity
 !/lib/plugins/revert
 !/lib/plugins/safefnrecode
+!/lib/plugins/styling
 !/lib/plugins/testing
 !/lib/plugins/usermanager
 !/lib/plugins/action.php
@@ -56,3 +57,17 @@
 !/lib/plugins/remote.php
 !/lib/plugins/syntax.php
 lib/images/*/local/*
+
+# composer default ignores
+composer.phar
+vendor/bin/*
+vendor/*/*/phpunit.xml
+vendor/*/*/.travis.yml
+vendor/*/*/bin/*
+vendor/*/*/tests/*
+vendor/*/*/test/*
+vendor/*/*/doc/*
+vendor/*/*/docs/*
+vendor/*/*/contrib/*
+vendor/splitbrain/php-archive/apigen.neon
+vendor/splitbrain/php-archive/generate-api.sh
diff --git a/.htaccess.dist b/.htaccess.dist
index 5724a6e04423c4d576e8745a7805397c23e70fbe..1d2bd418e61468fc3bf1c07186f5af5379d6ea87 100644
--- a/.htaccess.dist
+++ b/.htaccess.dist
@@ -6,10 +6,20 @@
 
 ## make sure nobody gets the htaccess, README, COPYING or VERSION files
 <Files ~ "^([\._]ht|README$|VERSION$|COPYING$)">
-    Order allow,deny
-    Deny from all
+    <IfModule mod_authz_host>
+        Require all denied
+    </IfModule>
+    <IfModule !mod_authz_host>
+        Order allow,deny
+        Deny from all
+    </IfModule>
 </Files>
 
+## Don't allow access to git directories
+<IfModule alias_module>
+    RedirectMatch 404 /\.git
+</IfModule>
+
 ## Uncomment these rules if you want to have nice URLs using
 ## $conf['userewrite'] = 1 - not needed for rewrite mode 2
 #RewriteEngine on
diff --git a/.travis.yml b/.travis.yml
index 0bef94048a76ee509d9827ccec573e8979ae1f0a..a0aa152964ca53c030b565e2d011b7c5704ce566 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,16 +1,23 @@
 language: php
+sudo: false
 php:
+  - "7.0"
   - "5.6"
   - "5.5"
   - "5.4"
   - "5.3"
+  - "hhvm"
+env:
+  - DISABLE_FUNCTIONS=
+  - DISABLE_FUNCTIONS="gzopen"
+matrix:
+  allow_failures:
+    - php: "hhvm"
 notifications:
   irc:
     channels:
         - "chat.freenode.net#dokuwiki"
     on_success: change
     on_failure: change
-install:
-  - wget https://phar.phpunit.de/phpunit-4.3.5.phar -O _test/phpunit
-  - chmod 755 _test/phpunit
-script: cd _test && ./phpunit --verbose --stderr
+before_script: echo "disable_functions=$DISABLE_FUNCTIONS" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
+script: cd _test && phpunit --verbose --stderr
diff --git a/README b/README
index 35de49ab1a53cde70564483400ba5eea94fb351f..1611a6df16b236f2040c5b5409629bf72f6cd4fb 100644
--- a/README
+++ b/README
@@ -4,7 +4,7 @@ at http://www.dokuwiki.org/
 For Installation Instructions see
 http://www.dokuwiki.org/install
 
-DokuWiki - 2004-2014 (c) Andreas Gohr <andi@splitbrain.org>
+DokuWiki - 2004-2015 (c) Andreas Gohr <andi@splitbrain.org>
                          and the DokuWiki Community
 See COPYING and file headers for license info
 
diff --git a/_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php b/_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php
index c5d14377b4250a28f7620a30a6d6a72f4e1322e3..c15a5be021f4be1f7bad656aa5030fab8e4983e7 100644
--- a/_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php
+++ b/_cs/DokuWiki/Sniffs/PHP/DeprecatedFunctionsSniff.php
@@ -39,7 +39,7 @@ class DokuWiki_Sniffs_PHP_DeprecatedFunctionsSniff extends Generic_Sniffs_PHP_Fo
      *
      * @var array(string => string|null)
      */
-    protected $forbiddenFunctions = array(
+    public $forbiddenFunctions = array(
         'setCorrectLocale'     => null,
         'html_attbuild'        => 'buildAttributes',
         'io_runcmd'            => null,
diff --git a/_cs/DokuWiki/Sniffs/PHP/DiscouragedFunctionsSniff.php b/_cs/DokuWiki/Sniffs/PHP/DiscouragedFunctionsSniff.php
index 9cd9a7d36f2fd82a1aa5e62259534b593cffa8db..bd51b11662e45517e8ae5a1ba6f0794f8d0831a3 100644
--- a/_cs/DokuWiki/Sniffs/PHP/DiscouragedFunctionsSniff.php
+++ b/_cs/DokuWiki/Sniffs/PHP/DiscouragedFunctionsSniff.php
@@ -39,7 +39,7 @@ class DokuWiki_Sniffs_PHP_DiscouragedFunctionsSniff extends Generic_Sniffs_PHP_F
      *
      * @var array(string => string|null)
      */
-    protected $forbiddenFunctions = array(
+    public $forbiddenFunctions = array(
                                      'date' => 'dformat',
                                      'strftime'   => 'dformat',
                                     );
diff --git a/_test/data/media/wiki/dokuwiki-128.png b/_test/data/media/wiki/dokuwiki-128.png
index b2306ac9571f39c6f30c0a5967e5b520415b3d80..f3f1d66bd752d6874220fa4d35415ea97de79774 100644
Binary files a/_test/data/media/wiki/dokuwiki-128.png and b/_test/data/media/wiki/dokuwiki-128.png differ
diff --git a/_test/data/media/wiki/kind_zu_katze.png b/_test/data/media/wiki/kind_zu_katze.png
index a5c151e3faba898ad17894334061b9644fdd2e69..e0eee61bc43f5e7626bdc823b52ddeea25641ac7 100644
Binary files a/_test/data/media/wiki/kind_zu_katze.png and b/_test/data/media/wiki/kind_zu_katze.png differ
diff --git a/_test/phpunit.xml b/_test/phpunit.xml
index 25506b1ae3ff9eceffc47a18968dc0935a32dc06..6e250974994328d140c9926f6513562ee6b25203 100644
--- a/_test/phpunit.xml
+++ b/_test/phpunit.xml
@@ -18,6 +18,12 @@
         </testsuite>
     </testsuites>
 
+    <groups>
+        <exclude>
+            <group>flaky</group>
+        </exclude>
+    </groups>
+
     <filter>
         <whitelist addUncoveredFilesFromWhitelist="false">
             <directory suffix=".php">../</directory>
diff --git a/_test/tests/general/general_languagelint.php b/_test/tests/general/general_languagelint.test.php
similarity index 100%
rename from _test/tests/general/general_languagelint.php
rename to _test/tests/general/general_languagelint.test.php
diff --git a/_test/tests/inc/auth_password.test.php b/_test/tests/inc/auth_password.test.php
index 07b9f5bb208fe727adaaccd3e8ef4530cb8ec756..5067e2ca1acf23fb26bf3972b022d91e190632dc 100644
--- a/_test/tests/inc/auth_password.test.php
+++ b/_test/tests/inc/auth_password.test.php
@@ -16,9 +16,16 @@ class auth_password_test extends DokuWikiTest {
         'kmd5'  => 'a579299436d7969791189acadd86fcb716',
         'djangomd5'  => 'md5$abcde$d0fdddeda8cd92725d2b54148ac09158',
         'djangosha1' => 'sha1$abcde$c8e65a7f0acc9158843048a53dcc5a6bc4d17678',
-        'sha512' => '$6$abcdefgh12345678$J9.zOcgx0lotwZdcz0uulA3IVQMinZvFZVjA5vapRLVAAqtay23XD4xeeUxQ3B4JvDWYFBIxVWW1tOYlHX13k1'
+
     );
 
+    function __construct() {
+        if(defined('CRYPT_SHA512') && CRYPT_SHA512 == 1) {
+            // Check SHA512 only if available in this PHP
+            $this->passes['sha512'] = '$6$abcdefgh12345678$J9.zOcgx0lotwZdcz0uulA3IVQMinZvFZVjA5vapRLVAAqtay23XD4xeeUxQ3B4JvDWYFBIxVWW1tOYlHX13k1';
+        }
+    }
+
 
     function test_cryptPassword(){
         foreach($this->passes as $method => $hash){
diff --git a/_test/tests/inc/cache_use.test.php b/_test/tests/inc/cache_use.test.php
index 3ea212d50911b0db8a8df4c3f187d88c72e817bf..c0c12580a2a240a33e4ba083f5df8fd5dcb00a67 100644
--- a/_test/tests/inc/cache_use.test.php
+++ b/_test/tests/inc/cache_use.test.php
@@ -4,6 +4,8 @@
  * Class cache_use_test
  *
  * Tests if caching can actually be used
+ *
+ * @todo tests marked as flaky until Ticket #694 has been fixed
  */
 class cache_use_test extends DokuWikiTest {
     /** @var cache_renderer $cache */
@@ -28,18 +30,11 @@ class cache_use_test extends DokuWikiTest {
         touch($this->cache->cache, $time);
     }
 
-    function test_use() {
-        $this->markTestSkipped('Disabled until Ticket #694 has been fixed');
-        return;
-
-        $this->assertTrue($this->cache->useCache());
-    }
-
     /**
      * In all the following tests the cache should not be usable
      * as such, they are meaningless if test_use didn't pass.
      *
-     * @depends test_use
+     * @group flaky
      */
     function test_purge() {
         /* @var Input $INPUT */
@@ -51,7 +46,7 @@ class cache_use_test extends DokuWikiTest {
     }
 
     /**
-     * @depends test_use
+     * @group flaky
      */
     function test_filedependency() {
         // give the dependent src file the same mtime as the cache
@@ -60,7 +55,7 @@ class cache_use_test extends DokuWikiTest {
     }
 
     /**
-     * @depends test_use
+     * @group flaky
      */
     function test_age() {
         // need to age both our source file & the cache
@@ -74,7 +69,7 @@ class cache_use_test extends DokuWikiTest {
     }
 
     /**
-     * @depends test_use
+     * @group flaky
      */
     function test_confnocaching() {
         global $conf;
@@ -83,4 +78,4 @@ class cache_use_test extends DokuWikiTest {
         $this->assertFalse($this->cache->useCache());
         $this->assertNotEmpty($this->cache->_nocache);
     }
-}
\ No newline at end of file
+}
diff --git a/_test/tests/inc/common_blank.test.php b/_test/tests/inc/common_blank.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..9df35936a2905dc21f29ebe6c2426eb3f1c00eee
--- /dev/null
+++ b/_test/tests/inc/common_blank.test.php
@@ -0,0 +1,52 @@
+<?php
+
+class common_blank_test extends DokuWikiTest {
+
+    private $nope;
+
+    function test_blank() {
+        $tests = array(
+            // these are not blank
+            array('string', false),
+            array(1, false),
+            array(1.0, false),
+            array(0xff, false),
+            array(array('something'), false),
+
+            // these aren't either!
+            array('0', false),
+            array(' ', false),
+            array('0.0', false),
+            array(0, false),
+            array(0.0, false),
+            array(0x00, false),
+            array(true, false),
+
+            // but these are
+            array('', true),
+            array(array(), true),
+            array(null, true),
+            array(false, true),
+            array("\0", true)
+        );
+
+        foreach($tests as $test) {
+            $this->assertEquals($test[1], blank($test[0]), "using " . var_export($test[0], true));
+        }
+    }
+
+    function test_trim() {
+        $whitespace = " \t\r\n";
+        $this->assertFalse(blank($whitespace), "using default \$trim value");
+        $this->assertFalse(blank($whitespace, false), "using \$trim = false");
+        $this->assertTrue(blank($whitespace, true), "using \$trim = true");
+    }
+
+    function test_undefined() {
+        $undef = array();
+        $this->assertTrue(blank($var), "using undefined/unitialised variable");
+        $this->assertTrue(blank($undef['nope']), "using undefined array index");
+        $this->assertTrue(blank($this->nope), "using unset object property");
+    }
+
+}
diff --git a/_test/tests/inc/common_saveWikiText.test.php b/_test/tests/inc/common_saveWikiText.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..800e20952be1f760d6195fa62b6a0a796aedf72e
--- /dev/null
+++ b/_test/tests/inc/common_saveWikiText.test.php
@@ -0,0 +1,145 @@
+<?php
+
+class common_saveWikiText_test extends DokuWikiTest {
+
+    /**
+     * Execute a whole bunch of saves on the same page and check the results
+     */
+    function test_savesequence() {
+        global $REV;
+
+        $page = 'page';
+        $file = wikiFN($page);
+
+        // create the page
+        $this->assertFileNotExists($file);
+        saveWikiText($page, 'teststring', 'first save', false);
+        $this->assertFileExists($file);
+        $lastmod = filemtime($file);
+
+        $pagelog = new PageChangeLog($page);
+        $revisions = $pagelog->getRevisions(-1, 200);
+        $this->assertEquals(1, count($revisions));
+        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
+        $this->assertEquals('first save', $revinfo['sum']);
+        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
+
+        sleep(1); // wait for new revision ID
+
+        // save with same content should be ignored
+        saveWikiText($page, 'teststring', 'second save', false);
+        clearstatcache(false, $file);
+        $this->assertEquals($lastmod, filemtime($file));
+
+        $pagelog = new PageChangeLog($page);
+        $revisions = $pagelog->getRevisions(-1, 200);
+        $this->assertEquals(1, count($revisions));
+
+        // update the page with new text
+        saveWikiText($page, 'teststring2', 'third save', false);
+        clearstatcache(false, $file);
+        $newmod = filemtime($file);
+        $this->assertNotEquals($lastmod, $newmod);
+        $lastmod = $newmod;
+
+        $pagelog = new PageChangeLog($page);
+        $revisions = $pagelog->getRevisions(-1, 200);
+        $this->assertEquals(2, count($revisions));
+        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
+        $this->assertEquals('third save', $revinfo['sum']);
+        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
+
+        sleep(1); // wait for new revision ID
+
+        // add a minor edit (unauthenticated)
+        saveWikiText($page, 'teststring3', 'fourth save', true);
+        clearstatcache(false, $file);
+        $newmod = filemtime($file);
+        $this->assertNotEquals($lastmod, $newmod);
+        $lastmod = $newmod;
+
+        $pagelog = new PageChangeLog($page);
+        $revisions = $pagelog->getRevisions(-1, 200);
+        $this->assertEquals(3, count($revisions));
+        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
+        $this->assertEquals('fourth save', $revinfo['sum']);
+        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
+
+        sleep(1); // wait for new revision ID
+
+        // add a minor edit (authenticated)
+        $_SERVER['REMOTE_USER'] = 'user';
+        saveWikiText($page, 'teststring4', 'fifth save', true);
+        clearstatcache(false, $file);
+        $newmod = filemtime($file);
+        $this->assertNotEquals($lastmod, $newmod);
+        $lastmod = $newmod;
+
+        $pagelog = new PageChangeLog($page);
+        $revisions = $pagelog->getRevisions(-1, 200);
+        $this->assertEquals(4, count($revisions));
+        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
+        $this->assertEquals('fifth save', $revinfo['sum']);
+        $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']);
+
+        sleep(1); // wait for new revision ID
+
+        // delete
+        saveWikiText($page, '', 'sixth save', false);
+        clearstatcache(false, $file);
+        $this->assertFileNotExists($file);
+
+        $pagelog = new PageChangeLog($page);
+        $revisions = $pagelog->getRevisions(-1, 200);
+        $this->assertEquals(5, count($revisions));
+        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
+        $this->assertEquals('sixth save', $revinfo['sum']);
+        $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']);
+
+        sleep(1); // wait for new revision ID
+
+        // restore
+        $REV = $lastmod;
+        saveWikiText($page, 'teststring4', 'seventh save', true);
+        clearstatcache(false, $file);
+        $this->assertFileExists($file);
+        $newmod = filemtime($file);
+        $this->assertNotEquals($lastmod, $newmod);
+        $lastmod = $newmod;
+
+        $pagelog = new PageChangeLog($page);
+        $revisions = $pagelog->getRevisions(-1, 200);
+        $this->assertEquals(6, count($revisions));
+        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
+        $this->assertEquals('seventh save', $revinfo['sum']);
+        $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']);
+        $this->assertEquals($REV, $revinfo['extra']);
+        $REV = '';
+
+        sleep(1); // wait for new revision ID
+
+        // create external edit
+        file_put_contents($file, 'teststring5');
+
+        sleep(1); // wait for new revision ID
+
+        // save on top of external edit
+        saveWikiText($page, 'teststring6', 'eigth save', false);
+        clearstatcache(false, $file);
+        $newmod = filemtime($file);
+        $this->assertNotEquals($lastmod, $newmod);
+        $lastmod = $newmod;
+
+        $pagelog = new PageChangeLog($page);
+        $revisions = $pagelog->getRevisions(-1, 200);
+        $this->assertEquals(8, count($revisions)); // two more revisions now!
+        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
+        $this->assertEquals('eigth save', $revinfo['sum']);
+        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
+
+        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
+        $this->assertEquals('external edit', $revinfo['sum']);
+        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
+
+    }
+}
diff --git a/_test/tests/inc/form/buttonelement.test.php b/_test/tests/inc/form/buttonelement.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e1a7e1e29234a389f6a97bb6ec17810ce78e44e
--- /dev/null
+++ b/_test/tests/inc/form/buttonelement.test.php
@@ -0,0 +1,40 @@
+<?php
+
+use dokuwiki\Form;
+
+class form_buttonelement_test extends DokuWikiTest {
+
+    function test_simple() {
+        $form = new Form\Form();
+        $form->addButton('foo', 'Hello <b>World</b>')->val('bam')->attr('type', 'submit');
+
+        $html = $form->toHTML();
+        $pq = phpQuery::newDocumentXHTML($html);
+
+        $input = $pq->find('button[name=foo]');
+        $this->assertTrue($input->length == 1);
+        $this->assertEquals('bam', $input->val());
+        $this->assertEquals('submit', $input->attr('type'));
+        $this->assertEquals('Hello <b>World</b>', $input->text()); // tags were escaped
+
+        $b = $input->find('b'); // no tags found
+        $this->assertTrue($b->length == 0);
+    }
+
+    function test_html() {
+        $form = new Form\Form();
+        $form->addButtonHTML('foo', 'Hello <b>World</b>')->val('bam')->attr('type', 'submit');
+
+        $html = $form->toHTML();
+        $pq = phpQuery::newDocumentXHTML($html);
+
+        $input = $pq->find('button[name=foo]');
+        $this->assertTrue($input->length == 1);
+        $this->assertEquals('bam', $input->val());
+        $this->assertEquals('submit', $input->attr('type'));
+        $this->assertEquals('Hello World', $input->text()); // tags are stripped here
+
+        $b = $input->find('b'); // tags found
+        $this->assertTrue($b->length == 1);
+    }
+}
diff --git a/_test/tests/inc/form/checkableelement.test.php b/_test/tests/inc/form/checkableelement.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..e1491f6ece59c30fb2f74ea0ed52ab260d646f8a
--- /dev/null
+++ b/_test/tests/inc/form/checkableelement.test.php
@@ -0,0 +1,51 @@
+<?php
+
+use dokuwiki\Form;
+
+class form_checkableelement_test extends DokuWikiTest {
+
+    function test_defaults() {
+        $form = new Form\Form();
+        $form->addRadioButton('foo', 'label text first')->val('first')->attr('checked', 'checked');
+        $form->addRadioButton('foo', 'label text second')->val('second');
+
+        $html = $form->toHTML();
+        $pq = phpQuery::newDocumentXHTML($html);
+
+        $input = $pq->find('input[name=foo]');
+        $this->assertTrue($input->length == 2);
+
+        $label = $pq->find('label');
+        $this->assertTrue($label->length == 2);
+
+        $inputs = $pq->find('input[name=foo]');
+        $this->assertEquals('first', pq($inputs->elements[0])->val());
+        $this->assertEquals('second', pq($inputs->elements[1])->val());
+        $this->assertEquals('checked', pq($inputs->elements[0])->attr('checked'));
+        $this->assertEquals('', pq($inputs->elements[1])->attr('checked'));
+        $this->assertEquals('radio', pq($inputs->elements[0])->attr('type'));
+    }
+
+    /**
+     * check that posted values overwrite preset default
+     */
+    function test_prefill() {
+        global $INPUT;
+        $INPUT->post->set('foo', 'second');
+
+
+        $form = new Form\Form();
+        $form->addRadioButton('foo', 'label text first')->val('first')->attr('checked', 'checked');
+        $form->addRadioButton('foo', 'label text second')->val('second');
+
+        $html = $form->toHTML();
+        $pq = phpQuery::newDocumentXHTML($html);
+
+        $inputs = $pq->find('input[name=foo]');
+        $this->assertEquals('first', pq($inputs->elements[0])->val());
+        $this->assertEquals('second', pq($inputs->elements[1])->val());
+        $this->assertEquals('', pq($inputs->elements[0])->attr('checked'));
+        $this->assertEquals('checked', pq($inputs->elements[1])->attr('checked'));
+        $this->assertEquals('radio', pq($inputs->elements[0])->attr('type'));
+    }
+}
diff --git a/_test/tests/inc/form/form.test.php b/_test/tests/inc/form/form.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..3ae832b2cd5d6f5aa81bb633a7a012d8209e91a9
--- /dev/null
+++ b/_test/tests/inc/form/form.test.php
@@ -0,0 +1,115 @@
+<?php
+
+use dokuwiki\Form;
+
+/**
+ * makes form internals accessible for testing
+ */
+class TestForm extends Form\Form {
+    /**
+     * @return array list of element types
+     */
+    function getElementTypeList() {
+        $list = array();
+        foreach($this->elements as $element) $list[] = $element->getType();
+        return $list;
+    }
+
+    public function balanceFieldsets() {
+        parent::balanceFieldsets();
+    }
+
+}
+
+class form_form_test extends DokuWikiTest {
+
+    /**
+     * checks that an empty form is initialized correctly
+     */
+    function test_defaults() {
+        global $INPUT;
+        global $ID;
+        $ID = 'some:test';
+        $INPUT->get->set('id', $ID);
+        $INPUT->get->set('foo', 'bar');
+
+        $form = new Form\Form();
+        $html = $form->toHTML();
+        $pq = phpQuery::newDocumentXHTML($html);
+
+        $this->assertTrue($pq->find('form')->hasClass('doku_form'));
+        $this->assertEquals(wl($ID, array('foo' => 'bar'), false, '&'), $pq->find('form')->attr('action'));
+        $this->assertEquals('post', $pq->find('form')->attr('method'));
+
+        $this->assertTrue($pq->find('input[name=sectok]')->length == 1);
+    }
+
+
+    function test_fieldsetbalance() {
+        $form = new TestForm();
+        $form->addFieldsetOpen();
+        $form->addHTML('ignored');
+        $form->addFieldsetClose();
+        $form->balanceFieldsets();
+
+        $this->assertEquals(
+            array(
+                'fieldsetopen',
+                'html',
+                'fieldsetclose'
+            ),
+            $form->getElementTypeList()
+        );
+
+        $form = new TestForm();
+        $form->addHTML('ignored');
+        $form->addFieldsetClose();
+        $form->balanceFieldsets();
+
+        $this->assertEquals(
+            array(
+                'fieldsetopen',
+                'html',
+                'fieldsetclose'
+            ),
+            $form->getElementTypeList()
+        );
+
+
+        $form = new TestForm();
+        $form->addFieldsetOpen();
+        $form->addHTML('ignored');
+        $form->balanceFieldsets();
+
+        $this->assertEquals(
+            array(
+                'fieldsetopen',
+                'html',
+                'fieldsetclose'
+            ),
+            $form->getElementTypeList()
+        );
+
+        $form = new TestForm();
+        $form->addHTML('ignored');
+        $form->addFieldsetClose();
+        $form->addHTML('ignored');
+        $form->addFieldsetOpen();
+        $form->addHTML('ignored');
+        $form->balanceFieldsets();
+
+        $this->assertEquals(
+            array(
+                'fieldsetopen',
+                'html',
+                'fieldsetclose',
+                'html',
+                'fieldsetopen',
+                'html',
+                'fieldsetclose'
+            ),
+            $form->getElementTypeList()
+        );
+    }
+
+}
diff --git a/_test/tests/inc/form/inputelement.test.php b/_test/tests/inc/form/inputelement.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..3257d2a892a0ef700e6eec138c15633f12c01aa4
--- /dev/null
+++ b/_test/tests/inc/form/inputelement.test.php
@@ -0,0 +1,58 @@
+<?php
+
+use dokuwiki\Form;
+
+class form_inputelement_test extends DokuWikiTest {
+
+    function test_defaults() {
+        $form = new Form\Form();
+        $form->addTextInput('foo', 'label text')->val('this is text');
+
+        $html = $form->toHTML();
+        $pq = phpQuery::newDocumentXHTML($html);
+
+        $input = $pq->find('input[name=foo]');
+        $this->assertTrue($input->length == 1);
+        $this->assertEquals('this is text', $input->val());
+        $this->assertEquals('text', $input->attr('type'));
+
+        $label = $pq->find('label');
+        $this->assertTrue($label->length == 1);
+        $this->assertEquals('label text', $label->find('span')->text());
+    }
+
+    /**
+     * check that posted values overwrite preset default
+     */
+    function test_prefill() {
+        global $INPUT;
+        $INPUT->post->set('foo', 'a new text');
+
+        $form = new Form\Form();
+        $form->addTextInput('foo', 'label text')->val('this is text');
+
+        $html = $form->toHTML();
+        $pq = phpQuery::newDocumentXHTML($html);
+
+        $input = $pq->find('input[name=foo]');
+        $this->assertTrue($input->length == 1);
+        $this->assertEquals('a new text', $input->val());
+    }
+
+    function test_password() {
+        $form = new Form\Form();
+        $form->addPasswordInput('foo', 'label text')->val('this is text');
+
+        $html = $form->toHTML();
+        $pq = phpQuery::newDocumentXHTML($html);
+
+        $input = $pq->find('input[name=foo]');
+        $this->assertTrue($input->length == 1);
+        $this->assertEquals('this is text', $input->val());
+        $this->assertEquals('password', $input->attr('type'));
+
+        $label = $pq->find('label');
+        $this->assertTrue($label->length == 1);
+        $this->assertEquals('label text', $label->find('span')->text());
+    }
+}
diff --git a/_test/tests/inc/form_form.test.php b/_test/tests/inc/form_form.test.php
index 02242a807ff64812fee492bf386da13d0e9778d4..7f168b89583cfcabae0222368e971c5d55e881aa 100644
--- a/_test/tests/inc/form_form.test.php
+++ b/_test/tests/inc/form_form.test.php
@@ -30,9 +30,9 @@ class form_test extends DokuWikiTest {
     $realoutput .= '<input type="checkbox" id="check__id" name="r" value="1" /> ';
     $realoutput .= '<span>Check</span></label>';
     $realoutput .= "\n";
-    $realoutput .= '<input name="do[save]" type="submit" value="Save" class="button" accesskey="s" title="Save [S]" />';
+    $realoutput .= '<button name="do[save]" type="submit" accesskey="s" title="Save [S]">Save</button>';
     $realoutput .= "\n";
-    $realoutput .= '<input name="do[cancel]" type="submit" value="Cancel" class="button" />';
+    $realoutput .= '<button name="do[cancel]" type="submit">Cancel</button>';
     $realoutput .= "\n";
     $realoutput .= "</fieldset>\n</div></form>\n";
     return $realoutput;
diff --git a/_test/tests/inc/httpclient_http.test.php b/_test/tests/inc/httpclient_http.test.php
index 3446e1184399ae6321a5d33abcee7293c6b78195..94b8e1bc10c86e4762ed09ac678f5306168bbf5b 100644
--- a/_test/tests/inc/httpclient_http.test.php
+++ b/_test/tests/inc/httpclient_http.test.php
@@ -289,6 +289,7 @@ class httpclient_http_test extends DokuWikiTest {
      * This address caused trouble with stream_select()
      *
      * @group internet
+     * @group flaky
      */
     function test_wikimatrix(){
         $http = new HTTPMockClient();
diff --git a/_test/tests/inc/httpclient_http_proxy.test.php b/_test/tests/inc/httpclient_http_proxy.test.php
index c44dc7ed71215d82bf1da682a49b973e9c685826..dae801dbd751900de10dcfe44896e49f1fa2b354 100644
--- a/_test/tests/inc/httpclient_http_proxy.test.php
+++ b/_test/tests/inc/httpclient_http_proxy.test.php
@@ -3,7 +3,7 @@
 require_once (__DIR__ . '/httpclient_mock.php');
 
 class httpclient_http_proxy_test extends DokuWikiTest {
-    protected $url = 'http://test.dokuwiki.org/README';
+    protected $url = 'http://httpbin.org/user-agent';
 
     /**
      * @group internet
@@ -15,7 +15,7 @@ class httpclient_http_proxy_test extends DokuWikiTest {
         $http->proxy_port = 8080;
 
         $data = $http->get($this->url);
-        $this->assertFalse($data === false, 'HTTP response '.$http->error);
+        $this->assertFalse($data === false, 'HTTP response: '.$http->error.' ['.$this->url.']');
         $this->assertTrue(strpos($data,'DokuWiki') !== false, 'response content');
     }
 }
\ No newline at end of file
diff --git a/_test/tests/inc/httpclient_https_proxy.test.php b/_test/tests/inc/httpclient_https_proxy.test.php
index 9402e91af5464c55690615b44712c8c73b743d3d..cf5b9a8b933f4f5db18a1759c62122d3c8c2c184 100644
--- a/_test/tests/inc/httpclient_https_proxy.test.php
+++ b/_test/tests/inc/httpclient_https_proxy.test.php
@@ -2,7 +2,7 @@
 require_once dirname(__FILE__).'/httpclient_http_proxy.test.php';
 
 class httpclient_https_proxy_test extends httpclient_http_proxy_test {
-    protected $url = 'https://www.dokuwiki.org/README';
+    protected $url = 'https://httpbin.org/user-agent';
 
     public function setUp(){
         // skip tests when this PHP has no SSL support
@@ -27,4 +27,4 @@ class httpclient_https_proxy_test extends httpclient_http_proxy_test {
         $this->assertFalse($data);
         $this->assertEquals(-150, $http->status);
     }
-}
\ No newline at end of file
+}
diff --git a/_test/tests/inc/io_deletefromfile.test.php b/_test/tests/inc/io_deletefromfile.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..e86150aac8a3864f0aca40ec266fd43ce77778ae
--- /dev/null
+++ b/_test/tests/inc/io_deletefromfile.test.php
@@ -0,0 +1,15 @@
+<?php
+
+class io_deletefromfile_test extends DokuWikiTest {
+
+    function test_delete(){
+        $file = TMP_DIR.'/test.txt';
+        $contents = "The\012Delete\012Delete01\012Delete02\012Delete\012DeleteX\012Test\012";
+        io_saveFile($file, $contents);
+        $this->assertTrue(io_deleteFromFile($file, "Delete\012"));
+        $this->assertEquals("The\012Delete01\012Delete02\012DeleteX\012Test\012", io_readFile($file));
+        $this->assertTrue(io_deleteFromFile($file, "#Delete\\d+\012#", true));
+        $this->assertEquals("The\012DeleteX\012Test\012", io_readFile($file));
+    }
+
+}
diff --git a/_test/tests/inc/io_readfile.test.php b/_test/tests/inc/io_readfile.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..43bb7f80c90cf0437253912e18cd65d5d10bb898
--- /dev/null
+++ b/_test/tests/inc/io_readfile.test.php
@@ -0,0 +1,58 @@
+<?php
+
+class io_readfile_test extends DokuWikiTest {
+
+    /*
+     * dependency for tests needing zlib extension to pass
+     */
+    public function test_ext_zlib() {
+        if (!DOKU_HAS_GZIP) {
+            $this->markTestSkipped('skipping all zlib tests.  Need zlib extension');
+        }
+    }
+
+    /*
+     * dependency for tests needing zlib extension to pass
+     */
+    public function test_ext_bz2() {
+        if (!DOKU_HAS_BZIP) {
+            $this->markTestSkipped('skipping all bzip2 tests.  Need bz2 extension');
+        }
+    }
+
+    function test_plain(){
+        // since git converts line endings, we can't check in this test file but have to create it ourselves
+        $plain = TMP_DIR.'/test.txt';
+        file_put_contents($plain, "The\015\012Test\015\012");
+
+        $this->assertEquals("The\012Test\012", io_readFile($plain));
+        $this->assertEquals("The\015\012Test\015\012", io_readFile($plain, false));
+        $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/nope.txt'));
+    }
+
+    /**
+     * @depends test_ext_zlib
+     */
+    function test_gzfiles(){
+        $this->assertEquals("The\012Test\012", io_readFile(__DIR__.'/io_readfile/test.txt.gz'));
+        $this->assertEquals("The\015\012Test\015\012", io_readFile(__DIR__.'/io_readfile/test.txt.gz', false));
+        $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/nope.txt.gz'));
+        $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/corrupt.txt.gz'));
+    }
+
+    /**
+     * @depends test_ext_bz2
+     */
+    function test_bzfiles(){
+        $this->assertEquals("The\012Test\012", io_readFile(__DIR__.'/io_readfile/test.txt.bz2'));
+        $this->assertEquals("The\015\012Test\015\012", io_readFile(__DIR__.'/io_readfile/test.txt.bz2', false));
+        $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/nope.txt.bz2'));
+        $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/corrupt.txt.bz2'));
+        // internal bzfile function
+        $this->assertEquals(array("The\015\012","Test\015\012"), bzfile(__DIR__.'/io_readfile/test.txt.bz2', true));
+        $this->assertEquals(array_fill(0, 120, str_repeat('a', 80)."\012"), bzfile(__DIR__.'/io_readfile/large.txt.bz2', true));
+        $line = str_repeat('a', 8888)."\012";
+        $this->assertEquals(array($line,"\012",$line,"!"), bzfile(__DIR__.'/io_readfile/long.txt.bz2', true));
+    }
+
+}
diff --git a/_test/tests/inc/io_readfile/corrupt.txt.bz2 b/_test/tests/inc/io_readfile/corrupt.txt.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..97f742919a339644f786b24fa745851a560e3cc4
--- /dev/null
+++ b/_test/tests/inc/io_readfile/corrupt.txt.bz2
@@ -0,0 +1 @@
+BZh91AY&SYXHd¬
\ No newline at end of file
diff --git a/_test/tests/inc/io_readfile/corrupt.txt.gz b/_test/tests/inc/io_readfile/corrupt.txt.gz
new file mode 100644
index 0000000000000000000000000000000000000000..9d7666f47b76cc1075cbf80bbe597751af3ccf7e
Binary files /dev/null and b/_test/tests/inc/io_readfile/corrupt.txt.gz differ
diff --git a/_test/tests/inc/io_readfile/large.txt.bz2 b/_test/tests/inc/io_readfile/large.txt.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..3135435f82ed3e14ecd60b87af5b9d16f247f45a
Binary files /dev/null and b/_test/tests/inc/io_readfile/large.txt.bz2 differ
diff --git a/_test/tests/inc/io_readfile/long.txt.bz2 b/_test/tests/inc/io_readfile/long.txt.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..fb40759e618fa0c589f4a787e11fc48b6d7c75e4
Binary files /dev/null and b/_test/tests/inc/io_readfile/long.txt.bz2 differ
diff --git a/_test/tests/inc/io_readfile/test.txt.bz2 b/_test/tests/inc/io_readfile/test.txt.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..3d4e1b226919d86934f6c95756e867b498ffa898
Binary files /dev/null and b/_test/tests/inc/io_readfile/test.txt.bz2 differ
diff --git a/_test/tests/inc/io_readfile/test.txt.gz b/_test/tests/inc/io_readfile/test.txt.gz
new file mode 100644
index 0000000000000000000000000000000000000000..8ac8f7d402263909ed35337fa8d9d68b7f4b165d
Binary files /dev/null and b/_test/tests/inc/io_readfile/test.txt.gz differ
diff --git a/_test/tests/inc/io_replaceinfile.test.php b/_test/tests/inc/io_replaceinfile.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..d517584e186c7c5c749e293cf2411bb354b9c2e9
--- /dev/null
+++ b/_test/tests/inc/io_replaceinfile.test.php
@@ -0,0 +1,108 @@
+<?php
+
+class io_replaceinfile_test extends DokuWikiTest {
+
+    protected $contents = "The\012Delete\012Delete\012Delete01\012Delete02\012Delete\012DeleteX\012Test\012";
+
+    /*
+     * dependency for tests needing zlib extension to pass
+     */
+    public function test_ext_zlib() {
+        if (!DOKU_HAS_GZIP) {
+            $this->markTestSkipped('skipping all zlib tests.  Need zlib extension');
+        }
+    }
+
+    /*
+     * dependency for tests needing zlib extension to pass
+     */
+    public function test_ext_bz2() {
+        if (!DOKU_HAS_BZIP) {
+            $this->markTestSkipped('skipping all bzip2 tests.  Need bz2 extension');
+        }
+    }
+
+    function _write($file){
+
+        io_saveFile($file, $this->contents);
+        // Replace one, no regex
+        $this->assertTrue(io_replaceInFile($file, "Delete\012", "Delete00\012", false, 1));
+        $this->assertEquals("The\012Delete00\012Delete\012Delete01\012Delete02\012Delete\012DeleteX\012Test\012", io_readFile($file));
+        // Replace all, no regex
+        $this->assertTrue(io_replaceInFile($file, "Delete\012", "DeleteX\012", false, -1));
+        $this->assertEquals("The\012Delete00\012DeleteX\012Delete01\012Delete02\012DeleteX\012DeleteX\012Test\012", io_readFile($file));
+        // Replace two, regex and backreference
+        $this->assertTrue(io_replaceInFile($file, "#Delete(\\d+)\012#", "\\1\012", true, 2));
+        $this->assertEquals("The\01200\012DeleteX\01201\012Delete02\012DeleteX\012DeleteX\012Test\012", io_readFile($file));
+        // Delete and insert, no regex
+        $this->assertTrue(io_replaceInFile($file, "DeleteX\012", "Replace\012", false, 0));
+        $this->assertEquals("The\01200\01201\012Delete02\012Test\012Replace\012", io_readFile($file));
+    }
+
+    function test_replace(){
+        $this->_write(TMP_DIR.'/test.txt');
+    }
+
+
+    /**
+     * @depends test_ext_zlib
+     */
+    function test_gzwrite(){
+        $this->_write(TMP_DIR.'/test.txt.gz');
+    }
+
+    /**
+     * @depends test_ext_bz2
+     */
+    function test_bzwrite(){
+        $this->_write(TMP_DIR.'/test.txt.bz2');
+    }
+
+    /**
+     * Test for a non-regex replacement where $newline contains a backreference like construct - it shouldn't affect the replacement
+     */
+    function test_edgecase1()
+    {
+        $file = TMP_DIR . '/test.txt';
+
+        io_saveFile($file, $this->contents);
+        $this->assertTrue(io_replaceInFile($file, "Delete\012", "Delete\\00\012", false, -1));
+        $this->assertEquals("The\012Delete\\00\012Delete\\00\012Delete01\012Delete02\012Delete\\00\012DeleteX\012Test\012", io_readFile($file), "Edge case: backreference like construct in replacement line");
+    }
+    /**
+     * Test with replace all where replacement line == search line - must not timeout
+     *
+     * @small
+     */
+    function test_edgecase2() {
+        $file = TMP_DIR.'/test.txt';
+
+        io_saveFile($file, $this->contents);
+        $this->assertTrue(io_replaceInFile($file, "Delete\012", "Delete\012", false, -1));
+        $this->assertEquals("The\012Delete\012Delete\012Delete01\012Delete02\012Delete\012DeleteX\012Test\012", io_readFile($file), "Edge case: new line the same as old line");
+    }
+
+    /**
+     *    Test where $oldline exactly matches one line and also matches part of other lines - only the exact match should be replaced
+     */
+    function test_edgecase3()
+    {
+        $file = TMP_DIR . '/test.txt';
+        $contents = "The\012Delete\01201Delete\01202Delete\012Test\012";
+
+        io_saveFile($file, $contents);
+        $this->assertTrue(io_replaceInFile($file, "Delete\012", "Replace\012", false, -1));
+        $this->assertEquals("The\012Replace\01201Delete\01202Delete\012Test\012", io_readFile($file), "Edge case: old line is a match for parts of other lines");
+    }
+
+    /**
+     * Test passing an invalid parameter.
+     *
+     * @expectedException PHPUnit_Framework_Error_Warning
+     */
+    function test_badparam()
+    {
+        /* The empty $oldline parameter should be caught before the file doesn't exist test. */
+        $this->assertFalse(io_replaceInFile(TMP_DIR.'/not_existing_file.txt', '', '', false, 0));
+    }
+}
diff --git a/_test/tests/inc/io_savefile.test.php b/_test/tests/inc/io_savefile.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..5f387b8a16bbe12537af047c43d97f444399209f
--- /dev/null
+++ b/_test/tests/inc/io_savefile.test.php
@@ -0,0 +1,49 @@
+<?php
+
+class io_savefile_test extends DokuWikiTest {
+
+    /*
+     * dependency for tests needing zlib extension to pass
+     */
+    public function test_ext_zlib() {
+        if (!DOKU_HAS_GZIP) {
+            $this->markTestSkipped('skipping all zlib tests.  Need zlib extension');
+        }
+    }
+
+    /*
+     * dependency for tests needing zlib extension to pass
+     */
+    public function test_ext_bz2() {
+        if (!DOKU_HAS_BZIP) {
+            $this->markTestSkipped('skipping all bzip2 tests.  Need bz2 extension');
+        }
+    }
+
+    function _write($file){
+        $contents = "The\012Write\012Test\012";
+        $this->assertTrue(io_saveFile($file, $contents));
+        $this->assertEquals($contents, io_readFile($file));
+        $this->assertTrue(io_saveFile($file, $contents, true));
+        $this->assertEquals($contents.$contents, io_readFile($file));
+    }
+
+    function test_write(){
+        $this->_write(TMP_DIR.'/test.txt');
+    }
+
+    /**
+     * @depends test_ext_zlib
+     */
+    function test_gzwrite(){
+        $this->_write(TMP_DIR.'/test.txt.gz');
+    }
+
+    /**
+     * @depends test_ext_bz2
+     */
+    function test_bzwrite(){
+        $this->_write(TMP_DIR.'/test.txt.bz2');
+    }
+
+}
diff --git a/_test/tests/inc/ixr_library_date.test.php b/_test/tests/inc/ixr_library_date.test.php
index f384869258abf341aee97fb885b7222409c7ce21..0c81e674196ca7a038affe6710d069e860eb0ad9 100644
--- a/_test/tests/inc/ixr_library_date.test.php
+++ b/_test/tests/inc/ixr_library_date.test.php
@@ -2,6 +2,9 @@
 
 require_once DOKU_INC.'inc/IXR_Library.php';
 
+/**
+ * Class ixr_library_date_test
+ */
 class ixr_library_date_test extends DokuWikiTest {
 
 
@@ -16,18 +19,24 @@ class ixr_library_date_test extends DokuWikiTest {
             array('2010-08-17T09:23:14Z', 1282036994),
             array('20100817T09:23:14Z',   1282036994),
 
+            // with timezone
+            array('2010-08-17 09:23:14+0000',  1282036994),
+            array('2010-08-17 09:23:14+00:00',  1282036994),
+            array('2010-08-17 12:23:14+03:00',  1282036994),
+
             // no seconds
             array('2010-08-17T09:23',     1282036980),
             array('20100817T09:23',       1282036980),
 
             // no time
             array('2010-08-17',           1282003200),
-            //array('20100817',             1282003200), #this will NOT be parsed, but is assumed to be timestamp
+            array(1282036980,             1282036980),
+//            array('20100817',             1282003200), #this will NOT be parsed, but is assumed to be timestamp
         );
 
         foreach($tests as $test){
             $dt = new IXR_Date($test[0]);
-            $this->assertEquals($dt->getTimeStamp(),$test[1]);
+            $this->assertEquals($test[1], $dt->getTimeStamp());
         }
     }
 
diff --git a/_test/tests/inc/parser/lexer.test.php b/_test/tests/inc/parser/lexer.test.php
index d0965a13e6c055539bcceb76a2722dd47cc664da..c506659286da542d96bc0eafaa26d7042d84512c 100644
--- a/_test/tests/inc/parser/lexer.test.php
+++ b/_test/tests/inc/parser/lexer.test.php
@@ -146,7 +146,7 @@ class TestOfLexerStateStack extends DokuWikiTest {
 }
 
 class TestParser {
-    function TestParser() {
+    function __construct() {
     }
     function accept() {
     }
@@ -364,7 +364,7 @@ class TestOfLexerHandlers extends DokuWikiTest {
 
 class TestParserByteIndex {
 
-    function TestParserByteIndex() {}
+    function __construct() {}
 
     function ignore() {}
 
diff --git a/_test/tests/inc/parser/parser_media.test.php b/_test/tests/inc/parser/parser_media.test.php
index d9a0626f54ba63a1f5daf5dcb61bb03096e9625a..abbcfe2130ddb3cfc0ca5e5b69f7ed524c054d0a 100644
--- a/_test/tests/inc/parser/parser_media.test.php
+++ b/_test/tests/inc/parser/parser_media.test.php
@@ -30,12 +30,21 @@ class TestOfDoku_Parser_Media extends TestOfDoku_Parser {
         $source = '<source src="http://some.where.far/away.ogv" type="video/ogg" />';
         $this->assertEquals(substr($url,67,64),$source);
         // work around random token
-        $a_first_part = '<a href="/./lib/exe/fetch.php?cache=&amp;tok=';
+        $a_first_part = '<a href="' . DOKU_BASE . 'lib/exe/fetch.php?cache=&amp;tok=';
         $a_second_part = '&amp;media=http%3A%2F%2Fsome.where.far%2Faway.ogv" class="media mediafile mf_ogv" title="http://some.where.far/away.ogv">';
-        $this->assertEquals(substr($url,132,45),$a_first_part);
-        $this->assertEquals(substr($url,183,121),$a_second_part);
+
+        $substr_start = 132;
+        $substr_len = strlen($a_first_part);
+        $this->assertEquals($a_first_part, substr($url, $substr_start, $substr_len));
+
+        $substr_start = strpos($url, '&amp;media', $substr_start + $substr_len);
+        $this->assertNotSame(false, $substr_start, 'Substring not found.');
+        $substr_len = strlen($a_second_part);
+        $this->assertEquals($a_second_part, substr($url, $substr_start, $substr_len));
+
         $rest = 'away.ogv</a></video>'."\n";
-        $this->assertEquals(substr($url,304),$rest);
+        $substr_start = strlen($url) - strlen($rest);
+        $this->assertEquals($rest, substr($url, $substr_start));
     }
 
     /**
@@ -58,12 +67,21 @@ class TestOfDoku_Parser_Media extends TestOfDoku_Parser {
         $Renderer = new Doku_Renderer_xhtml();
         $url = $Renderer->externalmedia($file, null, null, null, null, 'cache', 'details', true);
         // work around random token
-        $a_first_part = '<a href="/./lib/exe/fetch.php?tok=';
+        $a_first_part = '<a href="' . DOKU_BASE . 'lib/exe/fetch.php?tok=';
         $a_second_part = '&amp;media=http%3A%2F%2Fsome.where.far%2Faway.vid" class="media mediafile mf_vid" title="http://some.where.far/away.vid">';
-        $this->assertEquals(substr($url,0,34),$a_first_part);
-        $this->assertEquals(substr($url,40,121),$a_second_part);
+
+        $substr_start = 0;
+        $substr_len = strlen($a_first_part);
+        $this->assertEquals($a_first_part, substr($url, $substr_start, $substr_len));
+
+        $substr_start = strpos($url, '&amp;media', $substr_start + $substr_len);
+        $this->assertNotSame(false, $substr_start, 'Substring not found.');
+        $substr_len = strlen($a_second_part);
+        $this->assertEquals($a_second_part, substr($url, $substr_start, $substr_len));
+
         $rest = 'away.vid</a>';
-        $this->assertEquals(substr($url,161),$rest);
+        $substr_start = strlen($url) - strlen($rest);
+        $this->assertEquals($rest, substr($url, $substr_start));
     }
 
 
@@ -84,20 +102,33 @@ class TestOfDoku_Parser_Media extends TestOfDoku_Parser {
         $Renderer = new Doku_Renderer_xhtml();
         $url = $Renderer->externalmedia($file,null,null,null,null,'cache','details',true);
 
-        $video = '<video class="media" width="320" height="240" controls="controls" poster="/./lib/exe/fetch.php?media=wiki:kind_zu_katze.png">';
-        $this->assertEquals(substr($url,0,125),$video);
+        $video = '<video class="media" width="320" height="240" controls="controls" poster="' . DOKU_BASE . 'lib/exe/fetch.php?media=wiki:kind_zu_katze.png">';
+        $substr_start = 0;
+        $substr_len = strlen($video);
+        $this->assertEquals($video, substr($url, $substr_start, $substr_len));
+
+        // find $source_webm in $url
+        $source_webm = '<source src="' . DOKU_BASE . 'lib/exe/fetch.php?media=wiki:kind_zu_katze.webm" type="video/webm" />';
+        $substr_start = strpos($url, $source_webm, $substr_start + $substr_len);
+        $this->assertNotSame(false, $substr_start, 'Substring not found.');
+
+        // find $source_ogv in $url
+        $source_ogv = '<source src="' . DOKU_BASE . 'lib/exe/fetch.php?media=wiki:kind_zu_katze.ogv" type="video/ogg" />';
+        $substr_start = strpos($url, $source_ogv, $substr_start + strlen($source_webm));
+        $this->assertNotSame(false, $substr_start, 'Substring not found.');
 
-        $source_webm = '<source src="/./lib/exe/fetch.php?media=wiki:kind_zu_katze.webm" type="video/webm" />';
-        $this->assertEquals(substr($url,126,85),$source_webm);
-        $source_ogv = '<source src="/./lib/exe/fetch.php?media=wiki:kind_zu_katze.ogv" type="video/ogg" />';
-        $this->assertEquals(substr($url,212,83),$source_ogv);
+        // find $a_webm in $url
+        $a_webm = '<a href="' . DOKU_BASE . 'lib/exe/fetch.php?id=&amp;cache=&amp;media=wiki:kind_zu_katze.webm" class="media mediafile mf_webm" title="wiki:kind_zu_katze.webm (99.1 KB)">kind_zu_katze.webm</a>';
+        $substr_start = strpos($url, $a_webm, $substr_start + strlen($source_ogv));
+        $this->assertNotSame(false, $substr_start, 'Substring not found.');
 
-        $a_webm = '<a href="/./lib/exe/fetch.php?id=&amp;cache=&amp;media=wiki:kind_zu_katze.webm" class="media mediafile mf_webm" title="wiki:kind_zu_katze.webm (99.1 KB)">kind_zu_katze.webm</a>';
-        $a_ogv = '<a href="/./lib/exe/fetch.php?id=&amp;cache=&amp;media=wiki:kind_zu_katze.ogv" class="media mediafile mf_ogv" title="wiki:kind_zu_katze.ogv (44.8 KB)">kind_zu_katze.ogv</a>';
-        $this->assertEquals(substr($url,296,176),$a_webm);
-        $this->assertEquals(substr($url,472,172),$a_ogv);
+        // find $a_webm in $url
+        $a_ogv = '<a href="' . DOKU_BASE . 'lib/exe/fetch.php?id=&amp;cache=&amp;media=wiki:kind_zu_katze.ogv" class="media mediafile mf_ogv" title="wiki:kind_zu_katze.ogv (44.8 KB)">kind_zu_katze.ogv</a>';
+        $substr_start = strpos($url, $a_ogv, $substr_start + strlen($a_webm));
+        $this->assertNotSame(false, $substr_start, 'Substring not found.');
 
         $rest = '</video>'."\n";
-        $this->assertEquals(substr($url,644),$rest);
+        $substr_start = strlen($url) - strlen($rest);
+        $this->assertEquals($rest, substr($url, $substr_start));
     }
 }
diff --git a/_test/tests/inc/parser/renderer_resolveinterwiki.test.php b/_test/tests/inc/parser/renderer_resolveinterwiki.test.php
index dd1ed1d3f64f488dbd1913b817d89d1864536940..772001b99f04c3263412d5e0cbf6b9f8fd85c294 100644
--- a/_test/tests/inc/parser/renderer_resolveinterwiki.test.php
+++ b/_test/tests/inc/parser/renderer_resolveinterwiki.test.php
@@ -14,21 +14,23 @@ class Test_resolveInterwiki extends DokuWikiTest {
         $Renderer->interwiki['withslash'] = '/test';
         $Renderer->interwiki['onlytext'] = ':onlytext{NAME}'; //with {URL} double urlencoded
         $Renderer->interwiki['withquery'] = ':anyns:{NAME}?do=edit';
+        //this was the only link with host/port/path/query. Keep it here for regression
+        $Renderer->interwiki['coral'] = 'http://{HOST}.{PORT}.nyud.net:8090{PATH}?{QUERY}';
 
         $tests = array(
             // shortcut, reference and expected
-            array('wp', 'foo @+%/#txt', 'http://en.wikipedia.org/wiki/foo @+%/#txt'),
-            array('amazon', 'foo @+%/#txt', 'http://www.amazon.com/exec/obidos/ASIN/foo%20%40%2B%25%2F/splitbrain-20/#txt'),
-            array('doku', 'foo @+%/#txt', 'http://www.dokuwiki.org/foo%20%40%2B%25%2F#txt'),
-            array('coral', 'http://example.com:83/path/naar/?query=foo%20%40%2B%25%2F', 'http://example.com.83.nyud.net:8090/path/naar/?query=foo%20%40%2B%25%2F'),
+            array('wp', 'foo [\\]^`{|}~@+#%?/#txt', 'https://en.wikipedia.org/wiki/foo %5B%5C%5D%5E%60%7B%7C%7D~@+%23%25?/#txt'),
+            array('amazon', 'foo [\\]^`{|}~@+#%?/#txt', 'https://www.amazon.com/exec/obidos/ASIN/foo%20%5B%5C%5D%5E%60%7B%7C%7D~%40%2B%23%25%3F%2F/splitbrain-20/#txt'),
+            array('doku', 'foo [\\]^`{|}~@+#%?/#txt', 'https://www.dokuwiki.org/foo%20%5B%5C%5D%5E%60%7B%7C%7D~%40%2B%23%25%3F%2F#txt'),
+            array('coral', 'http://example.com:83/path/naar/?query=foo%20%40%2B%25%3F%2F', 'http://example.com.83.nyud.net:8090/path/naar/?query=foo%20%40%2B%25%3F%2F'),
             array('scheme', 'ftp://foo @+%/#txt', 'ftp://example.com#txt'),
             //relative url
-            array('withslash', 'foo @+%/#txt', '/testfoo%20%40%2B%25%2F#txt'),
-            array('skype',  'foo @+%/#txt', 'skype:foo @+%/#txt'),
+            array('withslash', 'foo [\\]^`{|}~@+#%?/#txt', '/testfoo%20%5B%5C%5D%5E%60%7B%7C%7D~%40%2B%23%25%3F%2F#txt'),
+            array('skype',  'foo [\\]^`{|}~@+#%?/#txt', 'skype:foo %5B%5C%5D%5E%60%7B%7C%7D~@+%23%25?/#txt'),
             //dokuwiki id's
-            array('onlytext', 'foo @+%#txt', DOKU_BASE.'doku.php?id=onlytextfoo#txt'),
-            array('user', 'foo @+%#txt', DOKU_BASE.'doku.php?id=user:foo#txt'),
-            array('withquery', 'foo @+%#txt', DOKU_BASE.'doku.php?id=anyns:foo&amp;do=edit#txt')
+            array('onlytext', 'foo [\\]^`{|}~@+#%/#txt', DOKU_BASE.'doku.php?id=onlytextfoo#txt'),
+            array('user', 'foo [\\]^`{|}~@+#%/#txt', DOKU_BASE.'doku.php?id=user:foo#txt'),
+            array('withquery', 'foo [\\]^`{|}~@+#%/#txt', DOKU_BASE.'doku.php?id=anyns:foo&amp;do=edit#txt')
         );
 
         foreach($tests as $test) {
@@ -45,7 +47,7 @@ class Test_resolveInterwiki extends DokuWikiTest {
         $shortcut = 'nonexisting';
         $reference = 'foo @+%/';
         $url = $Renderer->_resolveInterWiki($shortcut, $reference);
-        $expected = 'http://www.google.com/search?q=foo%20%40%2B%25%2F&amp;btnI=lucky';
+        $expected = 'https://www.google.com/search?q=foo%20%40%2B%25%2F&amp;btnI=lucky';
 
         $this->assertEquals($expected, $url);
     }
diff --git a/_test/tests/inc/remote.test.php b/_test/tests/inc/remote.test.php
index d0d4eb7ce03aa8fd555b3303591d15a3bf03e43c..037b1dc0b316eaf5c4b27bba8be69ae1aeef61f9 100644
--- a/_test/tests/inc/remote.test.php
+++ b/_test/tests/inc/remote.test.php
@@ -160,10 +160,16 @@ class remote_test extends DokuWikiTest {
         $this->assertTrue($this->remote->hasAccess());
     }
 
+    /**
+     * @expectedException RemoteAccessDeniedException
+     */
     function test_hasAccessFail() {
         global $conf;
         $conf['remote'] = 0;
-        $this->assertFalse($this->remote->hasAccess());
+        // the hasAccess() should throw a Exception to keep the same semantics with xmlrpc.php.
+        // because the user(xmlrpc) check remote before .--> (!$conf['remote']) die('XML-RPC server not enabled.');
+        // so it must be a Exception when get here.
+        $this->remote->hasAccess();
     }
 
     function test_hasAccessFailAcl() {
diff --git a/_test/tests/inc/tar.test.php b/_test/tests/inc/tar.test.php
deleted file mode 100644
index 15453b16db94295bc31b5ff2ba4231b17b478b35..0000000000000000000000000000000000000000
--- a/_test/tests/inc/tar.test.php
+++ /dev/null
@@ -1,454 +0,0 @@
-<?php
-
-class Tar_TestCase extends DokuWikiTest {
-    /**
-     * file extensions that several tests use
-     */
-    protected $extensions = array('tar');
-
-    public function setUp() {
-        parent::setUp();
-        if (extension_loaded('zlib')) {
-            $this->extensions[] = 'tgz';
-        }
-        if (extension_loaded('bz2')) {
-            $this->extensions[] = 'tbz';
-        }
-    }
-
-    /*
-     * dependency for tests needing zlib extension to pass
-     */
-    public function test_ext_zlib() {
-        if (!extension_loaded('zlib')) {
-            $this->markTestSkipped('skipping all zlib tests.  Need zlib extension');
-        }
-    }
-
-    /*
-     * dependency for tests needing zlib extension to pass
-     */
-    public function test_ext_bz2() {
-        if (!extension_loaded('bz2')) {
-            $this->markTestSkipped('skipping all bzip2 tests.  Need bz2 extension');
-        }
-    }
-
-    /**
-     * simple test that checks that the given filenames and contents can be grepped from
-     * the uncompressed tar stream
-     *
-     * No check for format correctness
-     */
-    public function test_createdynamic() {
-        $tar = new Tar();
-
-        $dir  = dirname(__FILE__).'/tar';
-        $tdir = ltrim($dir,'/');
-
-        $tar->create();
-        $tar->AddFile("$dir/testdata1.txt");
-        $tar->AddFile("$dir/foobar/testdata2.txt", 'noway/testdata2.txt');
-        $tar->addData('another/testdata3.txt', 'testcontent3');
-
-        $data = $tar->getArchive();
-
-        $this->assertTrue(strpos($data, 'testcontent1') !== false, 'Content in TAR');
-        $this->assertTrue(strpos($data, 'testcontent2') !== false, 'Content in TAR');
-        $this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR');
-
-        // fullpath might be too long to be stored as full path FS#2802
-        $this->assertTrue(strpos($data, "$tdir") !== false, 'Path in TAR');
-        $this->assertTrue(strpos($data, "testdata1.txt") !== false, 'File in TAR');
-
-        $this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR');
-        $this->assertTrue(strpos($data, 'another/testdata3.txt') !== false, 'Path in TAR');
-
-        // fullpath might be too long to be stored as full path FS#2802
-        $this->assertTrue(strpos($data, "$tdir/foobar") === false, 'Path not in TAR');
-        $this->assertTrue(strpos($data, "foobar.txt") === false, 'File not in TAR');
-
-        $this->assertTrue(strpos($data, "foobar") === false, 'Path not in TAR');
-    }
-
-    /**
-     * simple test that checks that the given filenames and contents can be grepped from the
-     * uncompressed tar file
-     *
-     * No check for format correctness
-     */
-    public function test_createfile() {
-        $tar = new Tar();
-
-        $dir = dirname(__FILE__).'/tar';
-        $tdir = ltrim($dir,'/');
-        $tmp = tempnam(sys_get_temp_dir(), 'dwtartest');
-
-        $tar->create($tmp, Tar::COMPRESS_NONE);
-        $tar->AddFile("$dir/testdata1.txt");
-        $tar->AddFile("$dir/foobar/testdata2.txt", 'noway/testdata2.txt');
-        $tar->addData('another/testdata3.txt', 'testcontent3');
-        $tar->close();
-
-        $this->assertTrue(filesize($tmp) > 30); //arbitrary non-zero number
-        $data = file_get_contents($tmp);
-
-        $this->assertTrue(strpos($data, 'testcontent1') !== false, 'Content in TAR');
-        $this->assertTrue(strpos($data, 'testcontent2') !== false, 'Content in TAR');
-        $this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR');
-
-        // fullpath might be too long to be stored as full path FS#2802
-        $this->assertTrue(strpos($data, "$tdir") !== false, "Path in TAR '$tdir'");
-        $this->assertTrue(strpos($data, "testdata1.txt") !== false, 'File in TAR');
-
-        $this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR');
-        $this->assertTrue(strpos($data, 'another/testdata3.txt') !== false, 'Path in TAR');
-
-        // fullpath might be too long to be stored as full path FS#2802
-        $this->assertTrue(strpos($data, "$tdir/foobar") === false, 'Path not in TAR');
-        $this->assertTrue(strpos($data, "foobar.txt") === false, 'File not in TAR');
-
-        $this->assertTrue(strpos($data, "foobar") === false, 'Path not in TAR');
-
-        @unlink($tmp);
-    }
-
-    /**
-     * List the contents of the prebuilt TAR files
-     */
-    public function test_tarcontent() {
-        $dir = dirname(__FILE__).'/tar';
-
-        foreach($this->extensions as $ext) {
-            $tar  = new Tar();
-            $file = "$dir/test.$ext";
-
-            $tar->open($file);
-            $content = $tar->contents();
-
-            $this->assertCount(4, $content, "Contents of $file");
-            $this->assertEquals('tar/testdata1.txt', $content[1]['filename'], "Contents of $file");
-            $this->assertEquals(13, $content[1]['size'], "Contents of $file");
-
-            $this->assertEquals('tar/foobar/testdata2.txt', $content[3]['filename'], "Contents of $file");
-            $this->assertEquals(13, $content[1]['size'], "Contents of $file");
-        }
-    }
-
-    /**
-     * Extract the prebuilt tar files
-     */
-    public function test_tarextract() {
-        $dir = dirname(__FILE__).'/tar';
-        $out = sys_get_temp_dir().'/dwtartest'.md5(time());
-
-        foreach($this->extensions as $ext) {
-            $tar  = new Tar();
-            $file = "$dir/test.$ext";
-
-            $tar->open($file);
-            $tar->extract($out);
-
-            clearstatcache();
-
-            $this->assertFileExists($out.'/tar/testdata1.txt', "Extracted $file");
-            $this->assertEquals(13, filesize($out.'/tar/testdata1.txt'), "Extracted $file");
-
-            $this->assertFileExists($out.'/tar/foobar/testdata2.txt', "Extracted $file");
-            $this->assertEquals(13, filesize($out.'/tar/foobar/testdata2.txt'), "Extracted $file");
-
-            TestUtils::rdelete($out);
-        }
-    }
-
-    /**
-     * Extract the prebuilt tar files with component stripping
-     */
-    public function test_compstripextract() {
-        $dir = dirname(__FILE__).'/tar';
-        $out = sys_get_temp_dir().'/dwtartest'.md5(time());
-
-        foreach($this->extensions as $ext) {
-            $tar  = new Tar();
-            $file = "$dir/test.$ext";
-
-            $tar->open($file);
-            $tar->extract($out, 1);
-
-            clearstatcache();
-
-            $this->assertFileExists($out.'/testdata1.txt', "Extracted $file");
-            $this->assertEquals(13, filesize($out.'/testdata1.txt'), "Extracted $file");
-
-            $this->assertFileExists($out.'/foobar/testdata2.txt', "Extracted $file");
-            $this->assertEquals(13, filesize($out.'/foobar/testdata2.txt'), "Extracted $file");
-
-            TestUtils::rdelete($out);
-        }
-    }
-
-    /**
-     * Extract the prebuilt tar files with prefix stripping
-     */
-    public function test_prefixstripextract() {
-        $dir = dirname(__FILE__).'/tar';
-        $out = sys_get_temp_dir().'/dwtartest'.md5(time());
-
-        foreach($this->extensions as $ext) {
-            $tar  = new Tar();
-            $file = "$dir/test.$ext";
-
-            $tar->open($file);
-            $tar->extract($out, 'tar/foobar/');
-
-            clearstatcache();
-
-            $this->assertFileExists($out.'/tar/testdata1.txt', "Extracted $file");
-            $this->assertEquals(13, filesize($out.'/tar/testdata1.txt'), "Extracted $file");
-
-            $this->assertFileExists($out.'/testdata2.txt', "Extracted $file");
-            $this->assertEquals(13, filesize($out.'/testdata2.txt'), "Extracted $file");
-
-            TestUtils::rdelete($out);
-        }
-    }
-
-    /**
-     * Extract the prebuilt tar files with include regex
-     */
-    public function test_includeextract() {
-        $dir = dirname(__FILE__).'/tar';
-        $out = sys_get_temp_dir().'/dwtartest'.md5(time());
-
-        foreach($this->extensions as $ext) {
-            $tar  = new Tar();
-            $file = "$dir/test.$ext";
-
-            $tar->open($file);
-            $tar->extract($out, '', '', '/\/foobar\//');
-
-            clearstatcache();
-
-            $this->assertFileNotExists($out.'/tar/testdata1.txt', "Extracted $file");
-
-            $this->assertFileExists($out.'/tar/foobar/testdata2.txt', "Extracted $file");
-            $this->assertEquals(13, filesize($out.'/tar/foobar/testdata2.txt'), "Extracted $file");
-
-            TestUtils::rdelete($out);
-        }
-    }
-
-    /**
-     * Extract the prebuilt tar files with exclude regex
-     */
-    public function test_excludeextract() {
-        $dir = dirname(__FILE__).'/tar';
-        $out = sys_get_temp_dir().'/dwtartest'.md5(time());
-
-        foreach($this->extensions as $ext) {
-            $tar  = new Tar();
-            $file = "$dir/test.$ext";
-
-            $tar->open($file);
-            $tar->extract($out, '', '/\/foobar\//');
-
-            clearstatcache();
-
-            $this->assertFileExists($out.'/tar/testdata1.txt', "Extracted $file");
-            $this->assertEquals(13, filesize($out.'/tar/testdata1.txt'), "Extracted $file");
-
-            $this->assertFileNotExists($out.'/tar/foobar/testdata2.txt', "Extracted $file");
-
-            TestUtils::rdelete($out);
-        }
-    }
-
-    /**
-     * Check the extension to compression guesser
-     */
-    public function test_filetype() {
-        $tar = new Tar();
-        $this->assertEquals(Tar::COMPRESS_NONE, $tar->filetype('foo'));
-        $this->assertEquals(Tar::COMPRESS_GZIP, $tar->filetype('foo.tgz'));
-        $this->assertEquals(Tar::COMPRESS_GZIP, $tar->filetype('foo.tGZ'));
-        $this->assertEquals(Tar::COMPRESS_GZIP, $tar->filetype('foo.tar.GZ'));
-        $this->assertEquals(Tar::COMPRESS_GZIP, $tar->filetype('foo.tar.gz'));
-        $this->assertEquals(Tar::COMPRESS_BZIP, $tar->filetype('foo.tbz'));
-        $this->assertEquals(Tar::COMPRESS_BZIP, $tar->filetype('foo.tBZ'));
-        $this->assertEquals(Tar::COMPRESS_BZIP, $tar->filetype('foo.tar.BZ2'));
-        $this->assertEquals(Tar::COMPRESS_BZIP, $tar->filetype('foo.tar.bz2'));
-    }
-
-    /**
-     * @depends test_ext_zlib
-     */
-    public function test_longpathextract() {
-        $dir = dirname(__FILE__).'/tar';
-        $out = sys_get_temp_dir().'/dwtartest'.md5(time());
-
-        foreach(array('ustar', 'gnu') as $format) {
-            $tar = new Tar();
-            $tar->open("$dir/longpath-$format.tgz");
-            $tar->extract($out);
-
-            $this->assertFileExists($out.'/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/test.txt');
-
-            TestUtils::rdelete($out);
-        }
-    }
-
-    // FS#1442
-    public function test_createlongfile() {
-        $tar = new Tar();
-        $tmp = tempnam(sys_get_temp_dir(), 'dwtartest');
-
-        $path = '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt';
-
-        $tar->create($tmp, Tar::COMPRESS_NONE);
-        $tar->addData($path, 'testcontent1');
-        $tar->close();
-
-        $this->assertTrue(filesize($tmp) > 30); //arbitrary non-zero number
-        $data = file_get_contents($tmp);
-
-        // We should find the complete path and a longlink entry
-        $this->assertTrue(strpos($data, 'testcontent1') !== false, 'content in TAR');
-        $this->assertTrue(strpos($data, $path) !== false, 'path in TAR');
-        $this->assertTrue(strpos($data, '@LongLink') !== false, '@LongLink in TAR');
-
-        @unlink($tmp);
-    }
-
-    public function test_createlongpathustar() {
-        $tar = new Tar();
-        $tmp = tempnam(sys_get_temp_dir(), 'dwtartest');
-
-        $path = '';
-        for($i=0; $i<11; $i++) $path .= '1234567890/';
-        $path = rtrim($path,'/');
-
-        $tar->create($tmp, Tar::COMPRESS_NONE);
-        $tar->addData("$path/test.txt", 'testcontent1');
-        $tar->close();
-
-        $this->assertTrue(filesize($tmp) > 30); //arbitrary non-zero number
-        $data = file_get_contents($tmp);
-
-        // We should find the path and filename separated, no longlink entry
-        $this->assertTrue(strpos($data, 'testcontent1') !== false, 'content in TAR');
-        $this->assertTrue(strpos($data, 'test.txt') !== false, 'filename in TAR');
-        $this->assertTrue(strpos($data, $path) !== false, 'path in TAR');
-        $this->assertFalse(strpos($data, "$path/test.txt") !== false, 'full filename in TAR');
-        $this->assertFalse(strpos($data, '@LongLink') !== false, '@LongLink in TAR');
-
-        @unlink($tmp);
-    }
-
-    public function test_createlongpathgnu() {
-        $tar = new Tar();
-        $tmp = tempnam(sys_get_temp_dir(), 'dwtartest');
-
-        $path = '';
-        for($i=0; $i<20; $i++) $path .= '1234567890/';
-        $path = rtrim($path,'/');
-
-        $tar->create($tmp, Tar::COMPRESS_NONE);
-        $tar->addData("$path/test.txt", 'testcontent1');
-        $tar->close();
-
-        $this->assertTrue(filesize($tmp) > 30); //arbitrary non-zero number
-        $data = file_get_contents($tmp);
-
-        // We should find the complete path/filename and a longlink entry
-        $this->assertTrue(strpos($data, 'testcontent1') !== false, 'content in TAR');
-        $this->assertTrue(strpos($data, 'test.txt') !== false, 'filename in TAR');
-        $this->assertTrue(strpos($data, $path) !== false, 'path in TAR');
-        $this->assertTrue(strpos($data, "$path/test.txt") !== false, 'full filename in TAR');
-        $this->assertTrue(strpos($data, '@LongLink') !== false, '@LongLink in TAR');
-
-        @unlink($tmp);
-    }
-
-    /**
-     * Extract a tarbomomb
-     * @depends test_ext_zlib
-     */
-    public function test_tarbomb() {
-        $dir = dirname(__FILE__).'/tar';
-        $out = sys_get_temp_dir().'/dwtartest'.md5(time());
-
-        $tar  = new Tar();
-
-        $tar->open("$dir/tarbomb.tgz");
-        $tar->extract($out);
-
-        clearstatcache();
-
-        $this->assertFileExists($out.'/AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt');
-
-        TestUtils::rdelete($out);
-    }
-
-    /**
-     * A single zero file should be just a header block + the footer
-     */
-    public function test_zerofile(){
-        $dir = dirname(__FILE__).'/tar';
-        $tar = new Tar();
-        $tar->create();
-        $tar->addFile("$dir/zero.txt", 'zero.txt');
-        $file = $tar->getArchive(Tar::COMPRESS_NONE);
-
-        $this->assertEquals(512*3, strlen($file)); // 1 header block + 2 footer blocks
-    }
-
-    public function test_zerodata(){
-        $tar = new Tar();
-        $tar->create();
-        $tar->addData('zero.txt','');
-        $file = $tar->getArchive(Tar::COMPRESS_NONE);
-
-        $this->assertEquals(512*3, strlen($file)); // 1 header block + 2 footer blocks
-    }
-
-    /**
-     * A file of exactly one block should be just a header block + data block + the footer
-     */
-    public function test_blockfile(){
-        $dir = dirname(__FILE__).'/tar';
-        $tar = new Tar();
-        $tar->create();
-        $tar->addFile("$dir/block.txt", 'block.txt');
-        $file = $tar->getArchive(Tar::COMPRESS_NONE);
-
-        $this->assertEquals(512*4, strlen($file)); // 1 header block + data block + 2 footer blocks
-    }
-
-    public function test_blockdata(){
-        $tar = new Tar();
-        $tar->create();
-        $tar->addData('block.txt', str_pad('', 512, 'x'));
-        $file = $tar->getArchive(Tar::COMPRESS_NONE);
-
-        $this->assertEquals(512*4, strlen($file)); // 1 header block + data block + 2 footer blocks
-    }
-
-
-    public function test_cleanPath(){
-        $tar = new Tar();
-        $tests = array (
-            '/foo/bar' => 'foo/bar',
-            '/foo/bar/' => 'foo/bar',
-            'foo//bar' => 'foo/bar',
-            'foo/0/bar' => 'foo/0/bar',
-            'foo/../bar' => 'bar',
-            'foo/bang/bang/../../bar' => 'foo/bar',
-            'foo/../../bar' => 'bar',
-            'foo/.././../bar' => 'bar',
-        );
-
-        foreach($tests as $in => $out){
-            $this->assertEquals($out, $tar->cleanPath($in), "Input: $in");
-        }
-    }
-}
diff --git a/_test/tests/inc/tar/block.txt b/_test/tests/inc/tar/block.txt
deleted file mode 100644
index 9b2f53080c2a7b5fdf1c5629aaf513fdd2056528..0000000000000000000000000000000000000000
--- a/_test/tests/inc/tar/block.txt
+++ /dev/null
@@ -1 +0,0 @@
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\ No newline at end of file
diff --git a/_test/tests/inc/tar/foobar/testdata2.txt b/_test/tests/inc/tar/foobar/testdata2.txt
deleted file mode 100644
index a7db15771f7f75aca5f8dc62beaebab28bb9ef8b..0000000000000000000000000000000000000000
--- a/_test/tests/inc/tar/foobar/testdata2.txt
+++ /dev/null
@@ -1 +0,0 @@
-testcontent2
diff --git a/_test/tests/inc/tar/longpath-gnu.tgz b/_test/tests/inc/tar/longpath-gnu.tgz
deleted file mode 100644
index 6c937c8fe055c33eb842419c2321a15eededc191..0000000000000000000000000000000000000000
Binary files a/_test/tests/inc/tar/longpath-gnu.tgz and /dev/null differ
diff --git a/_test/tests/inc/tar/longpath-ustar.tgz b/_test/tests/inc/tar/longpath-ustar.tgz
deleted file mode 100644
index 59efbff6689a78bc9ff3dc08afb95b4a19eaaa67..0000000000000000000000000000000000000000
Binary files a/_test/tests/inc/tar/longpath-ustar.tgz and /dev/null differ
diff --git a/_test/tests/inc/tar/tarbomb.tgz b/_test/tests/inc/tar/tarbomb.tgz
deleted file mode 100644
index 8418d4073e9afc339cd05c222063733305bd5d2d..0000000000000000000000000000000000000000
Binary files a/_test/tests/inc/tar/tarbomb.tgz and /dev/null differ
diff --git a/_test/tests/inc/tar/test.tar b/_test/tests/inc/tar/test.tar
deleted file mode 100644
index 931866b0ba0f279fab0b68e6a27e988860e41dc4..0000000000000000000000000000000000000000
Binary files a/_test/tests/inc/tar/test.tar and /dev/null differ
diff --git a/_test/tests/inc/tar/test.tbz b/_test/tests/inc/tar/test.tbz
deleted file mode 100644
index 5a737401907117fc2bfda39d27f73aed5892adac..0000000000000000000000000000000000000000
Binary files a/_test/tests/inc/tar/test.tbz and /dev/null differ
diff --git a/_test/tests/inc/tar/test.tgz b/_test/tests/inc/tar/test.tgz
deleted file mode 100644
index b0031964934865544c7c8537740a7995f99c882f..0000000000000000000000000000000000000000
Binary files a/_test/tests/inc/tar/test.tgz and /dev/null differ
diff --git a/_test/tests/inc/tar/testdata1.txt b/_test/tests/inc/tar/testdata1.txt
deleted file mode 100644
index ac65bb32efdef558a1eb2f9a986d55838db2efbb..0000000000000000000000000000000000000000
--- a/_test/tests/inc/tar/testdata1.txt
+++ /dev/null
@@ -1 +0,0 @@
-testcontent1
diff --git a/_test/tests/inc/tar/zero.txt b/_test/tests/inc/tar/zero.txt
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/_test/tests/inc/template_include_page.test.php b/_test/tests/inc/template_include_page.test.php
index 47d4d46f154fd087dea2923fa46b6ff8304e6a6b..7dd13ba236be6a3f41f010c4573e7489e1371dcc 100644
--- a/_test/tests/inc/template_include_page.test.php
+++ b/_test/tests/inc/template_include_page.test.php
@@ -1,40 +1,67 @@
 <?php
 
-class template_include_page_test extends DokuWikiTest {
-    function testNoSidebar() {
-        global $ID;
+class template_pagetitle_test extends DokuWikiTest {
 
-        $ID = 'foo:bar:baz:test';
-        $sidebar = tpl_include_page('sidebar', false, true);
-        $this->assertEquals('', $sidebar);
+    function test_localID() {
+        global $ID,$ACT;
+
+
+        $id = 'foo:bar';
+
+        $ACT = 'show';
+        $this->assertEquals('foo:bar', tpl_pagetitle($id, true));
     }
 
-    function testExistingSidebars() {
-        global $ID;
+    function test_globalID() {
+        global $ID,$ACT;
+
 
-        saveWikiText('sidebar', 'topsidebar-test', '');
+        $ID = 'foo:bar';
 
-        $ID = 'foo:bar:baz:test';
-        $sidebar = tpl_include_page('sidebar', false, true);
-        $this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);
+        $ACT = 'show';
+        $this->assertEquals('foo:bar', tpl_pagetitle(null, true));
+    }
+
+    function test_adminTitle() {
+        global $ID,$ACT;
 
-        $ID = 'foo';
-        $sidebar = tpl_include_page('sidebar', false, true);
-        $this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);
+        $ID = 'foo:bar';
+
+        $ACT = 'admin';
+        $this->assertEquals('Admin', tpl_pagetitle(null, true));
+    }
 
-        saveWikiText('foo:bar:sidebar', 'bottomsidebar-test', '');
+    function test_adminPluginTitle() {
+        global $ID,$ACT,$INPUT,$conf;
 
-        $ID = 'foo:bar:baz:test';
-        $sidebar = tpl_include_page('sidebar', false, true);
-        $this->assertTrue(strpos($sidebar, 'bottomsidebar-test') > 0);
+        if (!plugin_load('admin','revert')) {
+            $this->markTestSkipped('Revert plugin not found, unable to test admin plugin titles');
+            return;
+        }
 
-        $ID = 'foo:bar:test';
-        $sidebar = tpl_include_page('sidebar', false, true);
-        $this->assertTrue(strpos($sidebar, 'bottomsidebar-test') > 0);
+        $ID = 'foo:bar';
+        $ACT = 'admin';
+        $conf['lang'] = 'en';
+        $INPUT->set('page','revert');
 
-        $ID = 'foo';
-        $sidebar = tpl_include_page('sidebar', false, true);
-        $this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);
+        $this->assertEquals('Revert Manager', tpl_pagetitle(null, true));
     }
 
+    function test_nonPageFunctionTitle() {
+        global $ID,$ACT;
+
+        $ID = 'foo:bar';
+
+        $ACT = 'index';
+        $this->assertEquals('Sitemap', tpl_pagetitle(null, true));
+    }
+
+    function test_pageFunctionTitle() {
+        global $ID,$ACT;
+
+        $ID = 'foo:bar';
+
+        $ACT = 'revisions';
+        $this->assertEquals('foo:bar - Old revisions', tpl_pagetitle(null, true));
+    }
 }
diff --git a/bin/.htaccess b/bin/.htaccess
index 281d5c33db37cd1cc887dbb2d36897b897835071..5f279f180699c2f115c326319a8afc645c5a7245 100644
--- a/bin/.htaccess
+++ b/bin/.htaccess
@@ -1,2 +1,7 @@
-order allow,deny
-deny from all
+<IfModule mod_authz_host>
+    Require all denied
+</IfModule>
+<IfModule !mod_authz_host>
+    Order allow,deny
+    Deny from all
+</IfModule>
diff --git a/bin/dwpage.php b/bin/dwpage.php
index a777fd3e1798142784c0d9c31c39eb757d804a26..1c1a1c10ee6f38cb5e41e75e51a31829600c97ec 100755
--- a/bin/dwpage.php
+++ b/bin/dwpage.php
@@ -28,7 +28,8 @@ class PageCLI extends DokuCLI {
         $options->registerOption(
             'user',
             'work as this user. defaults to current CLI user',
-            'u'
+            'u',
+            'username'
         );
         $options->setHelp(
             'Utility to help command line Dokuwiki page editing, allow '.
@@ -239,6 +240,7 @@ class PageCLI extends DokuCLI {
         if($this->force) $this->deleteLock($wiki_id);
 
         $_SERVER['REMOTE_USER'] = $this->username;
+
         if(checklock($wiki_id)) {
             $this->error("Page $wiki_id is already locked by another user");
             exit(1);
@@ -246,8 +248,7 @@ class PageCLI extends DokuCLI {
 
         lock($wiki_id);
 
-        $_SERVER['REMOTE_USER'] = '_'.$this->username.'_';
-        if(checklock($wiki_id) != $this->username) {
+        if(checklock($wiki_id)) {
             $this->error("Unable to obtain lock for $wiki_id ");
             var_dump(checklock($wiki_id));
             exit(1);
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..3fe00cc92325258317005bbaed6f62b66abdc365
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,6 @@
+{
+    "require": {
+        "splitbrain/php-archive": "~1.0",
+        "easybook/geshi": "~1.0"
+    }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000000000000000000000000000000000000..f504ba638278b709725d08b303b152ae1bceaf76
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,111 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "This file is @generated automatically"
+    ],
+    "hash": "23ee0dd06136e2301c930e75055300d5",
+    "packages": [
+        {
+            "name": "easybook/geshi",
+            "version": "v1.0.8.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/easybook/geshi.git",
+                "reference": "54387de80bc7ee50397ffae39234626a48d2d45f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/easybook/geshi/zipball/54387de80bc7ee50397ffae39234626a48d2d45f",
+                "reference": "54387de80bc7ee50397ffae39234626a48d2d45f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">4.3.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "./"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "GPL-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Nigel McNie",
+                    "email": "nigel@geshi.org"
+                },
+                {
+                    "name": "Benny Baumann",
+                    "email": "BenBE@geshi.org"
+                }
+            ],
+            "description": "GeSHi - Generic Syntax Highlighter. This is an unmodified port of GeSHi project code found on SourceForge.",
+            "homepage": "http://qbnz.com/highlighter",
+            "keywords": [
+                "highlight",
+                "highlighter",
+                "syntax"
+            ],
+            "time": "2015-06-18 14:56:28"
+        },
+        {
+            "name": "splitbrain/php-archive",
+            "version": "1.0.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/splitbrain/php-archive.git",
+                "reference": "c075304b44c4aadff0718af445e86bf730f331ff"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/splitbrain/php-archive/zipball/c075304b44c4aadff0718af445e86bf730f331ff",
+                "reference": "c075304b44c4aadff0718af445e86bf730f331ff",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.5.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "splitbrain\\PHPArchive\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Andreas Gohr",
+                    "email": "andi@splitbrain.org"
+                }
+            ],
+            "description": "Pure-PHP implementation to read and write TAR and ZIP archives",
+            "keywords": [
+                "archive",
+                "extract",
+                "tar",
+                "unpack",
+                "unzip",
+                "zip"
+            ],
+            "time": "2015-08-12 13:24:34"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": []
+}
diff --git a/conf/.htaccess b/conf/.htaccess
index bcc3ea0bdd29b4b55ef28f7b6a2deaf749fef3bd..b3ffca597c182a9be02a0fc4d58c6a7e7931200c 100644
--- a/conf/.htaccess
+++ b/conf/.htaccess
@@ -1,3 +1,8 @@
 ## no access to the conf directory
-order allow,deny
-deny from all
+<IfModule mod_authz_host>
+    Require all denied
+</IfModule>
+<IfModule !mod_authz_host>
+    Order allow,deny
+    Deny from all
+</IfModule>
diff --git a/conf/interwiki.conf b/conf/interwiki.conf
index d961912e5c513cc746af01bf504d99566dc742de..a314c081746618b37c68d08d4d5ba40f0ece9ca3 100644
--- a/conf/interwiki.conf
+++ b/conf/interwiki.conf
@@ -1,37 +1,41 @@
-# Each URL may contain one of the placeholders {URL} or {NAME}
+# Each URL may contain one of these placeholders
 # {URL}  is replaced by the URL encoded representation of the wikiname
 #        this is the right thing to do in most cases
 # {NAME} this is replaced by the wikiname as given in the document
-#        no further encoding is done
+#        only mandatory encoded is done, urlencoding if the link
+#        is an external URL, or encoding as a wikiname if it is an
+#        internal link (begins with a colon)
+# {SCHEME}
+# {HOST}
+# {PORT}
+# {PATH}
+# {QUERY} these placeholders will be replaced with the appropriate part
+#         of the link when parsed as a URL
 # If no placeholder is defined the urlencoded name is appended to the URL
 
 # To prevent losing your added InterWiki shortcuts after an upgrade,
 # you should add new ones to interwiki.local.conf
 
-wp        http://en.wikipedia.org/wiki/{NAME}
-wpfr      http://fr.wikipedia.org/wiki/{NAME}
-wpde      http://de.wikipedia.org/wiki/{NAME}
-wpes      http://es.wikipedia.org/wiki/{NAME}
-wppl      http://pl.wikipedia.org/wiki/{NAME}
-wpjp      http://ja.wikipedia.org/wiki/{NAME}
-wpmeta    http://meta.wikipedia.org/wiki/{NAME}
-doku      http://www.dokuwiki.org/
-dokubug   http://bugs.dokuwiki.org/index.php?do=details&amp;task_id=
-rfc       http://tools.ietf.org/html/rfc
+wp        https://en.wikipedia.org/wiki/{NAME}
+wpfr      https://fr.wikipedia.org/wiki/{NAME}
+wpde      https://de.wikipedia.org/wiki/{NAME}
+wpes      https://es.wikipedia.org/wiki/{NAME}
+wppl      https://pl.wikipedia.org/wiki/{NAME}
+wpjp      https://ja.wikipedia.org/wiki/{NAME}
+wpmeta    https://meta.wikipedia.org/wiki/{NAME}
+doku      https://www.dokuwiki.org/
+rfc       https://tools.ietf.org/html/rfc
 man       http://man.cx/
-amazon    http://www.amazon.com/exec/obidos/ASIN/{URL}/splitbrain-20/
-amazon.de http://www.amazon.de/exec/obidos/ASIN/{URL}/splitbrain-21/
-amazon.uk http://www.amazon.co.uk/exec/obidos/ASIN/
+amazon    https://www.amazon.com/exec/obidos/ASIN/{URL}/splitbrain-20/
+amazon.de https://www.amazon.de/exec/obidos/ASIN/{URL}/splitbrain-21/
+amazon.uk https://www.amazon.co.uk/exec/obidos/ASIN/
 paypal    https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&amp;business=
-phpfn     http://www.php.net/{NAME}
-coral     http://{HOST}.{PORT}.nyud.net:8090{PATH}?{QUERY}
-freecache http://freecache.org/{NAME}
-sb        http://www.splitbrain.org/go/
+phpfn     https://secure.php.net/{NAME}
 skype     skype:{NAME}
-google.de http://www.google.de/search?q=
-go        http://www.google.com/search?q={URL}&amp;btnI=lucky
+google.de https://www.google.de/search?q=
+go        https://www.google.com/search?q={URL}&amp;btnI=lucky
 user      :user:{NAME}
 
-# To support VoIP/SIP links
+# To support VoIP/SIP/TEL links
 callto    callto://{NAME}
-
+tel       tel:{NAME}
diff --git a/conf/license.php b/conf/license.php
index 89728ab57f53fb92185dc68285249f7faebb2302..30d409e2e26404dc2bef013499ee3cb59d931942 100644
--- a/conf/license.php
+++ b/conf/license.php
@@ -14,23 +14,23 @@ $license['publicdomain'] = array(
     'url'  => 'http://creativecommons.org/licenses/publicdomain/',
 );
 $license['cc-by'] = array(
-    'name' => 'CC Attribution 3.0 Unported',
-    'url'  => 'http://creativecommons.org/licenses/by/3.0/',
+    'name' => 'CC Attribution 4.0 International',
+    'url'  => 'http://creativecommons.org/licenses/by/4.0/',
 );
 $license['cc-by-sa'] = array(
-    'name' => 'CC Attribution-Share Alike 3.0 Unported',
-    'url'  => 'http://creativecommons.org/licenses/by-sa/3.0/',
+    'name' => 'CC Attribution-Share Alike 4.0 International',
+    'url'  => 'http://creativecommons.org/licenses/by-sa/4.0/',
 );
 $license['gnufdl'] = array(
     'name' => 'GNU Free Documentation License 1.3',
     'url'  => 'http://www.gnu.org/licenses/fdl-1.3.html',
 );
 $license['cc-by-nc'] = array(
-    'name' => 'CC Attribution-Noncommercial 3.0 Unported',
-    'url'  => 'http://creativecommons.org/licenses/by-nc/3.0/',
+    'name' => 'CC Attribution-Noncommercial 4.0 International',
+    'url'  => 'http://creativecommons.org/licenses/by-nc/4.0/',
 );
 $license['cc-by-nc-sa'] = array(
-    'name' => 'CC Attribution-Noncommercial-Share Alike 3.0 Unported',
-    'url'  => 'http://creativecommons.org/licenses/by-nc-sa/3.0/',
+    'name' => 'CC Attribution-Noncommercial-Share Alike 4.0 International',
+    'url'  => 'http://creativecommons.org/licenses/by-nc-sa/4.0/',
 );
 
diff --git a/conf/wordblock.conf b/conf/wordblock.conf
index fc939a4d47bec6edac347ef140bc847c91ffc90b..3040fa08fb288708652d67ce69b0c1a65129318c 100644
--- a/conf/wordblock.conf
+++ b/conf/wordblock.conf
@@ -2,16 +2,12 @@
 # patches welcome
 #
 https?:\/\/(\S*?)(-side-effects|top|pharm|pill|discount|discount-|deal|price|order|now|best|cheap|cheap-|online|buy|buy-|sale|sell)(\S*?)(cialis|viagra|prazolam|xanax|zanax|soma|vicodin|zenical|xenical|meridia|paxil|prozac|claritin|allegra|lexapro|wellbutrin|zoloft|retin|valium|levitra|phentermine)
-gay\s*sex
-bi\s*sex
-incest
+https?:\/\/(\S*?)(bi\s*sex|gay\s*sex|fetish|incest|penis|\brape\b)
 zoosex
 gang\s*bang
 facials
 ladyboy
-fetish
 \btits\b
-\brape\b
 bolea\.com
 52crystal
 baida\.org
diff --git a/data/.htaccess b/data/.htaccess
index 281d5c33db37cd1cc887dbb2d36897b897835071..5f279f180699c2f115c326319a8afc645c5a7245 100644
--- a/data/.htaccess
+++ b/data/.htaccess
@@ -1,2 +1,7 @@
-order allow,deny
-deny from all
+<IfModule mod_authz_host>
+    Require all denied
+</IfModule>
+<IfModule !mod_authz_host>
+    Order allow,deny
+    Deny from all
+</IfModule>
diff --git a/data/deleted.files b/data/deleted.files
index cac352c9d0822555957ed5a8f9fbff3b9cc32a2d..14fd785a0213c6a6a2ad26e2d427222647017991 100644
--- a/data/deleted.files
+++ b/data/deleted.files
@@ -2,27 +2,241 @@
 # but were removed later. An up to date DokuWiki should not have any of
 # the files installed
 
+# removed in 2015-08-10
+inc/TarLib.class.php
+inc/geshi.php
+inc/geshi/4cs.php
+inc/geshi/6502acme.php
+inc/geshi/6502kickass.php
+inc/geshi/6502tasm.php
+inc/geshi/68000devpac.php
+inc/geshi/abap.php
+inc/geshi/actionscript-french.php
+inc/geshi/actionscript.php
+inc/geshi/actionscript3.php
+inc/geshi/ada.php
+inc/geshi/algol68.php
+inc/geshi/apache.php
+inc/geshi/applescript.php
+inc/geshi/apt_sources.php
+inc/geshi/arm.php
+inc/geshi/asm.php
+inc/geshi/asp.php
+inc/geshi/asymptote.php
+inc/geshi/autoconf.php
+inc/geshi/autohotkey.php
+inc/geshi/autoit.php
+inc/geshi/avisynth.php
+inc/geshi/awk.php
+inc/geshi/bascomavr.php
+inc/geshi/bash.php
+inc/geshi/basic4gl.php
+inc/geshi/bf.php
+inc/geshi/bibtex.php
+inc/geshi/blitzbasic.php
+inc/geshi/bnf.php
+inc/geshi/boo.php
+inc/geshi/c.php
+inc/geshi/c_loadrunner.php
+inc/geshi/c_mac.php
+inc/geshi/caddcl.php
+inc/geshi/cadlisp.php
+inc/geshi/cfdg.php
+inc/geshi/cfm.php
+inc/geshi/chaiscript.php
+inc/geshi/cil.php
+inc/geshi/clojure.php
+inc/geshi/cmake.php
+inc/geshi/cobol.php
+inc/geshi/coffeescript.php
+inc/geshi/cpp-qt.php
+inc/geshi/cpp.php
+inc/geshi/csharp.php
+inc/geshi/css.php
+inc/geshi/cuesheet.php
+inc/geshi/d.php
+inc/geshi/dcl.php
+inc/geshi/dcpu16.php
+inc/geshi/dcs.php
+inc/geshi/delphi.php
+inc/geshi/diff.php
+inc/geshi/div.php
+inc/geshi/dos.php
+inc/geshi/dot.php
+inc/geshi/e.php
+inc/geshi/ecmascript.php
+inc/geshi/eiffel.php
+inc/geshi/email.php
+inc/geshi/epc.php
+inc/geshi/erlang.php
+inc/geshi/euphoria.php
+inc/geshi/f1.php
+inc/geshi/falcon.php
+inc/geshi/fo.php
+inc/geshi/fortran.php
+inc/geshi/freebasic.php
+inc/geshi/freeswitch.php
+inc/geshi/fsharp.php
+inc/geshi/gambas.php
+inc/geshi/gdb.php
+inc/geshi/genero.php
+inc/geshi/genie.php
+inc/geshi/gettext.php
+inc/geshi/glsl.php
+inc/geshi/gml.php
+inc/geshi/gnuplot.php
+inc/geshi/go.php
+inc/geshi/groovy.php
+inc/geshi/gwbasic.php
+inc/geshi/haskell.php
+inc/geshi/haxe.php
+inc/geshi/hicest.php
+inc/geshi/hq9plus.php
+inc/geshi/html4strict.php
+inc/geshi/html5.php
+inc/geshi/icon.php
+inc/geshi/idl.php
+inc/geshi/ini.php
+inc/geshi/inno.php
+inc/geshi/intercal.php
+inc/geshi/io.php
+inc/geshi/j.php
+inc/geshi/java.php
+inc/geshi/java5.php
+inc/geshi/javascript.php
+inc/geshi/jquery.php
+inc/geshi/kixtart.php
+inc/geshi/klonec.php
+inc/geshi/klonecpp.php
+inc/geshi/latex.php
+inc/geshi/lb.php
+inc/geshi/ldif.php
+inc/geshi/lisp.php
+inc/geshi/llvm.php
+inc/geshi/locobasic.php
+inc/geshi/logtalk.php
+inc/geshi/lolcode.php
+inc/geshi/lotusformulas.php
+inc/geshi/lotusscript.php
+inc/geshi/lscript.php
+inc/geshi/lsl2.php
+inc/geshi/lua.php
+inc/geshi/m68k.php
+inc/geshi/magiksf.php
+inc/geshi/make.php
+inc/geshi/mapbasic.php
+inc/geshi/matlab.php
+inc/geshi/mirc.php
+inc/geshi/mmix.php
+inc/geshi/modula2.php
+inc/geshi/modula3.php
+inc/geshi/mpasm.php
+inc/geshi/mxml.php
+inc/geshi/mysql.php
+inc/geshi/nagios.php
+inc/geshi/netrexx.php
+inc/geshi/newlisp.php
+inc/geshi/nsis.php
+inc/geshi/oberon2.php
+inc/geshi/objc.php
+inc/geshi/objeck.php
+inc/geshi/ocaml-brief.php
+inc/geshi/ocaml.php
+inc/geshi/octave.php
+inc/geshi/oobas.php
+inc/geshi/oorexx.php
+inc/geshi/oracle11.php
+inc/geshi/oracle8.php
+inc/geshi/oxygene.php
+inc/geshi/oz.php
+inc/geshi/parasail.php
+inc/geshi/parigp.php
+inc/geshi/pascal.php
+inc/geshi/pcre.php
+inc/geshi/per.php
+inc/geshi/perl.php
+inc/geshi/perl6.php
+inc/geshi/pf.php
+inc/geshi/php-brief.php
+inc/geshi/php.php
+inc/geshi/pic16.php
+inc/geshi/pike.php
+inc/geshi/pixelbender.php
+inc/geshi/pli.php
+inc/geshi/plsql.php
+inc/geshi/postgresql.php
+inc/geshi/povray.php
+inc/geshi/powerbuilder.php
+inc/geshi/powershell.php
+inc/geshi/proftpd.php
+inc/geshi/progress.php
+inc/geshi/prolog.php
+inc/geshi/properties.php
+inc/geshi/providex.php
+inc/geshi/purebasic.php
+inc/geshi/pycon.php
+inc/geshi/pys60.php
+inc/geshi/python.php
+inc/geshi/q.php
+inc/geshi/qbasic.php
+inc/geshi/rails.php
+inc/geshi/rebol.php
+inc/geshi/reg.php
+inc/geshi/rexx.php
+inc/geshi/robots.php
+inc/geshi/rpmspec.php
+inc/geshi/rsplus.php
+inc/geshi/ruby.php
+inc/geshi/sas.php
+inc/geshi/scala.php
+inc/geshi/scheme.php
+inc/geshi/scilab.php
+inc/geshi/sdlbasic.php
+inc/geshi/smalltalk.php
+inc/geshi/smarty.php
+inc/geshi/spark.php
+inc/geshi/sparql.php
+inc/geshi/sql.php
+inc/geshi/stonescript.php
+inc/geshi/systemverilog.php
+inc/geshi/tcl.php
+inc/geshi/teraterm.php
+inc/geshi/text.php
+inc/geshi/thinbasic.php
+inc/geshi/tsql.php
+inc/geshi/typoscript.php
+inc/geshi/unicon.php
+inc/geshi/upc.php
+inc/geshi/urbi.php
+inc/geshi/uscript.php
+inc/geshi/vala.php
+inc/geshi/vb.php
+inc/geshi/vbnet.php
+inc/geshi/vedit.php
+inc/geshi/verilog.php
+inc/geshi/vhdl.php
+inc/geshi/vim.php
+inc/geshi/visualfoxpro.php
+inc/geshi/visualprolog.php
+inc/geshi/whitespace.php
+inc/geshi/whois.php
+inc/geshi/winbatch.php
+inc/geshi/xbasic.php
+inc/geshi/xml.php
+inc/geshi/xorg_conf.php
+inc/geshi/xpp.php
+inc/geshi/yaml.php
+inc/geshi/z80.php
+inc/geshi/zxbasic.php
+lib/images/interwiki/coral.gif
+lib/images/interwiki/dokubug.gif
+lib/images/interwiki/sb.gif
+lib/scripts/drag.js
+lib/scripts/jquery/jquery-ui-theme/images/animated-overlay.gif
+lib/scripts/tw-sack.js
+
 # removed in 2014-05-05
 lib/images/fileicons/audio.png
-lib/plugins/acl/lang/hi/lang.php
-lib/plugins/acl/lang/id-ni/lang.php
-lib/plugins/acl/lang/lb/lang.php
-lib/plugins/acl/lang/ms/lang.php
-lib/plugins/authad/lang/lv/settings.php
-lib/plugins/authldap/lang/lv/settings.php
-lib/plugins/authmysql/lang/fi/settings.php
-lib/plugins/authmysql/lang/lv/settings.php
-lib/plugins/authpgsql/lang/fi/settings.php
-lib/plugins/authpgsql/lang/it/settings.php
-lib/plugins/authpgsql/lang/lv/settings.php
-lib/plugins/authpgsql/lang/pl/settings.php
-lib/plugins/config/lang/hr/lang.php
-lib/plugins/config/lang/id/lang.php
-lib/plugins/config/lang/kk/lang.php
-lib/plugins/config/lang/lb/lang.php
-lib/plugins/config/lang/mk/lang.php
-lib/plugins/config/lang/ms/lang.php
-lib/plugins/config/lang/vi/lang.php
 lib/plugins/plugin/admin.php
 lib/plugins/plugin/classes/ap_delete.class.php
 lib/plugins/plugin/classes/ap_download.class.php
@@ -134,31 +348,6 @@ lib/plugins/plugin/lang/zh/admin_plugin.txt
 lib/plugins/plugin/lang/zh/lang.php
 lib/plugins/plugin/plugin.info.txt
 lib/plugins/plugin/style.css
-lib/plugins/popularity/lang/et/lang.php
-lib/plugins/popularity/lang/hr/lang.php
-lib/plugins/popularity/lang/id/lang.php
-lib/plugins/popularity/lang/kk/lang.php
-lib/plugins/popularity/lang/lb/lang.php
-lib/plugins/popularity/lang/mk/lang.php
-lib/plugins/popularity/lang/ms/lang.php
-lib/plugins/popularity/lang/vi/lang.php
-lib/plugins/revert/lang/af/lang.php
-lib/plugins/revert/lang/hi/lang.php
-lib/plugins/revert/lang/hr/lang.php
-lib/plugins/revert/lang/id-ni/lang.php
-lib/plugins/revert/lang/id/lang.php
-lib/plugins/revert/lang/kk/lang.php
-lib/plugins/revert/lang/lb/lang.php
-lib/plugins/revert/lang/lt/lang.php
-lib/plugins/revert/lang/mk/lang.php
-lib/plugins/revert/lang/ms/lang.php
-lib/plugins/revert/lang/vi/lang.php
-lib/plugins/usermanager/lang/hi/lang.php
-lib/plugins/usermanager/lang/hr/lang.php
-lib/plugins/usermanager/lang/id-ni/lang.php
-lib/plugins/usermanager/lang/lb/lang.php
-lib/plugins/usermanager/lang/ms/lang.php
-lib/plugins/usermanager/lang/vi/lang.php
 
 # removed in 2013-11-18
 lib/images/arrow_down.gif
@@ -443,7 +632,6 @@ lib/scripts/domTT.js
 
 # removed in 2006-11-06
 inc/admin_acl.php
-inc/lang/lt/stopwords.txt
 inc/magpie
 inc/magpie/rss_cache.inc
 inc/magpie/rss_fetch.inc
diff --git a/data/media/wiki/dokuwiki-128.png b/data/media/wiki/dokuwiki-128.png
index b2306ac9571f39c6f30c0a5967e5b520415b3d80..f3f1d66bd752d6874220fa4d35415ea97de79774 100644
Binary files a/data/media/wiki/dokuwiki-128.png and b/data/media/wiki/dokuwiki-128.png differ
diff --git a/data/pages/wiki/dokuwiki.txt b/data/pages/wiki/dokuwiki.txt
index 0e08fdcd30d36c38abcfb04da24925e7db1a6937..29843e5c64bab41251050809b3bb1721c6be7b82 100644
--- a/data/pages/wiki/dokuwiki.txt
+++ b/data/pages/wiki/dokuwiki.txt
@@ -57,7 +57,7 @@ All documentation and additional information besides the [[syntax|syntax descrip
 
 ===== Copyright =====
 
-2004-2013 (c) Andreas Gohr <andi@splitbrain.org>((Please do not contact me for help and support -- use the [[doku>mailinglist]] or [[http://forum.dokuwiki.org|forum]] instead)) and the DokuWiki Community
+2004-2015 (c) Andreas Gohr <andi@splitbrain.org>((Please do not contact me for help and support -- use the [[doku>mailinglist]] or [[http://forum.dokuwiki.org|forum]] instead)) and the DokuWiki Community
 
 The DokuWiki engine is licensed under [[http://www.gnu.org/licenses/gpl.html|GNU General Public License]] Version 2. If you use DokuWiki in your company, consider [[doku>donate|donating]] a few bucks ;-).
 
diff --git a/data/pages/wiki/syntax.txt b/data/pages/wiki/syntax.txt
index 7b453efa2ba80530cea9bfb6bd268dbdd6b28ac7..bdfda9c467ea8d48a16ba54cd59042899db4e50f 100644
--- a/data/pages/wiki/syntax.txt
+++ b/data/pages/wiki/syntax.txt
@@ -83,9 +83,14 @@ Windows shares like [[\\server\share|this]] are recognized, too. Please note tha
 Notes:
 
   * For security reasons direct browsing of windows shares only works in Microsoft Internet Explorer per default (and only in the "local zone").
-  * For Mozilla and Firefox it can be enabled through different workaround mentioned in the [[http://kb.mozillazine.org/Links_to_local_pages_do_not_work|Mozilla Knowledge Base]]. However, there will still be a JavaScript warning about trying to open a Windows Share. To remove this warning (for all users), put the following line in ''conf/userscript.js'':
-
-  LANG.nosmblinks = '';
+  * For Mozilla and Firefox it can be enabled through different workaround mentioned in the [[http://kb.mozillazine.org/Links_to_local_pages_do_not_work|Mozilla Knowledge Base]]. However, there will still be a JavaScript warning about trying to open a Windows Share. To remove this warning (for all users), put the following line in ''conf/lang/en/lang.php'' (more details at [[doku>localization#changing_some_localized_texts_and_strings_in_your_installation|localization]]): <code - conf/lang/en/lang.php>
+<?php
+/**
+ * Customization of the english language file
+ * Copy only the strings that needs to be modified
+ */
+$lang['js']['nosmblinks'] = '';
+</code>
 
 ==== Image Links ====
 
@@ -170,6 +175,12 @@ DokuWiki can embed the following media formats directly.
 
 If you specify a filename that is not a supported media format, then it will be displayed as a link instead.
 
+By adding ''?linkonly'' you provide a link to the media without displaying it inline
+
+  {{wiki:dokuwiki-128.png?linkonly}}
+
+{{wiki:dokuwiki-128.png?linkonly}} This is just a link to the image.
+
 ==== Fallback Formats ====
 
 Unfortunately not all browsers understand all video and audio formats. To mitigate the problem, you can upload your file in different formats for maximum browser compatibility.
@@ -261,17 +272,19 @@ There are three exceptions which do not come from that pattern file: multiplicat
 
 Some times you want to mark some text to show it's a reply or comment. You can use the following syntax:
 
-  I think we should do it
-  
-  > No we shouldn't
-  
-  >> Well, I say we should
-  
-  > Really?
-  
-  >> Yes!
-  
-  >>> Then lets do it!
+<code>
+I think we should do it
+
+> No we shouldn't
+
+>> Well, I say we should
+
+> Really?
+
+>> Yes!
+
+>>> Then lets do it!
+</code>
 
 I think we should do it
 
@@ -317,7 +330,7 @@ As you can see, it's the cell separator before a cell which decides about the fo
   ^ Heading 4    | no colspan this time |                    |
   ^ Heading 5    | Row 2 Col 2          | Row 2 Col 3        |
 
-You can have rowspans (vertically connected cells) by adding '':::'' into the cells below the one to which they should connect.
+You can have rowspans (vertically connected cells) by adding ''%%:::%%'' into the cells below the one to which they should connect.
 
 ^ Heading 1      ^ Heading 2                  ^ Heading 3          ^
 | Row 1 Col 1    | this cell spans vertically | Row 1 Col 3        |
diff --git a/data/security.png b/data/security.png
index c4f1a977189e88ffeb7b8a8f80050847033757d8..cea639eca4ead79de695186127d41e6499c97e4a 100644
Binary files a/data/security.png and b/data/security.png differ
diff --git a/doku.php b/doku.php
index f5aa6cfa4a4c8d29829e08b643dca5bb80009607..b1797fdf2a6898e18750952f565ab50728240a80 100644
--- a/doku.php
+++ b/doku.php
@@ -8,8 +8,8 @@
  * @global Input $INPUT
  */
 
-// update message version
-$updateVersion = 47;
+// update message version - always use a string to avoid localized floats!
+$updateVersion = "48";
 
 //  xdebug_start_profiling();
 
@@ -77,7 +77,7 @@ if($DATE_AT) {
         $DATE_AT = null;
     } else if ($rev_t === false) { //page did not exist
         $rev_n = $pagelog->getRelativeRevision($DATE_AT,+1);
-        msg(sprintf($lang['page_nonexist_rev'], 
+        msg(sprintf($lang['page_nonexist_rev'],
             strftime($conf['dformat'],$DATE_AT),
             wl($ID, array('rev' => $rev_n)),
             strftime($conf['dformat'],$rev_n)));
diff --git a/feed.php b/feed.php
index 7ea2e235e349ec630b4041df4c9c9eb7c634f7eb..7b3b5e9407b8fdaa96f25904175ab65e3a7a6a3c 100644
--- a/feed.php
+++ b/feed.php
@@ -135,7 +135,7 @@ function rss_parseOptions() {
                 'content_type' => array('str', 'view', $conf['rss_media'])
 
             ) as $name => $val) {
-        $opt[$name] = $INPUT->$val[0]($val[1], $val[2], true);
+        $opt[$name] = $INPUT->{$val[0]}($val[1], $val[2], true);
     }
 
     $opt['items']      = max(0, (int) $opt['items']);
diff --git a/inc/.htaccess b/inc/.htaccess
index 2d9c357fff3ccc47d0bd6f9a232c2c2cb163ed01..2b34c725f6a5645d8c6e050513a364e76aecb939 100644
--- a/inc/.htaccess
+++ b/inc/.htaccess
@@ -1,3 +1,8 @@
 ## no access to the inc directory
-order allow,deny
-deny from all
+<IfModule mod_authz_host>
+    Require all denied
+</IfModule>
+<IfModule !mod_authz_host>
+    Order allow,deny
+    Deny from all
+</IfModule>
diff --git a/inc/Form/ButtonElement.php b/inc/Form/ButtonElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..77c30ed4ff8439350f354a8cd22dc85d4d806f9b
--- /dev/null
+++ b/inc/Form/ButtonElement.php
@@ -0,0 +1,34 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class ButtonElement
+ *
+ * Represents a simple button
+ *
+ * @package dokuwiki\Form
+ */
+class ButtonElement extends Element {
+
+    /** @var string HTML content */
+    protected $content = '';
+
+    /**
+     * @param string $name
+     * @param string $content HTML content of the button. You have to escape it yourself.
+     */
+    function __construct($name, $content = '') {
+        parent::__construct('button', array('name' => $name, 'value' => 1));
+        $this->content = $content;
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    public function toHTML() {
+        return '<button ' . buildAttributes($this->attrs()) . '>'.$this->content.'</button>';
+    }
+
+}
diff --git a/inc/Form/CheckableElement.php b/inc/Form/CheckableElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..a57bbc1f628fb230d712b901817ce2101e8e5785
--- /dev/null
+++ b/inc/Form/CheckableElement.php
@@ -0,0 +1,62 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class CheckableElement
+ *
+ * For Radio- and Checkboxes
+ *
+ * @package DokuForm
+ */
+class CheckableElement extends InputElement {
+
+    /**
+     * @param string $type The type of this element
+     * @param string $name The name of this form element
+     * @param string $label The label text for this element
+     */
+    public function __construct($type, $name, $label) {
+        parent::__construct($type, $name, $label);
+        // default value is 1
+        $this->attr('value', 1);
+    }
+
+    /**
+     * Handles the useInput flag and sets the checked attribute accordingly
+     */
+    protected function prefillInput() {
+        global $INPUT;
+        list($name, $key) = $this->getInputName();
+        $myvalue = $this->val();
+
+        if(!$INPUT->has($name)) return;
+
+        if($key === null) {
+            // no key - single value
+            $value = $INPUT->str($name);
+            if($value == $myvalue) {
+                $this->attr('checked', 'checked');
+            } else {
+                $this->rmattr('checked');
+            }
+        } else {
+            // we have an array, there might be several values in it
+            $input = $INPUT->arr($name);
+            if(isset($input[$key])) {
+                $this->rmattr('checked');
+
+                // values seem to be in another sub array
+                if(is_array($input[$key])) {
+                    $input = $input[$key];
+                }
+
+                foreach($input as $value) {
+                    if($value == $myvalue) {
+                        $this->attr('checked', 'checked');
+                    }
+                }
+            }
+        }
+    }
+
+}
diff --git a/inc/Form/Element.php b/inc/Form/Element.php
new file mode 100644
index 0000000000000000000000000000000000000000..7938ee0090434e2ba07d00ac5c4e33616ce4b703
--- /dev/null
+++ b/inc/Form/Element.php
@@ -0,0 +1,151 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class Element
+ *
+ * The basic building block of a form
+ *
+ * @package dokuwiki\Form
+ */
+abstract class Element {
+
+    /**
+     * @var array the attributes of this element
+     */
+    protected $attributes = array();
+
+    /**
+     * @var string The type of this element
+     */
+    protected $type;
+
+    /**
+     * @param string $type The type of this element
+     * @param array $attributes
+     */
+    public function __construct($type, $attributes = array()) {
+        $this->type = $type;
+        $this->attributes = $attributes;
+    }
+
+    /**
+     * Type of this element
+     *
+     * @return string
+     */
+    public function getType() {
+        return $this->type;
+    }
+
+    /**
+     * Gets or sets an attribute
+     *
+     * When no $value is given, the current content of the attribute is returned.
+     * An empty string is returned for unset attributes.
+     *
+     * When a $value is given, the content is set to that value and the Element
+     * itself is returned for easy chaining
+     *
+     * @param string $name Name of the attribute to access
+     * @param null|string $value New value to set
+     * @return string|$this
+     */
+    public function attr($name, $value = null) {
+        // set
+        if($value !== null) {
+            $this->attributes[$name] = $value;
+            return $this;
+        }
+
+        // get
+        if(isset($this->attributes[$name])) {
+            return $this->attributes[$name];
+        } else {
+            return '';
+        }
+    }
+
+    /**
+     * Removes the given attribute if it exists
+     *
+     * @param $name
+     * @return $this
+     */
+    public function rmattr($name) {
+        if(isset($this->attributes[$name])) {
+            unset($this->attributes[$name]);
+        }
+        return $this;
+    }
+
+    /**
+     * Gets or adds a all given attributes at once
+     *
+     * @param array|null $attributes
+     * @return array|$this
+     */
+    public function attrs($attributes = null) {
+        // set
+        if($attributes) {
+            foreach((array) $attributes as $key => $val) {
+                $this->attr($key, $val);
+            }
+            return $this;
+        }
+        // get
+        return $this->attributes;
+    }
+
+    /**
+     * Adds a class to the class attribute
+     *
+     * This is the preferred method of setting the element's class
+     *
+     * @param string $class the new class to add
+     * @return $this
+     */
+    public function addClass($class) {
+        $classes = explode(' ', $this->attr('class'));
+        $classes[] = $class;
+        $classes = array_unique($classes);
+        $classes = array_filter($classes);
+        $this->attr('class', join(' ', $classes));
+        return $this;
+    }
+
+    /**
+     * Get or set the element's ID
+     *
+     * This is the preferred way of setting the element's ID
+     *
+     * @param null|string $id
+     * @return string|$this
+     */
+    public function id($id = null) {
+        if(strpos($id, '__') === false) {
+            throw new \InvalidArgumentException('IDs in DokuWiki have to contain two subsequent underscores');
+        }
+
+        return $this->attr('id', $id);
+    }
+
+    /**
+     * Get or set the element's value
+     *
+     * This is the preferred way of setting the element's value
+     *
+     * @param null|string $value
+     * @return string|$this
+     */
+    public function val($value = null) {
+        return $this->attr('value', $value);
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    abstract public function toHTML();
+}
diff --git a/inc/Form/FieldsetCloseElement.php b/inc/Form/FieldsetCloseElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..8f26717aa86af400523257cf359d524f29017d92
--- /dev/null
+++ b/inc/Form/FieldsetCloseElement.php
@@ -0,0 +1,30 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class FieldsetCloseElement
+ *
+ * Closes an open Fieldset
+ *
+ * @package dokuwiki\Form
+ */
+class FieldsetCloseElement extends TagCloseElement {
+
+    /**
+     * @param array $attributes
+     */
+    public function __construct($attributes = array()) {
+        parent::__construct('', $attributes);
+        $this->type = 'fieldsetclose';
+    }
+
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    public function toHTML() {
+        return '</fieldset>';
+    }
+}
diff --git a/inc/Form/FieldsetOpenElement.php b/inc/Form/FieldsetOpenElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7de461faa6d0a9bd9256120d88e265c48b8879e
--- /dev/null
+++ b/inc/Form/FieldsetOpenElement.php
@@ -0,0 +1,36 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class FieldsetOpenElement
+ *
+ * Opens a Fieldset with an optional legend
+ *
+ * @package dokuwiki\Form
+ */
+class FieldsetOpenElement extends TagOpenElement {
+
+    /**
+     * @param string $legend
+     * @param array $attributes
+     */
+    public function __construct($legend='', $attributes = array()) {
+        // this is a bit messy and we just do it for the nicer class hierarchy
+        // the parent would expect the tag in $value but we're storing the
+        // legend there, so we have to set the type manually
+        parent::__construct($legend, $attributes);
+        $this->type = 'fieldsetopen';
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    public function toHTML() {
+        $html = '<fieldset '.buildAttributes($this->attrs()).'>';
+        $legend = $this->val();
+        if($legend) $html .= DOKU_LF.'<legend>'.hsc($legend).'</legend>';
+        return $html;
+    }
+}
diff --git a/inc/Form/Form.php b/inc/Form/Form.php
new file mode 100644
index 0000000000000000000000000000000000000000..7eaa53041ff6685d2ba760f494d44f3386b474d6
--- /dev/null
+++ b/inc/Form/Form.php
@@ -0,0 +1,426 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class Form
+ *
+ * Represents the whole Form. This is what you work on, and add Elements to
+ *
+ * @package dokuwiki\Form
+ */
+class Form extends Element {
+
+    /**
+     * @var array name value pairs for hidden values
+     */
+    protected $hidden = array();
+
+    /**
+     * @var Element[] the elements of the form
+     */
+    protected $elements = array();
+
+    /**
+     * Creates a new, empty form with some default attributes
+     *
+     * @param array $attributes
+     */
+    public function __construct($attributes = array()) {
+        global $ID;
+
+        parent::__construct('form', $attributes);
+
+        // use the current URL as default action
+        if(!$this->attr('action')) {
+            $get = $_GET;
+            if(isset($get['id'])) unset($get['id']);
+            $self = wl($ID, $get, false, '&'); //attributes are escaped later
+            $this->attr('action', $self);
+        }
+
+        // post is default
+        if(!$this->attr('method')) {
+            $this->attr('method', 'post');
+        }
+
+        // we like UTF-8
+        if(!$this->attr('accept-charset')) {
+            $this->attr('accept-charset', 'utf-8');
+        }
+
+        // add the security token by default
+        $this->setHiddenField('sectok', getSecurityToken());
+
+        // identify this as a new form based form in HTML
+        $this->addClass('doku_form');
+    }
+
+    /**
+     * Sets a hidden field
+     *
+     * @param $name
+     * @param $value
+     * @return $this
+     */
+    public function setHiddenField($name, $value) {
+        $this->hidden[$name] = $value;
+        return $this;
+    }
+
+    #region element query function
+
+    /**
+     * Returns the numbers of elements in the form
+     *
+     * @return int
+     */
+    public function elementCount() {
+        return count($this->elements);
+    }
+
+    /**
+     * Returns a reference to the element at a position.
+     * A position out-of-bounds will return either the
+     * first (underflow) or last (overflow) element.
+     *
+     * @param $pos
+     * @return Element
+     */
+    public function getElementAt($pos) {
+        if($pos < 0) $pos = count($this->elements) + $pos;
+        if($pos < 0) $pos = 0;
+        if($pos >= count($this->elements)) $pos = count($this->elements) - 1;
+        return $this->elements[$pos];
+    }
+
+    /**
+     * Gets the position of the first of a type of element
+     *
+     * @param string $type Element type to look for.
+     * @param int $offset search from this position onward
+     * @return false|int position of element if found, otherwise false
+     */
+    public function findPositionByType($type, $offset = 0) {
+        $len = $this->elementCount();
+        for($pos = $offset; $pos < $len; $pos++) {
+            if($this->elements[$pos]->getType() == $type) {
+                return $pos;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Gets the position of the first element matching the attribute
+     *
+     * @param string $name Name of the attribute
+     * @param string $value Value the attribute should have
+     * @param int $offset search from this position onward
+     * @return false|int position of element if found, otherwise false
+     */
+    public function findPositionByAttribute($name, $value, $offset = 0) {
+        $len = $this->elementCount();
+        for($pos = $offset; $pos < $len; $pos++) {
+            if($this->elements[$pos]->attr($name) == $value) {
+                return $pos;
+            }
+        }
+        return false;
+    }
+
+    #endregion
+
+    #region Element positioning functions
+
+    /**
+     * Adds or inserts an element to the form
+     *
+     * @param Element $element
+     * @param int $pos 0-based position in the form, -1 for at the end
+     * @return Element
+     */
+    public function addElement(Element $element, $pos = -1) {
+        if(is_a($element, '\dokuwiki\Form\Form')) throw new \InvalidArgumentException('You can\'t add a form to a form');
+        if($pos < 0) {
+            $this->elements[] = $element;
+        } else {
+            array_splice($this->elements, $pos, 0, array($element));
+        }
+        return $element;
+    }
+
+    /**
+     * Replaces an existing element with a new one
+     *
+     * @param Element $element the new element
+     * @param $pos 0-based position of the element to replace
+     */
+    public function replaceElement(Element $element, $pos) {
+        if(is_a($element, '\dokuwiki\Form\Form')) throw new \InvalidArgumentException('You can\'t add a form to a form');
+        array_splice($this->elements, $pos, 1, array($element));
+    }
+
+    /**
+     * Remove an element from the form completely
+     *
+     * @param $pos 0-based position of the element to remove
+     */
+    public function removeElement($pos) {
+        array_splice($this->elements, $pos, 1);
+    }
+
+    #endregion
+
+    #region Element adding functions
+
+    /**
+     * Adds a text input field
+     *
+     * @param $name
+     * @param $label
+     * @param int $pos
+     * @return InputElement
+     */
+    public function addTextInput($name, $label = '', $pos = -1) {
+        return $this->addElement(new InputElement('text', $name, $label), $pos);
+    }
+
+    /**
+     * Adds a password input field
+     *
+     * @param $name
+     * @param $label
+     * @param int $pos
+     * @return InputElement
+     */
+    public function addPasswordInput($name, $label = '', $pos = -1) {
+        return $this->addElement(new InputElement('password', $name, $label), $pos);
+    }
+
+    /**
+     * Adds a radio button field
+     *
+     * @param $name
+     * @param $label
+     * @param int $pos
+     * @return CheckableElement
+     */
+    public function addRadioButton($name, $label = '', $pos = -1) {
+        return $this->addElement(new CheckableElement('radio', $name, $label), $pos);
+    }
+
+    /**
+     * Adds a checkbox field
+     *
+     * @param $name
+     * @param $label
+     * @param int $pos
+     * @return CheckableElement
+     */
+    public function addCheckbox($name, $label = '', $pos = -1) {
+        return $this->addElement(new CheckableElement('checkbox', $name, $label), $pos);
+    }
+
+    /**
+     * Adds a textarea field
+     *
+     * @param $name
+     * @param $label
+     * @param int $pos
+     * @return TextareaElement
+     */
+    public function addTextarea($name, $label = '', $pos = -1) {
+        return $this->addElement(new TextareaElement($name, $label), $pos);
+    }
+
+    /**
+     * Adds a simple button, escapes the content for you
+     *
+     * @param string $name
+     * @param string $content
+     * @param int $pos
+     * @return Element
+     */
+    public function addButton($name, $content, $pos = -1) {
+        return $this->addElement(new ButtonElement($name, hsc($content)), $pos);
+    }
+
+    /**
+     * Adds a simple button, allows HTML for content
+     *
+     * @param string $name
+     * @param string $html
+     * @param int $pos
+     * @return Element
+     */
+    public function addButtonHTML($name, $html, $pos = -1) {
+        return $this->addElement(new ButtonElement($name, $html), $pos);
+    }
+
+    /**
+     * Adds a label referencing another input element, escapes the label for you
+     *
+     * @param $label
+     * @param string $for
+     * @param int $pos
+     * @return Element
+     */
+    public function addLabel($label, $for='', $pos = -1) {
+        return $this->addLabelHTML(hsc($label), $for, $pos);
+    }
+
+    /**
+     * Adds a label referencing another input element, allows HTML for content
+     *
+     * @param string $content
+     * @param string|Element $for
+     * @param int $pos
+     * @return Element
+     */
+    public function addLabelHTML($content, $for='', $pos = -1) {
+        $element = new LabelElement(hsc($content));
+
+        if(is_a($for, '\dokuwiki\Form\Element')) {
+            /** @var Element $for */
+            $for = $for->id();
+        }
+        $for = (string) $for;
+        if($for !== '') {
+            $element->attr('for', $for);
+        }
+
+        return $this->addElement($element, $pos);
+    }
+
+    /**
+     * Add fixed HTML to the form
+     *
+     * @param $html
+     * @param int $pos
+     * @return HTMLElement
+     */
+    public function addHTML($html, $pos = -1) {
+        return $this->addElement(new HTMLElement($html), $pos);
+    }
+
+    /**
+     * Add a closed HTML tag to the form
+     *
+     * @param $tag
+     * @param int $pos
+     * @return TagElement
+     */
+    public function addTag($tag, $pos = -1) {
+        return $this->addElement(new TagElement($tag), $pos);
+    }
+
+    /**
+     * Add an open HTML tag to the form
+     *
+     * Be sure to close it again!
+     *
+     * @param $tag
+     * @param int $pos
+     * @return TagOpenElement
+     */
+    public function addTagOpen($tag, $pos = -1) {
+        return $this->addElement(new TagOpenElement($tag), $pos);
+    }
+
+    /**
+     * Add a closing HTML tag to the form
+     *
+     * Be sure it had been opened before
+     *
+     * @param $tag
+     * @param int $pos
+     * @return TagCloseElement
+     */
+    public function addTagClose($tag, $pos = -1) {
+        return $this->addElement(new TagCloseElement($tag), $pos);
+    }
+
+    /**
+     * Open a Fieldset
+     *
+     * @param $legend
+     * @param int $pos
+     * @return FieldsetOpenElement
+     */
+    public function addFieldsetOpen($legend = '', $pos = -1) {
+        return $this->addElement(new FieldsetOpenElement($legend), $pos);
+    }
+
+    /**
+     * Close a fieldset
+     *
+     * @param int $pos
+     * @return TagCloseElement
+     */
+    public function addFieldsetClose($pos = -1) {
+        return $this->addElement(new FieldsetCloseElement(), $pos);
+    }
+
+    #endregion
+
+    /**
+     * Adjust the elements so that fieldset open and closes are matching
+     */
+    protected function balanceFieldsets() {
+        $lastclose = 0;
+        $isopen = false;
+        $len = count($this->elements);
+
+        for($pos = 0; $pos < $len; $pos++) {
+            $type = $this->elements[$pos]->getType();
+            if($type == 'fieldsetopen') {
+                if($isopen) {
+                    //close previous fieldset
+                    $this->addFieldsetClose($pos);
+                    $lastclose = $pos + 1;
+                    $pos++;
+                    $len++;
+                }
+                $isopen = true;
+            } else if($type == 'fieldsetclose') {
+                if(!$isopen) {
+                    // make sure there was a fieldsetopen
+                    // either right after the last close or at the begining
+                    $this->addFieldsetOpen('', $lastclose);
+                    $len++;
+                    $pos++;
+                }
+                $lastclose = $pos;
+                $isopen = false;
+            }
+        }
+
+        // close open fieldset at the end
+        if($isopen) {
+            $this->addFieldsetClose();
+        }
+    }
+
+    /**
+     * The HTML representation of the whole form
+     *
+     * @return string
+     */
+    public function toHTML() {
+        $this->balanceFieldsets();
+
+        $html = '<form ' . buildAttributes($this->attrs()) . '>' . DOKU_LF;
+
+        foreach($this->hidden as $name => $value) {
+            $html .= '<input type="hidden" name="' . $name . '" value="' . formText($value) . '" />' . DOKU_LF;
+        }
+
+        foreach($this->elements as $element) {
+            $html .= $element->toHTML() . DOKU_LF;
+        }
+
+        $html .= '</form>' . DOKU_LF;
+
+        return $html;
+    }
+}
diff --git a/inc/Form/HTMLElement.php b/inc/Form/HTMLElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..591cf472f97578aa829b7b19981d8b6a271b7432
--- /dev/null
+++ b/inc/Form/HTMLElement.php
@@ -0,0 +1,29 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class HTMLElement
+ *
+ * Holds arbitrary HTML that is added as is to the Form
+ *
+ * @package dokuwiki\Form
+ */
+class HTMLElement extends ValueElement {
+
+
+    /**
+     * @param string $html
+     */
+    public function __construct($html) {
+        parent::__construct('html', $html);
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    public function toHTML() {
+        return $this->val();
+    }
+}
diff --git a/inc/Form/InputElement.php b/inc/Form/InputElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..694dd0848de543a00da945761d9c155089fca161
--- /dev/null
+++ b/inc/Form/InputElement.php
@@ -0,0 +1,161 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class InputElement
+ *
+ * Base class for all input elements. Uses a wrapping label when label
+ * text is given.
+ *
+ * @todo figure out how to make wrapping or related label configurable
+ * @package dokuwiki\Form
+ */
+class InputElement extends Element {
+    /**
+     * @var LabelElement
+     */
+    protected $label = null;
+
+    /**
+     * @var bool if the element should reflect posted values
+     */
+    protected $useInput = true;
+
+    /**
+     * @param string $type The type of this element
+     * @param string $name The name of this form element
+     * @param string $label The label text for this element (will be autoescaped)
+     */
+    public function __construct($type, $name, $label = '') {
+        parent::__construct($type, array('name' => $name));
+        $this->attr('name', $name);
+        $this->attr('type', $type);
+        if($label) $this->label = new LabelElement($label);
+    }
+
+    /**
+     * Returns the label element if there's one set
+     *
+     * @return LabelElement|null
+     */
+    public function getLabel() {
+        return $this->label;
+    }
+
+    /**
+     * Should the user sent input be used to initialize the input field
+     *
+     * The default is true. Any set values will be overwritten by the INPUT
+     * provided values.
+     *
+     * @param bool $useinput
+     * @return $this
+     */
+    public function useInput($useinput) {
+        $this->useInput = (bool) $useinput;
+        return $this;
+    }
+
+    /**
+     * Get or set the element's ID
+     *
+     * @param null|string $id
+     * @return string|$this
+     */
+    public function id($id = null) {
+        if($this->label) $this->label->attr('for', $id);
+        return parent::id($id);
+    }
+
+    /**
+     * Adds a class to the class attribute
+     *
+     * This is the preferred method of setting the element's class
+     *
+     * @param string $class the new class to add
+     * @return $this
+     */
+    public function addClass($class) {
+        if($this->label) $this->label->addClass($class);
+        return parent::addClass($class);
+    }
+
+    /**
+     * Figures out how to access the value for this field from INPUT data
+     *
+     * The element's name could have been given as a simple string ('foo')
+     * or in array notation ('foo[bar]').
+     *
+     * Note: this function only handles one level of arrays. If your data
+     * is nested deeper, you should call useInput(false) and set the
+     * correct value yourself
+     *
+     * @return array name and array key (null if not an array)
+     */
+    protected function getInputName() {
+        $name = $this->attr('name');
+        parse_str("$name=1", $parsed);
+
+        $name = array_keys($parsed);
+        $name = array_shift($name);
+
+        if(is_array($parsed[$name])) {
+            $key = array_keys($parsed[$name]);
+            $key = array_shift($key);
+        } else {
+            $key = null;
+        }
+
+        return array($name, $key);
+    }
+
+    /**
+     * Handles the useInput flag and set the value attribute accordingly
+     */
+    protected function prefillInput() {
+        global $INPUT;
+
+        list($name, $key) = $this->getInputName();
+        if(!$INPUT->has($name)) return;
+
+        if($key === null) {
+            $value = $INPUT->str($name);
+        } else {
+            $value = $INPUT->arr($name);
+            if(isset($value[$key])) {
+                $value = $value[$key];
+            } else {
+                $value = '';
+            }
+        }
+        if($value !== '') {
+            $this->val($value);
+        }
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    protected function mainElementHTML() {
+        if($this->useInput) $this->prefillInput();
+        return '<input ' . buildAttributes($this->attrs()) . ' />';
+    }
+
+    /**
+     * The HTML representation of this element wrapped in a label
+     *
+     * @return string
+     */
+    public function toHTML() {
+        if($this->label) {
+            return '<label ' . buildAttributes($this->label->attrs()) . '>' . DOKU_LF .
+            '<span>' . hsc($this->label->val()) . '</span>' . DOKU_LF .
+            $this->mainElementHTML() . DOKU_LF .
+            '</label>';
+        } else {
+            return $this->mainElementHTML();
+        }
+    }
+}
diff --git a/inc/Form/LabelElement.php b/inc/Form/LabelElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..9c8d542774132dda3beb012e7648fd654af4ba6b
--- /dev/null
+++ b/inc/Form/LabelElement.php
@@ -0,0 +1,27 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class Label
+ * @package dokuwiki\Form
+ */
+class LabelElement extends ValueElement {
+
+    /**
+     * Creates a new Label
+     *
+     * @param string $label This is is raw HTML and will not be escaped
+     */
+    public function __construct($label) {
+        parent::__construct('label', $label);
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    public function toHTML() {
+        return '<label ' . buildAttributes($this->attrs()) . '>' . $this->val() . '</label>';
+    }
+}
diff --git a/inc/Form/LegacyForm.php b/inc/Form/LegacyForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..1b47ba204966ce9df84c4d406c8429b28b3a1e0c
--- /dev/null
+++ b/inc/Form/LegacyForm.php
@@ -0,0 +1,181 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class LegacyForm
+ *
+ * Provides a compatibility layer to the old Doku_Form API
+ *
+ * This can be used to work with the modern API on forms provided by old events for
+ * example. When you start new forms, just use Form\Form
+ *
+ * @package dokuwiki\Form
+ */
+class LegacyForm extends Form {
+
+    /**
+     * Creates a new modern form from an old legacy Doku_Form
+     *
+     * @param \Doku_Form $oldform
+     */
+    public function __construct(\Doku_Form $oldform) {
+        parent::__construct($oldform->params);
+
+        $this->hidden = $oldform->_hidden;
+
+        foreach($oldform->_content as $element) {
+            list($ctl, $attr) = $this->parseLegacyAttr($element);
+
+            if(is_array($element)) {
+                switch($ctl['elem']) {
+                    case 'wikitext':
+                        $this->addTextarea('wikitext')
+                             ->attrs($attr)
+                             ->id('wiki__text')
+                             ->val($ctl['text'])
+                             ->addClass($ctl['class']);
+                        break;
+                    case 'textfield':
+                        $this->addTextInput($ctl['name'], $ctl['text'])
+                             ->attrs($attr)
+                             ->id($ctl['id'])
+                             ->addClass($ctl['class']);
+                        break;
+                    case 'passwordfield':
+                        $this->addPasswordInput($ctl['name'], $ctl['text'])
+                             ->attrs($attr)
+                             ->id($ctl['id'])
+                             ->addClass($ctl['class']);
+                        break;
+                    case 'checkboxfield':
+                        $this->addCheckbox($ctl['name'], $ctl['text'])
+                             ->attrs($attr)
+                             ->id($ctl['id'])
+                             ->addClass($ctl['class']);
+                        break;
+                    case 'radiofield':
+                        $this->addRadioButton($ctl['name'], $ctl['text'])
+                             ->attrs($attr)
+                             ->id($ctl['id'])
+                             ->addClass($ctl['class']);
+                        break;
+                    case 'tag':
+                        $this->addTag($ctl['tag'])
+                             ->attrs($attr)
+                             ->attr('name', $ctl['name'])
+                             ->id($ctl['id'])
+                             ->addClass($ctl['class']);
+                        break;
+                    case 'opentag':
+                        $this->addTagOpen($ctl['tag'])
+                             ->attrs($attr)
+                             ->attr('name', $ctl['name'])
+                             ->id($ctl['id'])
+                             ->addClass($ctl['class']);
+                        break;
+                    case 'closetag':
+                        $this->addTagClose($ctl['tag']);
+                        break;
+                    case 'openfieldset':
+                        $this->addFieldsetOpen($ctl['legend'])
+                            ->attrs($attr)
+                            ->attr('name', $ctl['name'])
+                            ->id($ctl['id'])
+                            ->addClass($ctl['class']);
+                        break;
+                    case 'closefieldset':
+                        $this->addFieldsetClose();
+                        break;
+                    case 'button':
+                    case 'field':
+                    case 'fieldright':
+                    case 'filefield':
+                    case 'menufield':
+                    case 'listboxfield':
+                        throw new \UnexpectedValueException('Unsupported legacy field ' . $ctl['elem']);
+                        break;
+                    default:
+                        throw new \UnexpectedValueException('Unknown legacy field ' . $ctl['elem']);
+
+                }
+            } else {
+                $this->addHTML($element);
+            }
+        }
+
+    }
+
+    /**
+     * Parses out what is the elements attributes and what is control info
+     *
+     * @param array $legacy
+     * @return array
+     */
+    protected function parseLegacyAttr($legacy) {
+        $attributes = array();
+        $control = array();
+
+        foreach($legacy as $key => $val) {
+            if($key{0} == '_') {
+                $control[substr($key, 1)] = $val;
+            } elseif($key == 'name') {
+                $control[$key] = $val;
+            } elseif($key == 'id') {
+                $control[$key] = $val;
+            } else {
+                $attributes[$key] = $val;
+            }
+        }
+
+        return array($control, $attributes);
+    }
+
+    /**
+     * Translates our types to the legacy types
+     *
+     * @param string $type
+     * @return string
+     */
+    protected function legacyType($type) {
+        static $types = array(
+            'text' => 'textfield',
+            'password' => 'passwordfield',
+            'checkbox' => 'checkboxfield',
+            'radio' => 'radiofield',
+            'tagopen' => 'opentag',
+            'tagclose' => 'closetag',
+            'fieldsetopen' => 'openfieldset',
+            'fieldsetclose' => 'closefieldset',
+        );
+        if(isset($types[$type])) return $types[$type];
+        return $type;
+    }
+
+    /**
+     * Creates an old legacy form from this modern form's data
+     *
+     * @return \Doku_Form
+     */
+    public function toLegacy() {
+        $this->balanceFieldsets();
+
+        $legacy = new \Doku_Form($this->attrs());
+        $legacy->_hidden = $this->hidden;
+        foreach($this->elements as $element) {
+            if(is_a($element, 'dokuwiki\Form\HTMLElement')) {
+                $legacy->_content[] = $element->toHTML();
+            } elseif(is_a($element, 'dokuwiki\Form\InputElement')) {
+                /** @var InputElement $element */
+                $data = $element->attrs();
+                $data['_elem'] = $this->legacyType($element->getType());
+                $label = $element->getLabel();
+                if($label) {
+                    $data['_class'] = $label->attr('class');
+                }
+                $legacy->_content[] = $data;
+            }
+        }
+
+        return $legacy;
+    }
+}
diff --git a/inc/Form/TagCloseElement.php b/inc/Form/TagCloseElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc0264c21ee676a772ffdedfdbd27132cfc83576
--- /dev/null
+++ b/inc/Form/TagCloseElement.php
@@ -0,0 +1,76 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class TagCloseElement
+ *
+ * Creates an HTML close tag. You have to make sure it has been opened
+ * before or this will produce invalid HTML
+ *
+ * @package dokuwiki\Form
+ */
+class TagCloseElement extends ValueElement {
+
+    /**
+     * @param string $tag
+     * @param array $attributes
+     */
+    public function __construct($tag, $attributes = array()) {
+        parent::__construct('tagclose', $tag, $attributes);
+    }
+
+    /**
+     * do not call this
+     *
+     * @param $class
+     * @return void
+     * @throws \BadMethodCallException
+     */
+    public function addClass($class) {
+        throw new \BadMethodCallException('You can\t add classes to closing tag');
+    }
+
+    /**
+     * do not call this
+     *
+     * @param $id
+     * @return void
+     * @throws \BadMethodCallException
+     */
+    public function id($id = null) {
+        throw new \BadMethodCallException('You can\t add ID to closing tag');
+    }
+
+    /**
+     * do not call this
+     *
+     * @param $name
+     * @param $value
+     * @return void
+     * @throws \BadMethodCallException
+     */
+    public function attr($name, $value = null) {
+        throw new \BadMethodCallException('You can\t add attributes to closing tag');
+    }
+
+    /**
+     * do not call this
+     *
+     * @param $attributes
+     * @return void
+     * @throws \BadMethodCallException
+     */
+    public function attrs($attributes = null) {
+        throw new \BadMethodCallException('You can\t add attributes to closing tag');
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    public function toHTML() {
+        return '</'.$this->val().'>';
+    }
+
+}
diff --git a/inc/Form/TagElement.php b/inc/Form/TagElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea5144c9c8710dec92e32a02536afaee73032ccd
--- /dev/null
+++ b/inc/Form/TagElement.php
@@ -0,0 +1,29 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class TagElement
+ *
+ * Creates a self closing HTML tag
+ *
+ * @package dokuwiki\Form
+ */
+class TagElement extends ValueElement {
+
+    /**
+     * @param string $tag
+     * @param array $attributes
+     */
+    public function __construct($tag, $attributes = array()) {
+        parent::__construct('tag', $tag, $attributes);
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    public function toHTML() {
+        return '<'.$this->val().' '.buildAttributes($this->attrs()).' />';
+    }
+}
diff --git a/inc/Form/TagOpenElement.php b/inc/Form/TagOpenElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..0afe97b459a3fd85ddaea578a72e6237502e3aa2
--- /dev/null
+++ b/inc/Form/TagOpenElement.php
@@ -0,0 +1,30 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class TagOpenElement
+ *
+ * Creates an open HTML tag. You have to make sure you close it
+ * again or this will produce invalid HTML
+ *
+ * @package dokuwiki\Form
+ */
+class TagOpenElement extends ValueElement {
+
+    /**
+     * @param string $tag
+     * @param array $attributes
+     */
+    public function __construct($tag, $attributes = array()) {
+        parent::__construct('tagopen', $tag, $attributes);
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    public function toHTML() {
+        return '<'.$this->val().' '.buildAttributes($this->attrs()).'>';
+    }
+}
diff --git a/inc/Form/TextareaElement.php b/inc/Form/TextareaElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d461fdf5b7de16db312f3d2eb95aca3044dbe93
--- /dev/null
+++ b/inc/Form/TextareaElement.php
@@ -0,0 +1,51 @@
+<?php
+namespace dokuwiki\Form;
+
+/**
+ * Class TextareaElement
+ * @package dokuwiki\Form
+ */
+class TextareaElement extends InputElement {
+
+    /**
+     * @var string the actual text within the area
+     */
+    protected $text;
+
+    /**
+     * @param string $name The name of this form element
+     * @param string $label The label text for this element
+     */
+    public function __construct($name, $label) {
+        parent::__construct('textarea', $name, $label);
+        $this->attr('dir', 'auto');
+    }
+
+    /**
+     * Get or set the element's value
+     *
+     * This is the preferred way of setting the element's value
+     *
+     * @param null|string $value
+     * @return string|$this
+     */
+    public function val($value = null) {
+        if($value !== null) {
+            $this->text = $value;
+            return $this;
+        }
+        return $this->text;
+    }
+
+    /**
+     * The HTML representation of this element
+     *
+     * @return string
+     */
+    protected function mainElementHTML() {
+        if($this->useInput) $this->prefillInput();
+        return '<textarea ' . buildAttributes($this->attrs()) . '>' .
+        formText($this->val()) . '</textarea>';
+    }
+
+}
diff --git a/inc/Form/ValueElement.php b/inc/Form/ValueElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..9dc2fd0df6ad8f0817a428304af6cb2447f764ff
--- /dev/null
+++ b/inc/Form/ValueElement.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace dokuwiki\Form;
+
+/**
+ * Class ValueElement
+ *
+ * Just like an Element but it's value is not part of its attributes
+ *
+ * What the value is (tag name, content, etc) is defined by the actual implementations
+ *
+ * @package dokuwiki\Form
+ */
+abstract class ValueElement extends Element {
+
+    /**
+     * @var string holds the element's value
+     */
+    protected $value = '';
+
+    /**
+     * @param string $type
+     * @param array|string $value
+     * @param array $attributes
+     */
+    public function __construct($type, $value, $attributes = array()) {
+        parent::__construct($type, $attributes);
+        $this->val($value);
+    }
+
+    /**
+     * Get or set the element's value
+     *
+     * @param null|string $value
+     * @return string|$this
+     */
+    public function val($value = null) {
+        if($value !== null) {
+            $this->value = $value;
+            return $this;
+        }
+        return $this->value;
+    }
+
+}
diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php
index 76d973c38bfba4be7996fac1728187b86b6e7573..4aefcfe5abacd457d1ab5d291b93f77b1bea4db1 100644
--- a/inc/HTTPClient.php
+++ b/inc/HTTPClient.php
@@ -592,18 +592,24 @@ class HTTPClient {
             // set correct peer name for verification (enabled since PHP 5.6)
             stream_context_set_option($socket, 'ssl', 'peer_name', $requestinfo['host']);
 
-            // Because of older PHP versions having trouble with TLS (enable_crypto returns true, but
-            // the conection still borks) we try SSLv3 first
-            if (@stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT)) {
-                $requesturl = $requestinfo['path'];
+            // because SSLv3 is mostly broken, we try TLS connections here first.
+            // according to  https://github.com/splitbrain/dokuwiki/commit/c05ef534 we had problems with certain
+            // setups with this solution before, but we have no usable test for that and TLS should be the more
+            // common crypto by now
+            if (@stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
+                $requesturl = $requestinfo['path'].
+                  (!empty($requestinfo['query'])?'?'.$requestinfo['query']:'');
                 return true;
             }
 
-            // If the proxy does not support SSLv3 we try TLS
-            if (@stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
-                $requesturl = $requestinfo['path'];
+            // if the above failed, this will most probably not work either, but we can try
+            if (@stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT)) {
+                $requesturl = $requestinfo['path'].
+                  (!empty($requestinfo['query'])?'?'.$requestinfo['query']:'');
                 return true;
             }
+
+            throw new HTTPClientException('Failed to set up crypto for secure connection to '.$requestinfo['host'], -151);
         }
 
         throw new HTTPClientException('Failed to establish secure proxy connection', -150);
diff --git a/inc/IXR_Library.php b/inc/IXR_Library.php
index 8392986806e171b1122b9b4016ea5133465b671f..5ae1402b955120d24867c2aaa3986db891d41690 100644
--- a/inc/IXR_Library.php
+++ b/inc/IXR_Library.php
@@ -52,7 +52,7 @@ class IXR_Value {
      * @param mixed $data
      * @param bool $type
      */
-    function IXR_Value($data, $type = false) {
+    function __construct($data, $type = false) {
         $this->data = $data;
         if(!$type) {
             $type = $this->calculateType();
@@ -201,7 +201,7 @@ class IXR_Message {
     /**
      * @param string $message
      */
-    function IXR_Message($message) {
+    function __construct($message) {
         $this->message =& $message;
     }
 
@@ -297,6 +297,7 @@ class IXR_Message {
      * @param $tag
      */
     function tag_close($parser, $tag) {
+        $value = null;
         $valueFlag = false;
         switch($tag) {
             case 'int':
@@ -388,7 +389,7 @@ class IXR_Server {
      * @param bool $data
      * @param bool $wait
      */
-    function IXR_Server($callbacks = false, $data = false, $wait = false) {
+    function __construct($callbacks = false, $data = false, $wait = false) {
         $this->setCapabilities();
         if($callbacks) {
             $this->callbacks = $callbacks;
@@ -621,7 +622,7 @@ class IXR_Request {
      * @param string $method
      * @param array $args
      */
-    function IXR_Request($method, $args) {
+    function __construct($method, $args) {
         $this->method = $method;
         $this->args = $args;
         $this->xml = <<<EOD
@@ -684,7 +685,7 @@ class IXR_Client extends DokuHTTPClient {
      * @param int $port
      * @param int $timeout
      */
-    function IXR_Client($server, $path = false, $port = 80, $timeout = 15) {
+    function __construct($server, $path = false, $port = 80, $timeout = 15) {
         parent::__construct();
         if(!$path) {
             // Assume we have been given a URL instead
@@ -779,7 +780,7 @@ class IXR_Error {
      * @param int $code
      * @param string $message
      */
-    function IXR_Error($code, $message) {
+    function __construct($code, $message) {
         $this->code = $code;
         $this->message = htmlspecialchars($message);
     }
@@ -818,18 +819,14 @@ EOD;
  * @since 1.5
  */
 class IXR_Date {
-    var $year;
-    var $month;
-    var $day;
-    var $hour;
-    var $minute;
-    var $second;
-    var $timezone;
+
+    /** @var DateTime */
+    protected $date;
 
     /**
      * @param int|string $time
      */
-    function IXR_Date($time) {
+    public function __construct($time) {
         // $time can be a PHP timestamp or an ISO one
         if(is_numeric($time)) {
             $this->parseTimestamp($time);
@@ -839,51 +836,48 @@ class IXR_Date {
     }
 
     /**
+     * Parse unix timestamp
+     *
      * @param int $timestamp
      */
-    function parseTimestamp($timestamp) {
-        $this->year = gmdate('Y', $timestamp);
-        $this->month = gmdate('m', $timestamp);
-        $this->day = gmdate('d', $timestamp);
-        $this->hour = gmdate('H', $timestamp);
-        $this->minute = gmdate('i', $timestamp);
-        $this->second = gmdate('s', $timestamp);
-        $this->timezone = '';
+    protected function parseTimestamp($timestamp) {
+        $this->date = new DateTime('@' . $timestamp);
     }
 
     /**
+     * Parses less or more complete iso dates and much more, if no timezone given assumes UTC
+     *
      * @param string $iso
      */
-    function parseIso($iso) {
-        if(preg_match('/^(\d\d\d\d)-?(\d\d)-?(\d\d)([T ](\d\d):(\d\d)(:(\d\d))?)?/', $iso, $match)) {
-            $this->year = (int) $match[1];
-            $this->month = (int) $match[2];
-            $this->day = (int) $match[3];
-            $this->hour = (int) $match[5];
-            $this->minute = (int) $match[6];
-            $this->second = (int) $match[8];
-        }
+    protected function parseIso($iso) {
+        $this->date = new DateTime($iso, new DateTimeZone("UTC"));
     }
 
     /**
+     * Returns date in ISO 8601 format
+     *
      * @return string
      */
-    function getIso() {
-        return $this->year . $this->month . $this->day . 'T' . $this->hour . ':' . $this->minute . ':' . $this->second . $this->timezone;
+    public function getIso() {
+        return $this->date->format(DateTime::ISO8601);
     }
 
     /**
+     * Returns date in valid xml
+     *
      * @return string
      */
-    function getXml() {
+    public function getXml() {
         return '<dateTime.iso8601>' . $this->getIso() . '</dateTime.iso8601>';
     }
 
     /**
+     * Returns Unix timestamp
+     *
      * @return int
      */
     function getTimestamp() {
-        return gmmktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
+        return $this->date->getTimestamp();
     }
 }
 
@@ -899,7 +893,7 @@ class IXR_Base64 {
     /**
      * @param string $data
      */
-    function IXR_Base64($data) {
+    function __construct($data) {
         $this->data = $data;
     }
 
@@ -923,7 +917,10 @@ class IXR_IntrospectionServer extends IXR_Server {
     /** @var string[] */
     var $help;
 
-    function IXR_IntrospectionServer() {
+    /**
+     * Constructor
+     */
+    function __construct() {
         $this->setCallbacks();
         $this->setCapabilities();
         $this->capabilities['introspection'] = array(
@@ -1106,8 +1103,8 @@ class IXR_ClientMulticall extends IXR_Client {
      * @param string|bool $path
      * @param int $port
      */
-    function IXR_ClientMulticall($server, $path = false, $port = 80) {
-        parent::IXR_Client($server, $path, $port);
+    function __construct($server, $path = false, $port = 80) {
+        parent::__construct($server, $path, $port);
         //$this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)';
     }
 
diff --git a/inc/JSON.php b/inc/JSON.php
index 7f89005ff80109d44eb8ace1100f0e64327c1c47..e01488e14690e9bdfff46df0fed71225f2cf7af9 100644
--- a/inc/JSON.php
+++ b/inc/JSON.php
@@ -119,7 +119,7 @@ class JSON {
      *                               JSON_LOOSE_TYPE - loose typing
      *                                                 "{...}" syntax creates associative arrays in decode.
      */
-    function JSON($use=JSON_STRICT_TYPE) {
+    function __construct($use=JSON_STRICT_TYPE) {
         $this->use = $use;
     }
 
diff --git a/inc/JpegMeta.php b/inc/JpegMeta.php
index cd082cbba832d64925d38b761bf2a30d8e239e5d..1fa4f25cec69022962830535ca5925a2daf33ef6 100644
--- a/inc/JpegMeta.php
+++ b/inc/JpegMeta.php
@@ -54,7 +54,7 @@ class JpegMeta {
      *
      * @author Sebastian Delmont <sdelmont@zonageek.com>
      */
-    function JpegMeta($fileName) {
+    function __construct($fileName) {
 
         $this->_fileName = $fileName;
 
diff --git a/inc/PassHash.class.php b/inc/PassHash.class.php
index 15f896dcff09cbd305ae15dca680f35668d82897..0701c4116fa7756d0e4c2f8d4124af55eb53ce65 100644
--- a/inc/PassHash.class.php
+++ b/inc/PassHash.class.php
@@ -50,7 +50,7 @@ class PassHash {
         } elseif(preg_match('/^md5\$(.{5})\$/', $hash, $m)) {
             $method = 'djangomd5';
             $salt   = $m[1];
-        } elseif(preg_match('/^\$2a\$(.{2})\$/', $hash, $m)) {
+        } elseif(preg_match('/^\$2(a|y)\$(.{2})\$/', $hash, $m)) {
             $method = 'bcrypt';
             $salt   = $hash;
         } elseif(substr($hash, 0, 6) == '{SSHA}') {
diff --git a/inc/Tar.class.php b/inc/Tar.class.php
index 0dc7dace2c9bcacb7be8bede59296af86ce7a22e..57c280d7991d9646dd10835d1880067686da59e4 100644
--- a/inc/Tar.class.php
+++ b/inc/Tar.class.php
@@ -43,6 +43,7 @@
  * @author Andreas Gohr <andi@splitbrain.org>
  * @author Bouchon <tarlib@bouchon.org> (Maxg)
  * @license GPL 2
+ * @deprecated 2015-05-15 - use splitbrain\PHPArchive\Tar instead
  */
 class Tar {
 
diff --git a/inc/TarLib.class.php b/inc/TarLib.class.php
deleted file mode 100644
index dd319a79aedc1097427e3c7fd848574fda1ad44e..0000000000000000000000000000000000000000
--- a/inc/TarLib.class.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/**
- * This is a compatibility wrapper around the new Tar class
- *
- * Use of this library is strongly discouraged. Only basic extraction is wrapped,
- * everything else will fail.
- *
- * @deprecated 2012-11-06
- */
-class TarLib {
-
-    const   COMPRESS_GZIP      = 1;
-    const   COMPRESS_BZIP      = 2;
-    const   COMPRESS_AUTO      = 3;
-    const   COMPRESS_NONE      = 0;
-    const   TARLIB_VERSION     = '1.2';
-    const   FULL_ARCHIVE       = -1;
-    const   ARCHIVE_DYNAMIC    = 0;
-    const   ARCHIVE_RENAMECOMP = 5;
-    const   COMPRESS_DETECT    = -1;
-
-    private $file = '';
-    private $tar;
-
-    public $_result = true;
-
-    function __construct($file, $comptype = TarLib::COMPRESS_AUTO, $complevel = 9) {
-        dbg_deprecated('class Tar');
-
-        if(!$file) $this->error('__construct', '$file');
-
-        $this->file = $file;
-        switch($comptype) {
-            case TarLib::COMPRESS_AUTO:
-            case TarLib::COMPRESS_DETECT:
-                $comptype = Tar::COMPRESS_AUTO;
-                break;
-            case TarLib::COMPRESS_GZIP:
-                $comptype = Tar::COMPRESS_GZIP;
-                break;
-            case TarLib::COMPRESS_BZIP:
-                $comptype = Tar::COMPRESS_BZIP;
-                break;
-            default:
-                $comptype = Tar::COMPRESS_NONE;
-        }
-
-        $this->complevel = $complevel;
-
-        try {
-            $this->tar = new Tar();
-            $this->tar->open($file, $comptype);
-        } catch(Exception $e) {
-            $this->_result = false;
-        }
-    }
-
-    function Extract($p_what = TarLib::FULL_ARCHIVE, $p_to = '.', $p_remdir = '', $p_mode = 0755) {
-        if($p_what != TarLib::FULL_ARCHIVE) {
-            $this->error('Extract', 'Ep_what');
-            return 0;
-        }
-
-        try {
-            $this->tar->extract($p_to, $p_remdir);
-        } catch(Exception $e) {
-            return 0;
-        }
-        return 1;
-    }
-
-    function error($func, $param = '') {
-        $error = 'TarLib is deprecated and should no longer be used.';
-
-        if($param) {
-            $error .= "In this compatibility wrapper, the function '$func' does not accept your value for".
-                "the parameter '$param' anymore.";
-        } else {
-            $error .= "The function '$func' no longer exists in this compatibility wrapper.";
-        }
-
-        msg($error, -1);
-    }
-
-    function __call($name, $arguments) {
-        $this->error($name);
-    }
-}
\ No newline at end of file
diff --git a/inc/ZipLib.class.php b/inc/ZipLib.class.php
index 5b524c4ab04fde6153c7d2cad9787bf63e27561b..1358ca45eeaf9cf777a0e96f22fd67cf18344b6b 100644
--- a/inc/ZipLib.class.php
+++ b/inc/ZipLib.class.php
@@ -6,6 +6,7 @@
  * @link       http://forum.maxg.info
  *
  * Modified for Dokuwiki
+ * @deprecated 2015-05-15 - use splitbrain\PHPArchive\Zip instead
  * @author    Christopher Smith <chris@jalakai.co.uk>
  */
 class ZipLib {
diff --git a/inc/actions.php b/inc/actions.php
index 709c19dddcd3383c0d58a89166098513dcf8f088..adba2aa3233108d2ea4b3044067e1d24f5a77ca9 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -29,6 +29,8 @@ function act_dispatch(){
 
     // give plugins an opportunity to process the action
     $evt = new Doku_Event('ACTION_ACT_PREPROCESS',$ACT);
+
+    $headers = array();
     if ($evt->advise_before()) {
 
         //sanitize $ACT
@@ -144,8 +146,10 @@ function act_dispatch(){
             $ACT = act_draftdel($ACT);
 
         //draft saving on preview
-        if($ACT == 'preview')
+        if($ACT == 'preview') {
+            $headers[] = "X-XSS-Protection: 0";
             $ACT = act_draftsave($ACT);
+        }
 
         //edit
         if(in_array($ACT, array('edit', 'preview', 'recover'))) {
@@ -162,20 +166,9 @@ function act_dispatch(){
         if($ACT == 'admin'){
             // retrieve admin plugin name from $_REQUEST['page']
             if (($page = $INPUT->str('page', '', true)) != '') {
-                $pluginlist = plugin_list('admin');
-                if (in_array($page, $pluginlist)) {
-                    // attempt to load the plugin
-
-                    if (($plugin = plugin_load('admin',$page)) !== null){
-                        /** @var DokuWiki_Admin_Plugin $plugin */
-                        if($plugin->forAdminOnly() && !$INFO['isadmin']){
-                            // a manager tried to load a plugin that's for admins only
-                            $INPUT->remove('page');
-                            msg('For admins only',-1);
-                        }else{
-                            $plugin->handle();
-                        }
-                    }
+                /** @var $plugin DokuWiki_Admin_Plugin */
+                if ($plugin = plugin_getRequestAdminPlugin()){
+                    $plugin->handle();
                 }
             }
         }
@@ -200,7 +193,6 @@ function act_dispatch(){
     global $license;
 
     //call template FIXME: all needed vars available?
-    $headers = array();
     $headers[] = 'Content-Type: text/html; charset=utf-8';
     trigger_event('ACTION_HEADERS_SEND',$headers,'act_sendheaders');
 
diff --git a/inc/auth.php b/inc/auth.php
index 17923ba2adc6113fe46a65a4ece57ffa6aaf571a..8965ee4c019cb2236799e44c76ab5953061cf12f 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -101,10 +101,7 @@ function auth_setup() {
         $INPUT->set('p', stripctl($INPUT->str('p')));
     }
 
-    if($INPUT->str('authtok')) {
-        // when an authentication token is given, trust the session
-        auth_validateToken($INPUT->str('authtok'));
-    } elseif(!is_null($auth) && $auth->canDo('external')) {
+    if(!is_null($auth) && $auth->canDo('external')) {
         // external trust mechanism in place
         $auth->trustExternal($INPUT->str('u'), $INPUT->str('p'), $INPUT->bool('r'));
     } else {
@@ -274,52 +271,6 @@ function auth_login($user, $pass, $sticky = false, $silent = false) {
     return false;
 }
 
-/**
- * Checks if a given authentication token was stored in the session
- *
- * Will setup authentication data using data from the session if the
- * token is correct. Will exit with a 401 Status if not.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param  string $token The authentication token
- * @return boolean|null true (or will exit on failure)
- */
-function auth_validateToken($token) {
-    if(!$token || $token != $_SESSION[DOKU_COOKIE]['auth']['token']) {
-        // bad token
-        http_status(401);
-        print 'Invalid auth token - maybe the session timed out';
-        unset($_SESSION[DOKU_COOKIE]['auth']['token']); // no second chance
-        exit;
-    }
-    // still here? trust the session data
-    global $USERINFO;
-    /* @var Input $INPUT */
-    global $INPUT;
-
-    $INPUT->server->set('REMOTE_USER',$_SESSION[DOKU_COOKIE]['auth']['user']);
-    $USERINFO               = $_SESSION[DOKU_COOKIE]['auth']['info'];
-    return true;
-}
-
-/**
- * Create an auth token and store it in the session
- *
- * NOTE: this is completely unrelated to the getSecurityToken() function
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @return string The auth token
- */
-function auth_createToken() {
-    $token = md5(auth_randombytes(16));
-    @session_start(); // reopen the session if needed
-    $_SESSION[DOKU_COOKIE]['auth']['token'] = $token;
-    session_write_close();
-    return $token;
-}
-
 /**
  * Builds a pseudo UID from browser and IP data
  *
@@ -739,27 +690,22 @@ function auth_aclcheck_cb($data) {
         $user   = utf8_strtolower($user);
         $groups = array_map('utf8_strtolower', $groups);
     }
-    $user   = $auth->cleanUser($user);
+    $user   = auth_nameencode($auth->cleanUser($user));
     $groups = array_map(array($auth, 'cleanGroup'), (array) $groups);
-    $user   = auth_nameencode($user);
 
     //prepend groups with @ and nameencode
-    $cnt = count($groups);
-    for($i = 0; $i < $cnt; $i++) {
-        $groups[$i] = '@'.auth_nameencode($groups[$i]);
+    foreach($groups as &$group) {
+        $group = '@'.auth_nameencode($group);
     }
 
     $ns   = getNS($id);
     $perm = -1;
 
-    if($user || count($groups)) {
-        //add ALL group
-        $groups[] = '@ALL';
-        //add User
-        if($user) $groups[] = $user;
-    } else {
-        $groups[] = '@ALL';
-    }
+    //add ALL group
+    $groups[] = '@ALL';
+
+    //add User
+    if($user) $groups[] = $user;
 
     //check exact match first
     $matches = preg_grep('/^'.preg_quote($id, '/').'[ \t]+([^ \t]+)[ \t]+/', $AUTH_ACL);
@@ -1006,7 +952,7 @@ function register() {
 
     //okay try to create the user
     if(!$auth->triggerUserMod('create', array($login, $pass, $fullname, $email))) {
-        msg($lang['reguexists'], -1);
+        msg($lang['regfail'], -1);
         return false;
     }
 
@@ -1098,17 +1044,18 @@ function updateprofile() {
         }
     }
 
-    if($result = $auth->triggerUserMod('modify', array($INPUT->server->str('REMOTE_USER'), &$changes))) {
-        // update cookie and session with the changed data
-        if($changes['pass']) {
-            list( /*user*/, $sticky, /*pass*/) = auth_getCookie();
-            $pass = auth_encrypt($changes['pass'], auth_cookiesalt(!$sticky, true));
-            auth_setCookie($INPUT->server->str('REMOTE_USER'), $pass, (bool) $sticky);
-        }
-        return true;
+    if(!$auth->triggerUserMod('modify', array($INPUT->server->str('REMOTE_USER'), &$changes))) {
+        msg($lang['proffail'], -1);
+        return false;
     }
 
-    return false;
+    // update cookie and session with the changed data
+    if($changes['pass']) {
+        list( /*user*/, $sticky, /*pass*/) = auth_getCookie();
+        $pass = auth_encrypt($changes['pass'], auth_cookiesalt(!$sticky, true));
+        auth_setCookie($INPUT->server->str('REMOTE_USER'), $pass, (bool) $sticky);
+    }
+    return true;
 }
 
 /**
@@ -1221,7 +1168,7 @@ function act_resendpwd() {
 
             // change it
             if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) {
-                msg('error modifying user data', -1);
+                msg($lang['proffail'], -1);
                 return false;
             }
 
@@ -1229,7 +1176,7 @@ function act_resendpwd() {
 
             $pass = auth_pwgen($user);
             if(!$auth->triggerUserMod('modify', array($user, array('pass' => $pass)))) {
-                msg('error modifying user data', -1);
+                msg($lang['proffail'], -1);
                 return false;
             }
 
diff --git a/inc/cache.php b/inc/cache.php
index 68f64eaa2fd8255490709e5fe61c13112fa1eea4..9375dc86be863f4372687e272b3971882376d600 100644
--- a/inc/cache.php
+++ b/inc/cache.php
@@ -26,7 +26,7 @@ class cache {
      * @param string $key primary identifier
      * @param string $ext file extension
      */
-    public function cache($key,$ext) {
+    public function __construct($key,$ext) {
         $this->key = $key;
         $this->ext = $ext;
         $this->cache = getCacheName($key,$ext);
@@ -188,12 +188,12 @@ class cache_parser extends cache {
      * @param string $file source file for cache
      * @param string $mode input mode
      */
-    public function cache_parser($id, $file, $mode) {
+    public function __construct($id, $file, $mode) {
         if ($id) $this->page = $id;
         $this->file = $file;
         $this->mode = $mode;
 
-        parent::cache($file.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.'.$mode);
+        parent::__construct($file.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.'.$mode);
     }
 
     /**
@@ -308,8 +308,8 @@ class cache_instructions extends cache_parser {
      * @param string $id page id
      * @param string $file source file for cache
      */
-    public function cache_instructions($id, $file) {
-        parent::cache_parser($id, $file, 'i');
+    public function __construct($id, $file) {
+        parent::__construct($id, $file, 'i');
     }
 
     /**
diff --git a/inc/changelog.php b/inc/changelog.php
index d1ef7973e33ce4889356146306589034d4a1c94c..f4731021ca48c63e14eae6d414eb02132cf72866 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -849,18 +849,17 @@ abstract class ChangeLog {
     public function isCurrentRevision($rev) {
         return $rev == @filemtime($this->getFilename());
     }
-    
+
     /**
-    * Return an existing revision for a specific date which is 
+    * Return an existing revision for a specific date which is
     * the current one or younger or equal then the date
     *
-    * @param string $id 
     * @param number $date_at timestamp
     * @return string revision ('' for current)
     */
     function getLastRevisionAt($date_at){
         //requested date_at(timestamp) younger or equal then modified_time($this->id) => load current
-        if($date_at >= @filemtime($this->getFilename())) { 
+        if($date_at >= @filemtime($this->getFilename())) {
             return '';
         } else if ($rev = $this->getRelativeRevision($date_at+1, -1)) { //+1 to get also the requested date revision
             return $rev;
@@ -1049,6 +1048,12 @@ class MediaChangelog extends ChangeLog {
  *
  * @author Ben Coburn <btcoburn@silicodon.net>
  * @author Kate Arzamastseva <pshns@ukr.net>
+ *
+ * @param string $id
+ * @param int    $rev
+ * @param int    $chunk_size
+ * @param bool   $media
+ * @return array|bool
  */
 function getRevisionInfo($id, $rev, $chunk_size = 8192, $media = false) {
     dbg_deprecated('class PageChangeLog or class MediaChangelog');
diff --git a/inc/cliopts.php b/inc/cliopts.php
index 7d71c7dc922431d83d18e8b17a8be3aa71dbad9e..d7d06119a2ccb2a167e0a44f5ce39f916c0dd003 100644
--- a/inc/cliopts.php
+++ b/inc/cliopts.php
@@ -447,7 +447,7 @@ class Doku_Cli_Opts_Error {
     var $code;
     var $msg;
 
-    function Doku_Cli_Opts_Error($code, $msg) {
+    function __construct($code, $msg) {
         $this->code = $code;
         $this->msg = $msg;
     }
@@ -468,7 +468,7 @@ class Doku_Cli_Opts_Container {
     var $options = array();
     var $args = array();
 
-    function Doku_Cli_Opts_Container($options) {
+    function __construct($options) {
         foreach ( $options[0] as $option ) {
             if ( false !== ( strpos($option[0], '--') ) ) {
                 $opt_name = substr($option[0], 2);
diff --git a/inc/common.php b/inc/common.php
index 5a8b5c90069f89ddfa6701dbedabd59d9884dcb4..68af14e50b6d558995c4ee500937154bc9d51ed3 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -30,6 +30,32 @@ function hsc($string) {
     return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
 }
 
+/**
+ * Checks if the given input is blank
+ *
+ * This is similar to empty() but will return false for "0".
+ *
+ * Please note: when you pass uninitialized variables, they will implicitly be created
+ * with a NULL value without warning.
+ *
+ * To avoid this it's recommended to guard the call with isset like this:
+ *
+ * (isset($foo) && !blank($foo))
+ * (!isset($foo) || blank($foo))
+ *
+ * @param $in
+ * @param bool $trim Consider a string of whitespace to be blank
+ * @return bool
+ */
+function blank(&$in, $trim = false) {
+    if(is_null($in)) return true;
+    if(is_array($in)) return empty($in);
+    if($in === "\0") return true;
+    if($trim && trim($in) === '') return true;
+    if(strlen($in) > 0) return false;
+    return empty($in);
+}
+
 /**
  * print a newline terminated string
  *
@@ -1164,6 +1190,38 @@ function con($pre, $text, $suf, $pretty = false) {
     return $pre.$text.$suf;
 }
 
+/**
+ * Checks if the current page version is newer than the last entry in the page's
+ * changelog. If so, we assume it has been an external edit and we create an
+ * attic copy and add a proper changelog line.
+ *
+ * This check is only executed when the page is about to be saved again from the
+ * wiki, triggered in @see saveWikiText()
+ *
+ * @param string $id the page ID
+ */
+function detectExternalEdit($id) {
+    global $lang;
+
+    $file     = wikiFN($id);
+    $old      = @filemtime($file); // from page
+    $pagelog  = new PageChangeLog($id, 1024);
+    $oldRev   = $pagelog->getRevisions(-1, 1); // from changelog
+    $oldRev   = (int) (empty($oldRev) ? 0 : $oldRev[0]);
+
+    if(!file_exists(wikiFN($id, $old)) && file_exists($file) && $old >= $oldRev) {
+        // add old revision to the attic if missing
+        saveOldRevision($id);
+        // add a changelog entry if this edit came from outside dokuwiki
+        if($old > $oldRev) {
+            addLogEntry($old, $id, DOKU_CHANGE_TYPE_EDIT, $lang['external_edit'], '', array('ExternalEdit'=> true));
+            // remove soon to be stale instructions
+            $cache = new cache_instructions($id, $file);
+            $cache->removeCache();
+        }
+    }
+}
+
 /**
  * Saves a wikitext by calling io_writeWikiPage.
  * Also directs changelog and attic updates.
@@ -1189,77 +1247,72 @@ function saveWikiText($id, $text, $summary, $minor = false) {
     /* @var Input $INPUT */
     global $INPUT;
 
-    // ignore if no changes were made
-    if($text == rawWiki($id, '')) {
-        return;
-    }
+    // prepare data for event
+    $svdta = array();
+    $svdta['id']             = $id;
+    $svdta['file']           = wikiFN($id);
+    $svdta['revertFrom']     = $REV;
+    $svdta['oldRevision']    = @filemtime($svdta['file']);
+    $svdta['newRevision']    = 0;
+    $svdta['newContent']     = $text;
+    $svdta['oldContent']     = rawWiki($id);
+    $svdta['summary']        = $summary;
+    $svdta['contentChanged'] = ($svdta['newContent'] != $svdta['oldContent']);
+    $svdta['changeInfo']     = '';
+    $svdta['changeType']     = DOKU_CHANGE_TYPE_EDIT;
 
-    $file        = wikiFN($id);
-    $old         = @filemtime($file); // from page
-    $wasRemoved  = (trim($text) == ''); // check for empty or whitespace only
-    $wasCreated  = !file_exists($file);
-    $wasReverted = ($REV == true);
-    $pagelog     = new PageChangeLog($id, 1024);
-    $newRev      = false;
-    $oldRev      = $pagelog->getRevisions(-1, 1); // from changelog
-    $oldRev      = (int) (empty($oldRev) ? 0 : $oldRev[0]);
-    if(!file_exists(wikiFN($id, $old)) && file_exists($file) && $old >= $oldRev) {
-        // add old revision to the attic if missing
-        saveOldRevision($id);
-        // add a changelog entry if this edit came from outside dokuwiki
-        if($old > $oldRev) {
-            addLogEntry($old, $id, DOKU_CHANGE_TYPE_EDIT, $lang['external_edit'], '', array('ExternalEdit'=> true));
-            // remove soon to be stale instructions
-            $cache = new cache_instructions($id, $file);
-            $cache->removeCache();
-        }
+    // select changelog line type
+    if($REV) {
+        $svdta['changeType']  = DOKU_CHANGE_TYPE_REVERT;
+        $svdta['changeInfo'] = $REV;
+    } else if(!file_exists($svdta['file'])) {
+        $svdta['changeType'] = DOKU_CHANGE_TYPE_CREATE;
+    } else if(trim($text) == '') {
+        // empty or whitespace only content deletes
+        $svdta['changeType'] = DOKU_CHANGE_TYPE_DELETE;
+        // autoset summary on deletion
+        if(blank($svdta['summary'])) $svdta['summary'] = $lang['deleted'];
+    } else if($minor && $conf['useacl'] && $INPUT->server->str('REMOTE_USER')) {
+        //minor edits only for logged in users
+        $svdta['changeType'] = DOKU_CHANGE_TYPE_MINOR_EDIT;
     }
 
-    if($wasRemoved) {
+    $event = new Doku_Event('COMMON_WIKIPAGE_SAVE', $svdta);
+    if(!$event->advise_before()) return;
+
+    // if the content has not been changed, no save happens (plugins may override this)
+    if(!$svdta['contentChanged']) return;
+
+    detectExternalEdit($id);
+    if($svdta['changeType'] == DOKU_CHANGE_TYPE_DELETE) {
         // Send "update" event with empty data, so plugins can react to page deletion
-        $data = array(array($file, '', false), getNS($id), noNS($id), false);
+        $data = array(array($svdta['file'], '', false), getNS($id), noNS($id), false);
         trigger_event('IO_WIKIPAGE_WRITE', $data);
         // pre-save deleted revision
-        @touch($file);
+        @touch($svdta['file']);
         clearstatcache();
-        $newRev = saveOldRevision($id);
+        $data['newRevision'] = saveOldRevision($id);
         // remove empty file
-        @unlink($file);
+        @unlink($svdta['file']);
         // don't remove old meta info as it should be saved, plugins can use IO_WIKIPAGE_WRITE for removing their metadata...
         // purge non-persistant meta data
         p_purge_metadata($id);
-        $del = true;
-        // autoset summary on deletion
-        if(empty($summary)) $summary = $lang['deleted'];
         // remove empty namespaces
         io_sweepNS($id, 'datadir');
         io_sweepNS($id, 'mediadir');
     } else {
         // save file (namespace dir is created in io_writeWikiPage)
-        io_writeWikiPage($file, $text, $id);
+        io_writeWikiPage($svdta['file'], $text, $id);
         // pre-save the revision, to keep the attic in sync
-        $newRev = saveOldRevision($id);
-        $del    = false;
+        $svdta['newRevision'] = saveOldRevision($id);
     }
 
-    // select changelog line type
-    $extra = '';
-    $type  = DOKU_CHANGE_TYPE_EDIT;
-    if($wasReverted) {
-        $type  = DOKU_CHANGE_TYPE_REVERT;
-        $extra = $REV;
-    } else if($wasCreated) {
-        $type = DOKU_CHANGE_TYPE_CREATE;
-    } else if($wasRemoved) {
-        $type = DOKU_CHANGE_TYPE_DELETE;
-    } else if($minor && $conf['useacl'] && $INPUT->server->str('REMOTE_USER')) {
-        $type = DOKU_CHANGE_TYPE_MINOR_EDIT;
-    } //minor edits only for logged in users
+    $event->advise_after();
 
-    addLogEntry($newRev, $id, $type, $summary, $extra);
+    addLogEntry($svdta['newRevision'], $svdta['id'], $svdta['changeType'], $svdta['summary'], $svdta['changeInfo']);
     // send notify mails
-    notify($id, 'admin', $old, $summary, $minor);
-    notify($id, 'subscribers', $old, $summary, $minor);
+    notify($svdta['id'], 'admin', $svdta['oldRevision'], $svdta['summary'], $minor);
+    notify($svdta['id'], 'subscribers', $svdta['oldRevision'], $svdta['summary'], $minor);
 
     // update the purgefile (timestamp of the last time anything within the wiki was changed)
     io_saveFile($conf['cachedir'].'/purgefile', time());
@@ -1860,7 +1913,7 @@ function valid_input_set($param, $valid_values, $array, $exc = '') {
  */
 function get_doku_pref($pref, $default) {
     $enc_pref = urlencode($pref);
-    if(strpos($_COOKIE['DOKU_PREFS'], $enc_pref) !== false) {
+    if(isset($_COOKIE['DOKU_PREFS']) && strpos($_COOKIE['DOKU_PREFS'], $enc_pref) !== false) {
         $parts = explode('#', $_COOKIE['DOKU_PREFS']);
         $cnt   = count($parts);
         for($i = 0; $i < $cnt; $i += 2) {
@@ -1875,6 +1928,7 @@ function get_doku_pref($pref, $default) {
 /**
  * Add a preference to the DokuWiki cookie
  * (remembering $_COOKIE['DOKU_PREFS'] is urlencoded)
+ * Remove it by setting $val to false
  *
  * @param string $pref  preference key
  * @param string $val   preference value
@@ -1891,12 +1945,17 @@ function set_doku_pref($pref, $val) {
         $enc_pref = rawurlencode($pref);
         for($i = 0; $i < $cnt; $i += 2) {
             if($parts[$i] == $enc_pref) {
-                $parts[$i + 1] = rawurlencode($val);
+                if ($val !== false) {
+                    $parts[$i + 1] = rawurlencode($val);
+                } else {
+                    unset($parts[$i]);
+                    unset($parts[$i + 1]);
+                }
                 break;
             }
         }
         $cookieVal = implode('#', $parts);
-    } else if (!$orig) {
+    } else if (!$orig && $val !== false) {
         $cookieVal = ($_COOKIE['DOKU_PREFS'] ? $_COOKIE['DOKU_PREFS'].'#' : '').rawurlencode($pref).'#'.rawurlencode($val);
     }
 
diff --git a/inc/confutils.php b/inc/confutils.php
index 8643a056c54c7dd25057eb08484f05e0245ed65e..8b61a8d5b5b30f7c5758b1b4d3e570afba88aefe 100644
--- a/inc/confutils.php
+++ b/inc/confutils.php
@@ -6,6 +6,12 @@
  * @author     Harry Fuecks <hfuecks@gmail.com>
  */
 
+/*
+ * line prefix used to negate single value config items
+ * (scheme.conf & stopwords.conf), e.g.
+ * !gopher
+ */
+const DOKU_CONF_NEGATION = '!';
 
 /**
  * Returns the (known) extension and mimetype of a given filename
@@ -49,6 +55,7 @@ function getMimeTypes() {
     static $mime = null;
     if ( !$mime ) {
         $mime = retrieveConfig('mime','confToHash');
+        $mime = array_filter($mime);
     }
     return $mime;
 }
@@ -62,6 +69,7 @@ function getAcronyms() {
     static $acronyms = null;
     if ( !$acronyms ) {
         $acronyms = retrieveConfig('acronyms','confToHash');
+        $acronyms = array_filter($acronyms, 'strlen');
     }
     return $acronyms;
 }
@@ -75,6 +83,7 @@ function getSmileys() {
     static $smileys = null;
     if ( !$smileys ) {
         $smileys = retrieveConfig('smileys','confToHash');
+        $smileys = array_filter($smileys, 'strlen');
     }
     return $smileys;
 }
@@ -88,6 +97,7 @@ function getEntities() {
     static $entities = null;
     if ( !$entities ) {
         $entities = retrieveConfig('entities','confToHash');
+        $entities = array_filter($entities, 'strlen');
     }
     return $entities;
 }
@@ -101,9 +111,11 @@ function getInterwiki() {
     static $wikis = null;
     if ( !$wikis ) {
         $wikis = retrieveConfig('interwiki','confToHash',array(true));
+        $wikis = array_filter($wikis, 'strlen');
+
+        //add sepecial case 'this'
+        $wikis['this'] = DOKU_URL.'{NAME}';
     }
-    //add sepecial case 'this'
-    $wikis['this'] = DOKU_URL.'{NAME}';
     return $wikis;
 }
 
@@ -114,7 +126,7 @@ function getInterwiki() {
 function getWordblocks() {
     static $wordblocks = null;
     if ( !$wordblocks ) {
-        $wordblocks = retrieveConfig('wordblock','file');
+        $wordblocks = retrieveConfig('wordblock','file',null,'array_merge_with_removal');
     }
     return $wordblocks;
 }
@@ -127,11 +139,11 @@ function getWordblocks() {
 function getSchemes() {
     static $schemes = null;
     if ( !$schemes ) {
-        $schemes = retrieveConfig('scheme','file');
+        $schemes = retrieveConfig('scheme','file',null,'array_merge_with_removal');
+        $schemes = array_map('trim', $schemes);
+        $schemes = preg_replace('/^#.*/', '', $schemes);
+        $schemes = array_filter($schemes);
     }
-    $schemes = array_map('trim', $schemes);
-    $schemes = preg_replace('/^#.*/', '', $schemes);
-    $schemes = array_filter($schemes);
     return $schemes;
 }
 
@@ -194,9 +206,14 @@ function confToHash($file,$lower=false) {
  * @param  string   $type     the configuration settings to be read, must correspond to a key/array in $config_cascade
  * @param  callback $fn       the function used to process the configuration file into an array
  * @param  array    $params   optional additional params to pass to the callback
+ * @param  callback $combine  the function used to combine arrays of values read from different configuration files;
+ *                            the function takes two parameters,
+ *                               $combined - the already read & merged configuration values
+ *                               $new - array of config values from the config cascade file being currently processed
+ *                            and returns an array of the merged configuration values.
  * @return array    configuration values
  */
-function retrieveConfig($type,$fn,$params=null) {
+function retrieveConfig($type,$fn,$params=null,$combine='array_merge') {
     global $config_cascade;
 
     if(!is_array($params)) $params = array();
@@ -208,7 +225,7 @@ function retrieveConfig($type,$fn,$params=null) {
         foreach ($config_cascade[$type][$config_group] as $file) {
             if (file_exists($file)) {
                 $config = call_user_func_array($fn,array_merge(array($file),$params));
-                $combined = array_merge($combined, $config);
+                $combined = $combine($combined, $config);
             }
         }
     }
@@ -347,4 +364,27 @@ function conf_decodeString($str) {
                      return $str;
     }
 }
+
+/**
+ * array combination function to remove negated values (prefixed by !)
+ *
+ * @param  array $current
+ * @param  array $new
+ *
+ * @return array the combined array, numeric keys reset
+ */
+function array_merge_with_removal($current, $new) {
+    foreach ($new as $val) {
+        if (substr($val,0,1) == DOKU_CONF_NEGATION) {
+            $idx = array_search(trim(substr($val,1)),$current);
+            if ($idx !== false) {
+                unset($current[$idx]);
+            }
+        } else {
+            $current[] = trim($val);
+        }
+    }
+
+    return array_slice($current,0);
+}
 //Setup VIM: ex: et ts=4 :
diff --git a/inc/events.php b/inc/events.php
index 256fb561e7e81810a28c83fa700bdcb0a392051f..35d55d0e3fda5f98b17eba1174e215925abc0a3d 100644
--- a/inc/events.php
+++ b/inc/events.php
@@ -31,7 +31,7 @@ class Doku_Event {
      * @param string $name
      * @param mixed $data
      */
-    function Doku_Event($name, &$data) {
+    function __construct($name, &$data) {
 
         $this->name = $name;
         $this->data =& $data;
@@ -153,7 +153,7 @@ class Doku_Event_Handler {
      * constructor, loads all action plugins and calls their register() method giving them
      * an opportunity to register any hooks they require
      */
-    function Doku_Event_Handler() {
+    function __construct() {
 
         // load action plugins
         /** @var DokuWiki_Action_Plugin $plugin */
diff --git a/inc/farm.php b/inc/farm.php
index cee61816c339a3040786a7b148652fc86586f2a2..87fcdade8d8666fd2d22c4cac07d5798eab69717 100644
--- a/inc/farm.php
+++ b/inc/farm.php
@@ -135,12 +135,12 @@ $config_cascade = array(
         ),
     ),
     'userstyle' => array(
-        'screen'  => DOKU_CONF.'userstyle.css',
-        'print'   => DOKU_CONF.'userprint.css',
-        'feed'    => DOKU_CONF.'userfeed.css',
-        'all'     => DOKU_CONF.'userall.css',
+        'screen'    => array(DOKU_CONF . 'userstyle.css', DOKU_CONF . 'userstyle.less'),
+        'print'     => array(DOKU_CONF . 'userprint.css', DOKU_CONF . 'userprint.less'),
+        'feed'      => array(DOKU_CONF . 'userfeed.css', DOKU_CONF . 'userfeed.less'),
+        'all'       => array(DOKU_CONF . 'userall.css', DOKU_CONF . 'userall.less')
     ),
     'userscript' => array(
-        'default' => DOKU_CONF.'userscript.js'
+        'default'   => array(DOKU_CONF . 'userscript.js')
     ),
 );
diff --git a/inc/feedcreator.class.php b/inc/feedcreator.class.php
index b90da572412067aa5ea66eaacb47878e2e7894ff..fe444b39baa3b750026d35ca57afe9b760bf8e10 100644
--- a/inc/feedcreator.class.php
+++ b/inc/feedcreator.class.php
@@ -129,6 +129,9 @@ class FeedItem extends HtmlDescribable {
     // var $source;
 }
 
+/**
+ * Class EnclosureItem
+ */
 class EnclosureItem extends HtmlDescribable {
     /*
     *
@@ -226,7 +229,7 @@ class FeedHtmlField {
      * Creates a new instance of FeedHtmlField.
      * @param string $parFieldContent: if given, sets the rawFieldContent property
      */
-    function FeedHtmlField($parFieldContent) {
+    function __construct($parFieldContent) {
         if ($parFieldContent) {
             $this->rawFieldContent = $parFieldContent;
         }
@@ -482,6 +485,8 @@ class FeedCreator extends HtmlDescribable {
     var $additionalElements = Array();
 
 
+    var $_timeout;
+
     /**
      * Adds an FeedItem to the feed.
      *
@@ -505,7 +510,7 @@ class FeedCreator extends HtmlDescribable {
      * @param int     $length the maximum length the string should be truncated to
      * @return string    the truncated string
      */
-    function iTrunc($string, $length) {
+    static function iTrunc($string, $length) {
         if (strlen($string)<=$length) {
             return $string;
         }
@@ -604,6 +609,8 @@ class FeedCreator extends HtmlDescribable {
     /**
      * @since 1.4
      * @access private
+     *
+     * @param string $filename
      */
     function _redirect($filename) {
         // attention, heavily-commented-out-area
@@ -697,7 +704,7 @@ class FeedDate {
      * Accepts RFC 822, ISO 8601 date formats as well as unix time stamps.
      * @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used.
      */
-    function FeedDate($dateString="") {
+    function __construct($dateString="") {
         if ($dateString=="") $dateString = date("r");
 
         if (is_numeric($dateString)) {
@@ -878,7 +885,10 @@ class RSSCreator091 extends FeedCreator {
      */
     var $RSSVersion;
 
-    function RSSCreator091() {
+    /**
+     * Constructor
+     */
+    function __construct() {
         $this->_setRSSVersion("0.91");
         $this->contentType = "application/rss+xml";
     }
@@ -886,6 +896,8 @@ class RSSCreator091 extends FeedCreator {
     /**
      * Sets this RSS feed's version number.
      * @access private
+     *
+     * @param $version
      */
     function _setRSSVersion($version) {
         $this->RSSVersion = $version;
@@ -1034,7 +1046,10 @@ class RSSCreator091 extends FeedCreator {
  */
 class RSSCreator20 extends RSSCreator091 {
 
-    function RSSCreator20() {
+    /**
+     * Constructor
+     */
+    function __construct() {
         parent::_setRSSVersion("2.0");
     }
 
@@ -1051,7 +1066,10 @@ class RSSCreator20 extends RSSCreator091 {
  */
 class PIECreator01 extends FeedCreator {
 
-    function PIECreator01() {
+    /**
+     * Constructor
+     */
+    function __construct() {
         $this->encoding = "utf-8";
     }
 
@@ -1113,7 +1131,10 @@ class PIECreator01 extends FeedCreator {
  */
 class AtomCreator10 extends FeedCreator {
 
-    function AtomCreator10() {
+    /**
+     * Constructor
+     */
+    function __construct() {
         $this->contentType = "application/atom+xml";
         $this->encoding = "utf-8";
     }
@@ -1200,7 +1221,10 @@ class AtomCreator10 extends FeedCreator {
  */
 class AtomCreator03 extends FeedCreator {
 
-    function AtomCreator03() {
+    /**
+     * Constructor
+     */
+    function __construct() {
         $this->contentType = "application/atom+xml";
         $this->encoding = "utf-8";
     }
@@ -1272,12 +1296,19 @@ class AtomCreator03 extends FeedCreator {
  * @author Kai Blankenhorn <kaib@bitfolge.de>
  */
 class MBOXCreator extends FeedCreator {
-
-    function MBOXCreator() {
+    /**
+     * Constructor
+     */
+    function __construct() {
         $this->contentType = "text/plain";
         $this->encoding = "utf-8";
     }
 
+    /**
+     * @param string $input
+     * @param int $line_max
+     * @return string
+     */
     function qp_enc($input = "", $line_max = 76) {
         $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
         $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
@@ -1363,7 +1394,10 @@ class MBOXCreator extends FeedCreator {
  */
 class OPMLCreator extends FeedCreator {
 
-    function OPMLCreator() {
+    /**
+     * Constructor
+     */
+    function __construct() {
         $this->encoding = "utf-8";
     }
 
diff --git a/inc/fetch.functions.php b/inc/fetch.functions.php
index c99fbf20ae3d0c8535e90fbd403fee037fb8c0f0..b8e75eaec4adcd00ce55f59b1e5773cd526a75aa 100644
--- a/inc/fetch.functions.php
+++ b/inc/fetch.functions.php
@@ -1,4 +1,4 @@
-<?php 
+<?php
 /**
  * Functions used by lib/exe/fetch.php
  * (not included by other parts of dokuwiki)
@@ -47,18 +47,15 @@ function sendFile($file, $mime, $dl, $cache, $public = false, $orig = null) {
             // cache publically
             header('Expires: '.gmdate("D, d M Y H:i:s", $expires).' GMT');
             header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.$maxage);
-            header('Pragma: public');
         } else {
             // cache in browser
             header('Expires: '.gmdate("D, d M Y H:i:s", $expires).' GMT');
             header('Cache-Control: private, no-transform, max-age='.$maxage);
-            header('Pragma: no-cache');
         }
     } else {
         // no cache at all
         header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
         header('Cache-Control: no-cache, no-transform');
-        header('Pragma: no-cache');
     }
 
     //send important headers first, script stops here if '304 Not Modified' response
diff --git a/inc/form.php b/inc/form.php
index 00eea9b3a084e12c7a36ed2527b18df043237aec..91a171555c85aa3b686a7042ad201dcdd8774878 100644
--- a/inc/form.php
+++ b/inc/form.php
@@ -55,7 +55,7 @@ class Doku_Form {
      *
      * @author  Tom N Harris <tnharris@whoopdedo.org>
      */
-    function Doku_Form($params, $action=false, $method=false, $enctype=false) {
+    function __construct($params, $action=false, $method=false, $enctype=false) {
         if(!is_array($params)) {
             $this->params = array('id' => $params);
             if ($action !== false) $this->params['action'] = $action;
@@ -400,7 +400,7 @@ function form_makeWikiText($text, $attrs=array()) {
 function form_makeButton($type, $act, $value='', $attrs=array()) {
     if ($value == '') $value = $act;
     $elem = array('_elem'=>'button', 'type'=>$type, '_action'=>$act,
-                        'value'=>$value, 'class'=>'button');
+                        'value'=>$value);
     if (!empty($attrs['accesskey']) && empty($attrs['title'])) {
         $attrs['title'] = $value . ' ['.strtoupper($attrs['accesskey']).']';
     }
@@ -761,7 +761,9 @@ function form_wikitext($attrs) {
  */
 function form_button($attrs) {
     $p = (!empty($attrs['_action'])) ? 'name="do['.$attrs['_action'].']" ' : '';
-    return '<input '.$p.buildAttributes($attrs,true).' />';
+    $value = $attrs['value'];
+    unset($attrs['value']);
+    return '<button '.$p.buildAttributes($attrs,true).'>'.$value.'</button>';
 }
 
 /**
diff --git a/inc/fulltext.php b/inc/fulltext.php
index d6cddc56654525d96233d10b135dba4ad04538ea..a727a8b539459660a124686488e6e78129dce4d7 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -701,7 +701,7 @@ function ft_queryParser($Indexer, $query){
         if (preg_match($ope_regex, $token)) {
             // operator
             $last_ope = end($ope_stack);
-            while ($ope_precedence[$token] <= $ope_precedence[$last_ope] && $last_ope != '(') {
+            while ($last_ope !== false && $ope_precedence[$token] <= $ope_precedence[$last_ope] && $last_ope != '(') {
                 $parsed_ary[] = array_pop($ope_stack);
                 $last_ope = end($ope_stack);
             }
diff --git a/inc/geshi/actionscript-french.php b/inc/geshi/actionscript-french.php
deleted file mode 100644
index e816050980298a1b6910f7fd5cdb9405276f88cd..0000000000000000000000000000000000000000
--- a/inc/geshi/actionscript-french.php
+++ /dev/null
@@ -1,957 +0,0 @@
-<?php
-/*************************************************************************************
- * actionscript.php
- * ----------------
- * Author: Steffen Krause (Steffen.krause@muse.de)
- * Copyright: (c) 2004 Steffen Krause, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.7.9
- * CVS Revision Version: $Revision: 1.9 $
- * Date Started: 2004/06/20
- * Last Modified: $Date: 2006/04/23 01:14:41 $
- *
- * Actionscript language file for GeSHi.
- *
- * CHANGES
- * -------
- * 2005/08/25 (1.0.2)
- * Author [ NikO ] - http://niko.informatif.org
- * - add full link for myInstance.methods to http://wiki.media-box.net/documentation/flash
- * 2004/11/27 (1.0.1)
- *  -  Added support for multiple object splitters
- * 2004/10/27 (1.0.0)
- *  -  First Release
- *
- * TODO (updated 2004/11/27)
- * -------------------------
- *
- *************************************************************************************
- *
- *     This file is part of GeSHi.
- *
- *   GeSHi 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.
- *
- *   GeSHi 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 GeSHi; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- ************************************************************************************/
-
-$language_data = array (
-	'LANG_NAME' => 'Actionscript',
-	'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
-	'COMMENT_MULTI' => array('/*' => '*/'),
-	'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
-	'QUOTEMARKS' => array("'", '"'),
-	'ESCAPE_CHAR' => '\\',
-	'KEYWORDS' => array(
-		1 => array(
-			'#include', 
-			'for', 
-			'foreach', 
-			'if', 
-			'elseif', 
-			'else', 
-			'while', 
-			'do', 
-			'dowhile',
-			'endwhile', 
-			'endif', 
-			'switch', 
-			'case', 
-			'endswitch', 
-			'break', 
-			'continue', 
-			'in',
-			'null', 
-			'false', 
-			'true', 
-			'var',
-			'default',
-			'new', 
-			'_global',
-			'undefined',
-			'super'	
-			),
-		2 => array(
-			'static',
-			'private',
-			'public',
-			'class',
-			'extends',
-			'implements',
-			'import',
-			'return',
-			'trace',
-			'_quality',
-			'_root',
-			'set',
-			'setInterval',
-			'setProperty',
-			'stopAllSounds',
-			'targetPath',
-			'this',
-			'typeof',
-			'unescape',
-			'updateAfterEvent'
-			),
-		3 => array (
-			'Accessibility',
-			'Array',
-			'Boolean',
-			'Button',
-			'Camera',
-			'Color',
-			'ContextMenuItem',
-			'ContextMenu',
-			'Cookie',
-			'Date',
-			'Error',
-			'function',
-			'FWEndCommand',
-			'FWJavascript',
-			'Key',
-			'LoadMovieNum',
-			'LoadMovie',
-			'LoadVariablesNum',
-			'LoadVariables',
-			'LoadVars',
-			'LocalConnection',
-			'Math',
-			'Microphone',
-			'MMExecute',
-			'MMEndCommand',
-			'MMSave',
-			'Mouse',
-			'MovieClipLoader',
-			'MovieClip',
-			'NetConnexion',
-			'NetStream',
-			'Number',
-			'Object',
-			'printAsBitmapNum',
-			'printNum',
-			'printAsBitmap',
-			'printJob',
-			'print',
-			'Selection',
-			'SharedObject',
-			'Sound',
-			'Stage',
-			'String',
-			'System',
-			'TextField',
-			'TextFormat',
-			'Tween',
-			'Video',
-			'XMLUI',
-			'XMLNode',
-			'XMLSocket',
-			'XML'
-			),
-		4 => array (	
-			'isactive',
-			'updateProperties'
-			),
-		5 => array (	
-			'callee',
-			'caller',
-			),
-		6 => array (	
-			'concat',
-			'join',
-			'pop',
-			'push',
-			'reverse',
-			'shift',
-			'slice',
-			'sort',
-			'sortOn',
-			'splice',
-			'toString',
-			'unshift'
-			),
-		7 => array (
-			'valueOf'
-			),
-		8 => array (	
-			'onDragOut',
-			'onDragOver',
-			'onKeyUp',
-			'onKillFocus',
-			'onPress',
-			'onRelease',
-			'onReleaseOutside',
-			'onRollOut',
-			'onRollOver',
-			'onSetFocus'
-			),
-		9 => array (	
-			'setMode',
-			'setMotionLevel',
-			'setQuality',
-			'activityLevel',
-			'bandwidth',
-			'currentFps',
-			'fps',
-			'index',
-			'motionLevel',
-			'motionTimeOut',
-			'muted',
-			'names',
-			'quality',
-			'onActivity',
-			'onStatus'
-			),
-		10 => array (	
-			'getRGB',
-			'setRGB',
-			'getTransform',
-			'setTransform'
-			),
-		11 => array (	
-			'caption',
-			'enabled',
-			'separatorBefore',
-			'visible',
-			'onSelect'
-			),
-		12 => array (	
-			'setCookie',
-			'getcookie'
-			),	
-		13 => array (	
-			'hideBuiltInItems',
-			'builtInItems',
-			'customItems',
-			'onSelect'
-			),
-		14 => array (	
-			'CustomActions.get',
-			'CustomActions.install',
-			'CustomActions.list',
-			'CustomActions.uninstall',
-			),		
-		15 => array (	
-			'getDate',
-			'getDay',
-			'getFullYear',
-			'getHours',
-			'getMilliseconds',
-			'getMinutes',
-			'getMonth',
-			'getSeconds',
-			'getTime',
-			'getTimezoneOffset',
-			'getUTCDate',
-			'getUTCDay',
-			'getUTCFullYear',
-			'getUTCHours',
-			'getUTCMinutes',
-			'getUTCMilliseconds',
-			'getUTCMonth',
-			'getUTCSeconds',
-			'getYear',
-			'setDate',
-			'setFullYear',
-			'setHours',
-			'setMilliseconds',
-			'setMinutes',
-			'setMonth',
-			'setSeconds',
-			'setTime',
-			'setUTCDate',
-			'setUTCDay',
-			'setUTCFullYear',
-			'setUTCHours',
-			'setUTCMinutes',
-			'setUTCMilliseconds',
-			'setUTCMonth',
-			'setUTCSeconds',
-			'setYear',
-			'UTC'
-			),	
-		16 => array (	
-			'message',
-			'name',
-			'throw',
-			'try',
-			'catch',
-			'finally'
-			),
-		17 => array (	
-			'apply',
-			'call'
-			),
-		18 => array (	
-			'BACKSPACE',
-			'CAPSLOCK',
-			'CONTROL',
-			'DELETEKEY',
-			'DOWN',
-			'END',
-			'ENTER',
-			'ESCAPE',
-			'getAscii',
-			'getCode',
-			'HOME',
-			'INSERT',
-			'isDown',
-			'isToggled',
-			'LEFT',
-			'onKeyDown',
-			'onKeyUp',
-			'PGDN',
-			'PGUP',
-			'RIGHT',
-			'SPACE',
-			'TAB',
-			'UP'
-			),
-		19 => array (
-			'addRequestHeader',
-			'contentType',
-			'decode'
-			),
-		20 => array (
-			'allowDomain',
-			'allowInsecureDomain',
-			'close',
-			'domain'
-			),
-		21 => array (
-			'abs',
-			'acos',
-			'asin',
-			'atan',
-			'atan2',
-			'ceil',
-			'cos',
-			'exp',
-			'floor',
-			'log',
-			'LN2',
-			'LN10',
-			'LOG2E',
-			'LOG10E',
-			'max',
-			'min',
-			'PI',
-			'pow',
-			'random',
-			'sin',
-			'SQRT1_2',
-			'sqrt',
-			'tan',
-			'round',
-			'SQRT2'
-			),
-		22 => array (
-			'activityLevel',
-			'muted',
-			'names',
-			'onActivity',
-			'onStatus',
-			'setRate',
-			'setGain',
-			'gain',
-			'rate',
-			'setSilenceLevel',
-			'setUseEchoSuppression',
-			'silenceLevel',
-			'silenceTimeOut',
-			'useEchoSuppression'
-			),
-		23 => array (
-			'hide',
-			'onMouseDown',
-			'onMouseMove',
-			'onMouseUp',
-			'onMouseWeel',
-			'show'
-			),
-		24 => array (
-			'_alpha',
-			'attachAudio',
-			'attachMovie',
-			'beginFill',
-			'beginGradientFill',
-			'clear',
-			'createEmptyMovieClip',
-			'createTextField',
-			'_current',
-			'curveTo',
-			'_dropTarget',
-			'duplicateMovieClip',
-			'endFill',
-			'focusEnabled',
-			'enabled',
-			'_focusrec',
-			'_framesLoaded',
-			'getBounds',
-			'getBytesLoaded',
-			'getBytesTotal',
-			'getDepth',
-			'getInstanceAtDepth',
-			'getNextHighestDepth',
-			'getSWFVersion',
-			'getTextSnapshot',
-			'getURL',
-			'globalToLocal',
-			'gotoAndPlay',
-			'gotoAndStop',
-			'_height',
-			'hitArea',
-			'hitTest',
-			'lineStyle',
-			'lineTo',
-			'localToGlobal',
-			'_lockroot',
-			'menu',
-			'onUnload',
-			'_parent',
-			'play',
-			'prevFrame',
-			'_quality',
-			'removeMovieClip',
-			'_rotation',
-			'setMask',
-			'_soundbuftime',
-			'startDrag',
-			'stopDrag',
-			'stop',
-			'swapDepths',
-			'tabChildren',
-			'_target',
-			'_totalFrames',
-			'trackAsMenu',
-			'unloadMovie',
-			'useHandCursor',
-			'_visible',
-			'_width',
-			'_xmouse',
-			'_xscale',
-			'_x',
-			'_ymouse',
-			'_yscale',
-			'_y'
-			),
-		25 => array (
-			'getProgress',
-			'loadClip',
-			'onLoadComplete',
-			'onLoadError',
-			'onLoadInit',
-			'onLoadProgress',
-			'onLoadStart'
-			),
-		26 => array (
-			'bufferLength',
-			'currentFps',
-			'seek',
-			'setBufferTime',
-			'bufferTime',
-			'time',
-			'pause'
-			),
-		27 => array (
-			'MAX_VALUE',
-			'MIN_VALUE',
-			'NEGATIVE_INFINITY',
-			'POSITIVE_INFINITY'
-			),
-		28 => array (
-			'addProperty',
-			'constructor',
-			'__proto__',
-			'registerClass',
-			'__resolve',
-			'unwatch',
-			'watch',
-			'onUpDate'
-			),
-		29 => array (
-			'addPage'
-			),
-		30 => array (
-			'getBeginIndex',
-			'getCaretIndex',
-			'getEndIndex',
-			'setSelection'
-			),
-		31 => array (
-			'flush',
-			'getLocal',
-			'getSize'
-			),
-		32 => array (
-			'attachSound',
-			'duration',
-			'getPan',
-			'getVolume',
-			'onID3',
-			'loadSound',
-			'id3',
-			'onSoundComplete',
-			'position',
-			'setPan',
-			'setVolume'
-			),
-		33 => array (
-			'getBeginIndex',
-			'getCaretIndex',
-			'getEndIndex',
-			'setSelection'
-			),
-		34 => array (
-			'getEndIndex',
-			),
-		35 => array (
-			'align',
-			'height',
-			'width',
-			'onResize',
-			'scaleMode',
-			'showMenu'
-			),
-		36 => array (
-			'charAt',
-			'charCodeAt',
-			'concat',
-			'fromCharCode',
-			'indexOf',
-			'lastIndexOf',
-			'substr',
-			'substring',
-			'toLowerCase',
-			'toUpperCase'
-			),
-		37 => array (
-			'avHardwareDisable',
-			'hasAccessibility',
-			'hasAudioEncoder',
-			'hasAudio',
-			'hasEmbeddedVideo',
-			'hasMP3',
-			'hasPrinting',
-			'hasScreenBroadcast',
-			'hasScreenPlayback',
-			'hasStreamingAudio',
-			'hasStreamingVideo',
-			'hasVideoEncoder',
-			'isDebugger',
-			'language',
-			'localFileReadDisable',
-			'manufacturer',
-			'os',
-			'pixelAspectRatio',
-			'playerType',
-			'screenColor',
-			'screenDPI',
-			'screenResolutionX',
-			'screenResolutionY',
-			'serverString',
-			'version'
-			),
-		38 => array (
-			'allowDomain',
-			'allowInsecureDomain',
-			'loadPolicyFile'
-			),
-		39 => array (
-			'exactSettings',
-			'setClipboard',
-			'showSettings',
-			'useCodepage'
-			),
-		40 => array (
-			'getStyle',
-			'getStyleNames',
-			'parseCSS',
-			'setStyle',
-			'transform'
-			),
-		41 => array (
-			'autoSize',
-			'background',
-			'backgroundColor',
-			'border',
-			'borderColor',
-			'bottomScroll',
-			'condenseWhite',
-			'embedFonts',
-			'getFontList',
-			'getNewTextFormat',
-			'getTextFormat',
-			'hscroll',
-			'htmlText',
-			'html',
-			'maxChars',
-			'maxhscroll',
-			'maxscroll',
-			'mouseWheelEnabled',
-			'multiline',
-			'onScroller',
-			'password',
-			'removeTextField',
-			'replaceSel',
-			'replaceText',
-			'restrict',
-			'scroll',
-			'selectable',
-			'setNewTextFormat',
-			'setTextFormat',
-			'styleSheet',
-			'tabEnabled',
-			'tabIndex',
-			'textColor',
-			'textHeight',
-			'textWidth',
-			'text',
-			'type',
-			'_url',
-			'variable',
-			'wordWrap'
-			),
-		42 => array (	
-			'blockIndent',
-			'bold',
-			'bullet',
-			'font',
-			'getTextExtent',
-			'indent',
-			'italic',
-			'leading',
-			'leftMargin',
-			'rightMargin',
-			'size',
-			'tabStops',
-			'underline'
-			),
-		43 => array (	
-			'findText',
-			'getCount',
-			'getSelected',
-			'getSelectedText',
-			'getText',
-			'hitTestTextNearPos',
-			'setSelectColor',
-			'setSelected'
-			),
-		44 => array (	
-			'begin',
-			'change',
-			'continueTo',
-			'fforward',
-			'finish',
-			'func',
-			'FPS',
-			'getPosition',
-			'isPlaying',
-			'looping',
-			'obj',
-			'onMotionChanged',
-			'onMotionFinished',
-			'onMotionLooped',
-			'onMotionStarted',
-			'onMotionResumed',
-			'onMotionStopped',
-			'prop',
-			'rewind',
-			'resume',
-			'setPosition',
-			'time',
-			'userSeconds',
-			'yoyo'
-			),
-		45 => array (	
-			'attachVideo',
-			'deblocking',
-			'smoothing'
-			),
-		46 => array (	
-			'addRequestHeader',
-			'appendChild',
-			'attributes',
-			'childNodes',
-			'cloneNode',
-			'contentType',
-			'createElement',
-			'createTextNode',
-			'docTypeDecl',
-			'firstChild',
-			'hasChildNodes',
-			'ignoreWhite',
-			'insertBefore',
-			'lastChild',
-			'nextSibling',
-			'nodeName',
-			'nodeType',
-			'nodeValue',
-			'parentNode',
-			'parseXML',
-			'previousSibling',
-			'removeNode',
-			'xmlDecl'
-			),
-		47 => array (	
-			'onClose',
-			'onXML'
-			),
-		48 => array (	
-			'add',
-			'and',
-			'_highquality',
-			'chr',
-			'eq',
-			'ge',
-			'ifFrameLoaded',
-			'int',
-			'le',
-			'it',
-			'mbchr',
-			'mblength',
-			'mbord',
-			'ne',
-			'not',
-			'or',
-			'ord',
-			'tellTarget',
-			'toggleHighQuality'
-			),
-		49 => array (
-			'ASSetPropFlags',
-			'ASnative',
-			'ASconstructor',
-			'AsSetupError',
-			'FWEndCommand',
-			'FWJavascript',
-			'MMEndCommand',
-			'MMSave',
-			'XMLUI'
-		), 
-		50 => array (
-			'System.capabilities'
-		),
-		51 => array (
-			'System.security'
-		),
-		52 => array (
-			'TextField.StyleSheet'
-		)
-		),
-	'SYMBOLS' => array(
-		'(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>','='
-		),
-	'CASE_SENSITIVE' => array(
-		GESHI_COMMENTS => false,
-		1 => true,
-		2 => true,
-		3 => true,
-		4 => true,
-		5 => true,
-		6 => true,
-		7 => true,
-		8 => true,
-		9 => true,
-		10 => true,
-		11 => true,
-		12 => true,
-		13 => true,
-		14 => true,
-		15 => true,
-		16 => true,
-		17 => true,
-		18 => true,
-		19 => true,
-		20 => true,
-		21 => true,
-		22 => true,
-		23 => true,
-		24 => true,
-		25 => true,
-		26 => true,
-		27 => true,
-		28 => true,
-		29 => true,
-		30 => true,
-		31 => true,
-		32 => true,
-		33 => true,
-		34 => true,
-		35 => true,
-		36 => true,
-		37 => true,
-		38 => true,
-		39 => true,
-		40 => true,
-		41 => true,
-		42 => true,
-		43 => true,
-		44 => true,
-		45 => true,
-		46 => true,
-		47 => true,
-		48 => true,
-		49 => true,
-		50 => true,
-		51 => true,
-		52 => true
-		),
-	'STYLES' => array(
-		'KEYWORDS' => array(
-			1 => 'color: #0000ff;',
-			2 => 'color: #006600;',
-			3 => 'color: #000080;',
-			4 => 'color: #006600;',
-			5 => 'color: #006600;',
-			6 => 'color: #006600;',
-			7 => 'color: #006600;',
-			8 => 'color: #006600;',
-			9 => 'color: #006600;',
-			10 => 'color: #006600;',
-			11 => 'color: #006600;',
-			12 => 'color: #006600;',
-			13 => 'color: #006600;',
-			14 => 'color: #006600;',
-			15 => 'color: #006600;',
-			16 => 'color: #006600;',
-			17 => 'color: #006600;',
-			18 => 'color: #006600;',
-			19 => 'color: #006600;',
-			20 => 'color: #006600;',
-			21 => 'color: #006600;',
-			22 => 'color: #006600;',
-			23 => 'color: #006600;',
-			24 => 'color: #006600;',
-			25 => 'color: #006600;',
-			26 => 'color: #006600;',
-			27 => 'color: #006600;',
-			28 => 'color: #006600;',
-			29 => 'color: #006600;',
-			30 => 'color: #006600;',
-			31 => 'color: #006600;',
-			32 => 'color: #006600;',
-			33 => 'color: #006600;',
-			34 => 'color: #006600;',
-			35 => 'color: #006600;',
-			36 => 'color: #006600;',
-			37 => 'color: #006600;',
-			38 => 'color: #006600;',
-			39 => 'color: #006600;',
-			40 => 'color: #006600;',
-			41 => 'color: #006600;',
-			42 => 'color: #006600;',
-			43 => 'color: #006600;',
-			44 => 'color: #006600;',
-			45 => 'color: #006600;',
-			46 => 'color: #006600;',
-			47 => 'color: #006600;',
-			48 => 'color: #CC0000;',
-			49 => 'color: #5700d1;',
-			50 => 'color: #006600;',
-			51 => 'color: #006600;',
-			52 => 'color: #CC0000;'
-			),
-		'COMMENTS' => array(
-			1 => 'color: #ff8000; font-style: italic;',
-			2 => 'color: #ff8000; font-style: italic;',
-			'MULTI' => 'color: #ff8000; font-style: italic;'
-			),
-		'ESCAPE_CHAR' => array(
-			0 => 'color: #000099; font-weight: bold;'
-			),
-		'BRACKETS' => array(
-			0 => 'color: #333333;'
-			),
-		'STRINGS' => array(
-			0 => 'color: #333333; background-color: #eeeeee;'
-			),
-		'NUMBERS' => array(
-			0 => 'color: #c50000;'
-			),
-
-		'SYMBOLS' => array(
-			0 => 'color: #000000;'
-			),
-		'METHODS' => array(
-			1 => 'color: #006600;'
-			),
-		'REGEXPS' => array(
-			),
-		'SCRIPT' => array(
-			)
-		),
-	'URLS' => array(
-		1 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
-		2 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
-		3 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
-		4 => 'http://wiki.media-box.net/documentation/flash/accessibility/{FNAME}',
-		5 => 'http://wiki.media-box.net/documentation/flash/arguments/{FNAME}',
-		6 => 'http://wiki.media-box.net/documentation/flash/array/{FNAME}',
-		7 => 'http://wiki.media-box.net/documentation/flash/boolean/{FNAME}',
-		8 => 'http://wiki.media-box.net/documentation/flash/button/{FNAME}',
-		9 => 'http://wiki.media-box.net/documentation/flash/camera/{FNAME}',
-		10 => 'http://wiki.media-box.net/documentation/flash/color/{FNAME}',
-		11 => 'http://wiki.media-box.net/documentation/flash/contextmenuitem/{FNAME}',
-		12 => 'http://wiki.media-box.net/documentation/flash/contextmenu/{FNAME}',
-		13 => 'http://wiki.media-box.net/documentation/flash/cookie/{FNAME}',
-		14 => 'http://wiki.media-box.net/documentation/flash/customactions/{FNAME}',
-		15 => 'http://wiki.media-box.net/documentation/flash/date/{FNAME}',
-		16 => 'http://wiki.media-box.net/documentation/flash/error/{FNAME}',
-		17 => 'http://wiki.media-box.net/documentation/flash/function/{FNAME}',
-		18 => 'http://wiki.media-box.net/documentation/flash/key/{FNAME}',
-		19 => 'http://wiki.media-box.net/documentation/flash/loadvars/{FNAME}',
-		20 => 'http://wiki.media-box.net/documentation/flash/localconnection/{FNAME}',
-		21 => 'http://wiki.media-box.net/documentation/flash/math/{FNAME}',
-		22 => 'http://wiki.media-box.net/documentation/flash/microphone/{FNAME}',
-		23 => 'http://wiki.media-box.net/documentation/flash/mouse/{FNAME}',
-		24 => 'http://wiki.media-box.net/documentation/flash/movieclip/{FNAME}',
-		25 => 'http://wiki.media-box.net/documentation/flash/moviecliploader/{FNAME}',
-		26 => 'http://wiki.media-box.net/documentation/flash/netstream/{FNAME}',
-		27 => 'http://wiki.media-box.net/documentation/flash/number/{FNAME}',
-		28 => 'http://wiki.media-box.net/documentation/flash/object/{FNAME}',
-		29 => 'http://wiki.media-box.net/documentation/flash/printJob/{FNAME}',
-		30 => 'http://wiki.media-box.net/documentation/flash/selection/{FNAME}',
-		31 => 'http://wiki.media-box.net/documentation/flash/sharedobject/{FNAME}',
-		32 => 'http://wiki.media-box.net/documentation/flash/sound/{FNAME}',
-		33 => 'http://wiki.media-box.net/documentation/flash/selection/{FNAME}',
-		34 => 'http://wiki.media-box.net/documentation/flash/sharedobject/{FNAME}',
-		35 => 'http://wiki.media-box.net/documentation/flash/stage/{FNAME}',
-		36 => 'http://wiki.media-box.net/documentation/flash/string/{FNAME}',
-		37 => 'http://wiki.media-box.net/documentation/flash/system/capabilities/{FNAME}',
-		38 => 'http://wiki.media-box.net/documentation/flash/system/security/{FNAME}',
-		39 => 'http://wiki.media-box.net/documentation/flash/system/{FNAME}',
-		40 => 'http://wiki.media-box.net/documentation/flash/textfield/stylesheet/{FNAME}',
-		41 => 'http://wiki.media-box.net/documentation/flash/textfield/{FNAME}',
-		42 => 'http://wiki.media-box.net/documentation/flash/textformat/{FNAME}',
-		43 => 'http://wiki.media-box.net/documentation/flash/textsnapshot/{FNAME}',
-		44 => 'http://wiki.media-box.net/documentation/flash/tween/{FNAME}',
-		45 => 'http://wiki.media-box.net/documentation/flash/video/{FNAME}',
-		46 => 'http://wiki.media-box.net/documentation/flash/xml/{FNAME}',
-		47 => 'http://wiki.media-box.net/documentation/flash/xmlsocket/{FNAME}',
-		48 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
-		49 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
-		50 => 'http://wiki.media-box.net/documentation/flash/system/capabilities',
-		51 => 'http://wiki.media-box.net/documentation/flash/system/security',
-		52 => 'http://wiki.media-box.net/documentation/flash/textfield/stylesheet'
-		),
-	'OOLANG' => true,
-	'OBJECT_SPLITTERS' => array(
-		1 => '.'
-		),
-	'REGEXPS' => array(
-		),
-	'STRICT_MODE_APPLIES' => GESHI_NEVER,
-	'SCRIPT_DELIMITERS' => array(),
-	'HIGHLIGHT_STRICT_BLOCK' => array()
-);
-
-?>
diff --git a/inc/geshi/cobol.php b/inc/geshi/cobol.php
deleted file mode 100644
index b07be48a135efd1e7066e4842a2fc02f870d287c..0000000000000000000000000000000000000000
--- a/inc/geshi/cobol.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-/*************************************************************************************
- * cobol.php
- * ----------
- * Author: BenBE (BenBE@omorphia.org)
- * Copyright: (c) 2007-2008 BenBE (http://www.omorphia.de/)
- * Release Version: 1.0.8.11
- * Date Started: 2007/07/02
- *
- * COBOL language file for GeSHi.
- *
- * CHANGES
- * -------
- *
- * TODO (updated 2007/07/02)
- * -------------------------
- *
- *************************************************************************************
- *
- *     This file is part of GeSHi.
- *
- *   GeSHi 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.
- *
- *   GeSHi 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 GeSHi; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- ************************************************************************************/
-
-$language_data = array (
-    'LANG_NAME' => 'COBOL',
-    'COMMENT_SINGLE' => array(),
-    'COMMENT_MULTI' => array(),
-    'COMMENT_REGEXP' => array(1 => '/^\*.*?$/m'),
-    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
-    'QUOTEMARKS' => array('"', "'"),
-    'ESCAPE_CHAR' => '\\',
-    'NUMBERS' =>
-        GESHI_NUMBER_INT_BASIC |
-        GESHI_NUMBER_FLT_NONSCI |
-        GESHI_NUMBER_FLT_SCI_SHORT |
-        GESHI_NUMBER_FLT_SCI_ZERO,
-    'KEYWORDS' => array(
-        1 => array( //Compiler Directives
-            'ANSI', 'BLANK', 'NOBLANK', 'CALL-SHARED', 'CANCEL', 'NOCANCEL',
-            'CHECK', 'CODE', 'NOCODE', 'COLUMNS', 'COMPACT', 'NOCOMPACT',
-            'COMPILE', 'CONSULT', 'NOCONSULT', 'CROSSREF', 'NOCROSSREF',
-            'DIAGNOSE-74', 'NODIAGNOSE-74', 'DIAGNOSE-85', 'NODIAGNOSE-85',
-            'DIAGNOSEALL', 'NODIAGNOSEALL', 'ENDIF', 'ENDUNIT', 'ENV',
-            'ERRORFILE', 'ERRORS', 'FIPS', 'NOFIPS', 'FMAP', 'HEADING', 'HEAP',
-            'HIGHPIN', 'HIGHREQUESTERS', 'ICODE', 'NOICODE', 'IF', 'IFNOT',
-            'INNERLIST', 'NOINNERLIST', 'INSPECT', 'NOINSPECT', 'LARGEDATA',
-            'LD', 'LESS-CODE', 'LIBRARY', 'LINES', 'LIST', 'NOLIST', 'LMAP',
-            'NOLMAP', 'MAIN', 'MAP', 'NOMAP', 'NLD', 'NONSTOP', 'NON-SHARED',
-            'OPTIMIZE', 'PERFORM-TRACE', 'PORT', 'NOPORT', 'RESETTOG',
-            'RUNNABLE', 'RUNNAMED', 'SAVE', 'SAVEABEND', 'NOSAVEABEND',
-            'SEARCH', 'NOSEARCH', 'SECTION', 'SETTOG', 'SHARED', 'SHOWCOPY',
-            'NOSHOWCOPY', 'SHOWFILE', 'NOSHOWFILE', 'SOURCE', 'SQL', 'NOSQL',
-            'SQLMEM', 'SUBSET', 'SUBTYPE', 'SUPPRESS', 'NOSUPPRESS', 'SYMBOLS',
-            'NOSYMBOLS', 'SYNTAX', 'TANDEM', 'TRAP2', 'NOTRAP2', 'TRAP2-74',
-            'NOTRAP2-74', 'UL', 'WARN', 'NOWARN'
-            ),
-        2 => array( //Statement Keywords
-            'ACCEPT', 'ADD', 'TO', 'GIVING', 'CORRESPONDING', 'ALTER', 'CALL',
-            'CHECKPOINT', 'CLOSE', 'COMPUTE', 'CONTINUE', 'COPY',
-            'DELETE', 'DISPLAY', 'DIVIDE', 'INTO', 'REMAINDER', 'ENTER',
-            'COBOL', 'EVALUATE', 'EXIT', 'GO', 'INITIALIZE',
-            'TALLYING', 'REPLACING', 'CONVERTING', 'LOCKFILE', 'MERGE', 'MOVE',
-            'MULTIPLY', 'OPEN', 'PERFORM', 'TIMES',
-            'UNTIL', 'VARYING', 'RETURN',
-            ),
-        3 => array( //Reserved in some contexts
-            'ACCESS', 'ADDRESS', 'ADVANCING', 'AFTER', 'ALL',
-            'ALPHABET', 'ALPHABETIC', 'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER',
-            'ALPHANUMERIC', 'ALPHANUMERIC-EDITED', 'ALSO', 'ALTERNATE',
-            'AND', 'ANY', 'APPROXIMATE', 'AREA', 'AREAS', 'ASCENDING', 'ASSIGN',
-            'AT', 'AUTHOR', 'BEFORE', 'BINARY', 'BLOCK', 'BOTTOM', 'BY',
-            'CD', 'CF', 'CH', 'CHARACTER', 'CHARACTERS',
-            'CHARACTER-SET', 'CLASS', 'CLOCK-UNITS',
-            'CODE-SET', 'COLLATING', 'COLUMN', 'COMMA',
-            'COMMON', 'COMMUNICATION', 'COMP', 'COMP-3', 'COMP-5',
-            'COMPUTATIONAL', 'COMPUTATIONAL-3', 'COMPUTATIONAL-5',
-            'CONFIGURATION', 'CONTAINS', 'CONTENT', 'CONTROL',
-            'CONTROLS', 'CORR', 'COUNT',
-            'CURRENCY', 'DATA', 'DATE', 'DATE-COMPILED', 'DATE-WRITTEN', 'DAY',
-            'DAY-OF-WEEK', 'DE', 'DEBUG-CONTENTS', 'DEBUG-ITEM', 'DEBUG-LINE',
-            'DEBUG-SUB-2', 'DEBUG-SUB-3', 'DEBUGGING', 'DECIMAL-POINT',
-            'DECLARATIVES', 'DEBUG-NAME', 'DEBUG-SUB-1', 'DELIMITED',
-            'DELIMITER', 'DEPENDING', 'DESCENDING', 'DESTINATION', 'DETAIL',
-            'DISABLE', 'DIVISION', 'DOWN', 'DUPLICATES',
-            'DYNAMIC', 'EGI', 'ELSE', 'EMI', 'ENABLE', 'END', 'END-ADD',
-            'END-COMPUTE', 'END-DELETE', 'END-DIVIDE', 'END-EVALUATE', 'END-IF',
-            'END-MULTIPLY', 'END-OF-PAGE', 'END-PERFORM', 'END-READ',
-            'END-RECEIVE', 'END-RETURN', 'END-REWRITE', 'END-SEARCH',
-            'END-START', 'END-STRING', 'END-SUBTRACT', 'END-UNSTRING',
-            'END-WRITE', 'EOP', 'EQUAL', 'ERROR', 'ESI',
-            'EVERY', 'EXCEPTION', 'EXCLUSIVE', 'EXTEND',
-            'EXTENDED-STORAGE', 'EXTERNAL', 'FALSE', 'FD', 'FILE',
-            'FILE-CONTROL', 'FILLER', 'FINAL', 'FIRST', 'FOOTING', 'FOR',
-            'FROM', 'FUNCTION', 'GENERATE', 'GENERIC', 'GLOBAL',
-            'GREATER', 'GROUP', 'GUARDIAN-ERR', 'HIGH-VALUE',
-            'HIGH-VALUES', 'I-O', 'I-O-CONTROL', 'IDENTIFICATION', 'IN',
-            'INDEX', 'INDEXED', 'INDICATE', 'INITIAL', 'INITIATE',
-            'INPUT', 'INPUT-OUTPUT', 'INSTALLATION',
-            'INVALID', 'IS', 'JUST', 'JUSTIFIED', 'KEY', 'LABEL', 'LAST',
-            'LEADING', 'LEFT', 'LESS', 'LIMIT', 'LIMITS', 'LINAGE',
-            'LINAGE-COUNTER', 'LINE', 'LINE-COUNTER', 'LINKAGE', 'LOCK',
-            'LOW-VALUE', 'LOW-VALUES', 'MEMORY', 'MESSAGE',
-            'MODE', 'MODULES', 'MULTIPLE', 'NATIVE',
-            'NEGATIVE', 'NEXT', 'NO', 'NOT', 'NULL', 'NULLS', 'NUMBER',
-            'NUMERIC', 'NUMERIC-EDITED', 'OBJECT-COMPUTER', 'OCCURS', 'OF',
-            'OFF', 'OMITTED', 'ON', 'OPTIONAL', 'OR', 'ORDER',
-            'ORGANIZATION', 'OTHER', 'OUTPUT', 'OVERFLOW', 'PACKED-DECIMAL',
-            'PADDING', 'PAGE', 'PAGE-COUNTER', 'PF', 'PH', 'PIC',
-            'PICTURE', 'PLUS', 'POINTER', 'POSITION', 'POSITIVE', 'PRINTING',
-            'PROCEDURE', 'PROCEDURES', 'PROCEED', 'PROGRAM', 'PROGRAM-ID',
-            'PROGRAM-STATUS', 'PROGRAM-STATUS-1', 'PROGRAM-STATUS-2', 'PROMPT',
-            'PROTECTED', 'PURGE', 'QUEUE', 'QUOTE', 'QUOTES', 'RD',
-            'RECEIVE', 'RECEIVE-CONTROL', 'RECORD', 'RECORDS',
-            'REDEFINES', 'REEL', 'REFERENCE', 'REFERENCES', 'RELATIVE',
-            'REMOVAL', 'RENAMES', 'REPLACE',
-            'REPLY', 'REPORT', 'REPORTING', 'REPORTS', 'RERUN',
-            'RESERVE', 'RESET', 'REVERSED', 'REWIND', 'REWRITE', 'RF',
-            'RH', 'RIGHT', 'ROUNDED', 'RUN', 'SAME', 'SD',
-            'SECURITY', 'SEGMENT', 'SEGMENT-LIMIT', 'SELECT', 'SEND',
-            'SENTENCE', 'SEPARATE', 'SEQUENCE', 'SEQUENTIAL', 'SET',
-            'SIGN', 'SIZE', 'SORT', 'SORT-MERGE', 'SOURCE-COMPUTER',
-            'SPACE', 'SPACES', 'SPECIAL-NAMES', 'STANDARD', 'STANDARD-1',
-            'STANDARD-2', 'START', 'STARTBACKUP', 'STATUS', 'STOP', 'STRING',
-            'SUB-QUEUE-1', 'SUB-QUEUE-2', 'SUB-QUEUE-3', 'SUBTRACT',
-            'SYMBOLIC', 'SYNC', 'SYNCDEPTH', 'SYNCHRONIZED',
-            'TABLE', 'TAL', 'TAPE', 'TERMINAL', 'TERMINATE', 'TEST',
-            'TEXT', 'THAN', 'THEN', 'THROUGH', 'THRU', 'TIME',
-            'TOP', 'TRAILING', 'TRUE', 'TYPE', 'UNIT', 'UNLOCK', 'UNLOCKFILE',
-            'UNLOCKRECORD', 'UNSTRING', 'UP', 'UPON', 'USAGE', 'USE',
-            'USING', 'VALUE', 'VALUES', 'WHEN', 'WITH', 'WORDS',
-            'WORKING-STORAGE', 'WRITE', 'ZERO', 'ZEROES'
-            ),
-        4 => array( //Standard functions
-            'ACOS', 'ANNUITY', 'ASIN', 'ATAN', 'CHAR', 'COS', 'CURRENT-DATE',
-            'DATE-OF-INTEGER', 'DAY-OF-INTEGER', 'FACTORIAL', 'INTEGER',
-            'INTEGER-OF-DATE', 'INTEGER-OF-DAY', 'INTEGER-PART', 'LENGTH',
-            'LOG', 'LOG10', 'LOWER-CASE', 'MAX', 'MEAN', 'MEDIAN', 'MIDRANGE',
-            'MIN', 'MOD', 'NUMVAL', 'NUMVAL-C', 'ORD', 'ORD-MAX', 'ORD-MIN',
-            'PRESENT-VALUE', 'RANDOM', 'RANGE', 'REM', 'REVERSE', 'SIN', 'SQRT',
-            'STANDARD-DEVIATION', 'SUM', 'TAN', 'UPPER-CASE', 'VARIANCE',
-            'WHEN-COMPILED'
-            ),
-        5 => array( //Privileged Built-in Functions
-            '#IN', '#OUT', '#TERM', '#TEMP', '#DYNAMIC', 'COBOL85^ARMTRAP',
-            'COBOL85^COMPLETION', 'COBOL_COMPLETION_', 'COBOL_CONTROL_',
-            'COBOL_GETENV_', 'COBOL_PUTENV_', 'COBOL85^RETURN^SORT^ERRORS',
-            'COBOL_RETURN_SORT_ERRORS_', 'COBOL85^REWIND^SEQUENTIAL',
-            'COBOL_REWIND_SEQUENTIAL_', 'COBOL85^SET^SORT^PARAM^TEXT',
-            'COBOL_SET_SORT_PARAM_TEXT_', 'COBOL85^SET^SORT^PARAM^VALUE',
-            'COBOL_SET_SORT_PARAM_VALUE_', 'COBOL_SET_MAX_RECORD_',
-            'COBOL_SETMODE_', 'COBOL85^SPECIAL^OPEN', 'COBOL_SPECIAL_OPEN_',
-            'COBOLASSIGN', 'COBOL_ASSIGN_', 'COBOLFILEINFO', 'COBOL_FILE_INFO_',
-            'COBOLSPOOLOPEN', 'CREATEPROCESS', 'ALTERPARAMTEXT',
-            'CHECKLOGICALNAME', 'CHECKMESSAGE', 'DELETEASSIGN', 'DELETEPARAM',
-            'DELETESTARTUP', 'GETASSIGNTEXT', 'GETASSIGNVALUE', 'GETBACKUPCPU',
-            'GETPARAMTEXT', 'GETSTARTUPTEXT', 'PUTASSIGNTEXT', 'PUTASSIGNVALUE',
-            'PUTPARAMTEXT', 'PUTSTARTUPTEXT'
-            )
-        ),
-    'SYMBOLS' => array(
-        //Avoid having - in identifiers marked as symbols
-        ' + ', ' - ', ' * ', ' / ', ' ** ',
-        '.', ',',
-        '=',
-        '(', ')', '[', ']'
-        ),
-    'CASE_SENSITIVE' => array(
-        GESHI_COMMENTS => false,
-        1 => false,
-        2 => false,
-        3 => false,
-        4 => false,
-        5 => false
-        ),
-    'STYLES' => array(
-        'KEYWORDS' => array(
-            1 => 'color: #000080; font-weight: bold;',
-            2 => 'color: #000000; font-weight: bold;',
-            3 => 'color: #008000; font-weight: bold;',
-            4 => 'color: #000080;',
-            5 => 'color: #008000;',
-            ),
-        'COMMENTS' => array(
-            1 => 'color: #a0a0a0; font-style: italic;',
-            'MULTI' => 'color: #a0a0a0; font-style: italic;'
-            ),
-        'ESCAPE_CHAR' => array(
-            0 => 'color: #000099; font-weight: bold;'
-            ),
-        'BRACKETS' => array(
-            0 => 'color: #339933;'
-            ),
-        'STRINGS' => array(
-            0 => 'color: #ff0000;'
-            ),
-        'NUMBERS' => array(
-            0 => 'color: #993399;'
-            ),
-        'METHODS' => array(
-            1 => 'color: #202020;'
-            ),
-        'SYMBOLS' => array(
-            0 => 'color: #000066;'
-            ),
-        'REGEXPS' => array(
-            ),
-        'SCRIPT' => array(
-            )
-        ),
-    'URLS' => array(
-        1 => '',
-        2 => '',
-        3 => '',
-        4 => '',
-        5 => ''
-        ),
-    'OOLANG' => false,
-    'OBJECT_SPLITTERS' => array(
-        ),
-    'REGEXPS' => array(
-        ),
-    'STRICT_MODE_APPLIES' => GESHI_NEVER,
-    'SCRIPT_DELIMITERS' => array(
-        ),
-    'HIGHLIGHT_STRICT_BLOCK' => array(
-        ),
-    'TAB_WIDTH' => 4
-    );
-
-?>
diff --git a/inc/geshi/parigp.php b/inc/geshi/parigp.php
deleted file mode 100644
index c9c73095bdcf0c3adc7d10aa2536e9b04d593519..0000000000000000000000000000000000000000
--- a/inc/geshi/parigp.php
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php
-/*************************************************************************************
- * parigp.php
- * --------
- * Author: Charles R Greathouse IV (charles@crg4.com)
- * Copyright: 2011 Charles R Greathouse IV (http://math.crg4.com/)
- * Release Version: 1.0.8.11
- * Date Started: 2011/05/11
- *
- * PARI/GP language file for GeSHi.
- *
- * CHANGES
- * -------
- * 2011/07/09 (1.0.8.11)
- *  -  First Release
- *
- * TODO (updated 2011/07/09)
- * -------------------------
- *
- *
- *************************************************************************************
- *
- *     This file is part of GeSHi.
- *
- *   GeSHi 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.
- *
- *   GeSHi 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 GeSHi; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- ************************************************************************************/
-
-$language_data = array(
-    'LANG_NAME' => 'PARI/GP',
-    'COMMENT_SINGLE' => array(1 => '\\\\'),
-    'COMMENT_MULTI' => array('/*' => '*/'),
-    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
-    'QUOTEMARKS' => array('"'),
-    'ESCAPE_CHAR' => '\\',
-    'NUMBERS' => array(
-        # Integers
-        1 => GESHI_NUMBER_INT_BASIC,
-        # Reals
-        2 => GESHI_NUMBER_FLT_SCI_ZERO
-        ),
-    'KEYWORDS' => array(
-        1 => array(
-            'addprimes','bestappr','bezout','bezoutres','bigomega','binomial',
-            'chinese','content','contfrac','contfracpnqn','core','coredisc',
-            'dirdiv','direuler','dirmul','divisors','eulerphi','factor',
-            'factorback','factorcantor','factorff','factorial','factorint',
-            'factormod','ffgen','ffinit','fflog','fforder','ffprimroot',
-            'fibonacci','gcd','hilbert','isfundamental','ispower','isprime',
-            'ispseudoprime','issquare','issquarefree','kronecker','lcm',
-            'moebius','nextprime','numbpart','numdiv','omega','partitions',
-            'polrootsff','precprime','prime','primepi','primes','qfbclassno',
-            'qfbcompraw','qfbhclassno','qfbnucomp','qfbnupow','qfbpowraw',
-            'qfbprimeform','qfbred','qfbsolve','quadclassunit','quaddisc',
-            'quadgen','quadhilbert','quadpoly','quadray','quadregulator',
-            'quadunit','removeprimes','sigma','sqrtint','stirling',
-            'sumdedekind','zncoppersmith','znlog','znorder','znprimroot',
-            'znstar','Col','List','Mat','Mod','Pol','Polrev','Qfb','Ser','Set',
-            'Str','Strchr','Strexpand','Strtex','Vec','Vecrev','Vecsmall',
-            'binary','bitand','bitneg','bitnegimply','bitor','bittest','bitxor',
-            'ceil','centerlift','component','conj','conjvec','denominator',
-            'floor','frac','imag','length','lift','norm','norml2','numerator',
-            'numtoperm','padicprec','permtonum','precision','random','real',
-            'round','simplify','sizebyte','sizedigit','truncate','valuation',
-            'variable','ellL1','elladd','ellak','ellan','ellanalyticrank',
-            'ellap','ellbil','ellchangecurve','ellchangepoint','ellconvertname',
-            'elldivpol','elleisnum','elleta','ellgenerators','ellglobalred',
-            'ellgroup','ellheight','ellheightmatrix','ellidentify','ellinit',
-            'ellisoncurve','ellj','elllocalred','elllog','elllseries',
-            'ellminimalmodel','ellmodulareqn','ellorder','ellordinate',
-            'ellpointtoz','ellpow','ellrootno','ellsearch','ellsigma','ellsub',
-            'elltaniyama','elltatepairing','elltors','ellweilpairing','ellwp',
-            'ellzeta','ellztopoint','bnfcertify','bnfcompress',
-            'bnfdecodemodule','bnfinit','bnfisintnorm','bnfisnorm',
-            'bnfisprincipal','bnfissunit','bnfisunit','bnfnarrow','bnfsignunit',
-            'bnfsunit','bnrL1','bnrclassno','bnrclassnolist','bnrconductor',
-            'bnrconductorofchar','bnrdisc','bnrdisclist','bnrinit',
-            'bnrisconductor','bnrisprincipal','bnrrootnumber','bnrstark',
-            'dirzetak','factornf','galoisexport','galoisfixedfield',
-            'galoisgetpol','galoisidentify','galoisinit','galoisisabelian',
-            'galoisisnormal','galoispermtopol','galoissubcyclo',
-            'galoissubfields','galoissubgroups','idealadd','idealaddtoone',
-            'idealappr','idealchinese','idealcoprime','idealdiv','idealfactor',
-            'idealfactorback','idealfrobenius','idealhnf','idealintersect',
-            'idealinv','ideallist','ideallistarch','ideallog','idealmin',
-            'idealmul','idealnorm','idealpow','idealprimedec','idealramgroups',
-            'idealred','idealstar','idealtwoelt','idealval','matalgtobasis',
-            'matbasistoalg','modreverse','newtonpoly','nfalgtobasis','nfbasis',
-            'nfbasistoalg','nfdetint','nfdisc','nfeltadd','nfeltdiv',
-            'nfeltdiveuc','nfeltdivmodpr','nfeltdivrem','nfeltmod','nfeltmul',
-            'nfeltmulmodpr','nfeltnorm','nfeltpow','nfeltpowmodpr',
-            'nfeltreduce','nfeltreducemodpr','nfelttrace','nfeltval','nffactor',
-            'nffactorback','nffactormod','nfgaloisapply','nfgaloisconj',
-            'nfhilbert','nfhnf','nfhnfmod','nfinit','nfisideal','nfisincl',
-            'nfisisom','nfkermodpr','nfmodprinit','nfnewprec','nfroots',
-            'nfrootsof1','nfsnf','nfsolvemodpr','nfsubfields','polcompositum',
-            'polgalois','polred','polredabs','polredord','poltschirnhaus',
-            'rnfalgtobasis','rnfbasis','rnfbasistoalg','rnfcharpoly',
-            'rnfconductor','rnfdedekind','rnfdet','rnfdisc','rnfeltabstorel',
-            'rnfeltdown','rnfeltreltoabs','rnfeltup','rnfequation',
-            'rnfhnfbasis','rnfidealabstorel','rnfidealdown','rnfidealhnf',
-            'rnfidealmul','rnfidealnormabs','rnfidealnormrel',
-            'rnfidealreltoabs','rnfidealtwoelt','rnfidealup','rnfinit',
-            'rnfisabelian','rnfisfree','rnfisnorm','rnfisnorminit','rnfkummer',
-            'rnflllgram','rnfnormgroup','rnfpolred','rnfpolredabs',
-            'rnfpseudobasis','rnfsteinitz','subgrouplist','zetak','zetakinit',
-            'plot','plotbox','plotclip','plotcolor','plotcopy','plotcursor',
-            'plotdraw','ploth','plothraw','plothsizes','plotinit','plotkill',
-            'plotlines','plotlinetype','plotmove','plotpoints','plotpointsize',
-            'plotpointtype','plotrbox','plotrecth','plotrecthraw','plotrline',
-            'plotrmove','plotrpoint','plotscale','plotstring','psdraw',
-            'psploth','psplothraw','O','deriv','diffop','eval','factorpadic',
-            'intformal','padicappr','padicfields','polchebyshev','polcoeff',
-            'polcyclo','poldegree','poldisc','poldiscreduced','polhensellift',
-            'polhermite','polinterpolate','polisirreducible','pollead',
-            'pollegendre','polrecip','polresultant','polroots','polrootsmod',
-            'polrootspadic','polsturm','polsubcyclo','polsylvestermatrix',
-            'polsym','poltchebi','polzagier','serconvol','serlaplace',
-            'serreverse','subst','substpol','substvec','taylor','thue',
-            'thueinit','break','for','fordiv','forell','forprime','forstep',
-            'forsubgroup','forvec','if','next','return','until','while',
-            'Strprintf','addhelp','alarm','alias','allocatemem','apply',
-            'default','error','extern','externstr','getheap','getrand',
-            'getstack','gettime','global','input','install','kill','print1',
-            'print','printf','printtex','quit','read','readvec','select',
-            'setrand','system','trap','type','version','warning','whatnow',
-            'write1','write','writebin','writetex','divrem','lex','max','min',
-            'shift','shiftmul','sign','vecmax','vecmin','derivnum','intcirc',
-            'intfouriercos','intfourierexp','intfouriersin','intfuncinit',
-            'intlaplaceinv','intmellininv','intmellininvshort','intnum',
-            'intnuminit','intnuminitgen','intnumromb','intnumstep','prod',
-            'prodeuler','prodinf','solve','sum','sumalt','sumdiv','suminf',
-            'sumnum','sumnumalt','sumnuminit','sumpos','Euler','I','Pi','abs',
-            'acos','acosh','agm','arg','asin','asinh','atan','atanh','bernfrac',
-            'bernreal','bernvec','besselh1','besselh2','besseli','besselj',
-            'besseljh','besselk','besseln','cos','cosh','cotan','dilog','eint1',
-            'erfc','eta','exp','gamma','gammah','hyperu','incgam','incgamc',
-            'lngamma','log','polylog','psi','sin','sinh','sqr','sqrt','sqrtn',
-            'tan','tanh','teichmuller','theta','thetanullk','weber','zeta',
-            'algdep','charpoly','concat','lindep','listcreate','listinsert',
-            'listkill','listpop','listput','listsort','matadjoint',
-            'matcompanion','matdet','matdetint','matdiagonal','mateigen',
-            'matfrobenius','mathess','mathilbert','mathnf','mathnfmod',
-            'mathnfmodid','matid','matimage','matimagecompl','matindexrank',
-            'matintersect','matinverseimage','matisdiagonal','matker',
-            'matkerint','matmuldiagonal','matmultodiagonal','matpascal',
-            'matrank','matrix','matrixqz','matsize','matsnf','matsolve',
-            'matsolvemod','matsupplement','mattranspose','minpoly','qfgaussred',
-            'qfjacobi','qflll','qflllgram','qfminim','qfperfection','qfrep',
-            'qfsign','setintersect','setisset','setminus','setsearch','cmp',
-            'setunion','trace','vecextract','vecsort','vector','vectorsmall',
-            'vectorv','ellheegner'
-            ),
-
-        2 => array(
-            'void','bool','negbool','small','int',/*'real',*/'mp','var','lg','pol',
-            'vecsmall','vec','list','str','genstr','gen','typ'
-            ),
-
-        3 => array(
-            'TeXstyle','breakloop','colors','compatible','datadir','debug',
-            'debugfiles','debugmem','echo','factor_add_primes','factor_proven',
-            'format','graphcolormap','graphcolors','help','histfile','histsize',
-            'lines','linewrap',/*'log',*/'logfile','new_galois_format','output',
-            'parisize','path','prettyprinter','primelimit','prompt_cont',
-            'prompt','psfile','readline','realprecision','recover','secure',
-            'seriesprecision',/*'simplify',*/'strictmatch','timer'
-            ),
-
-        4 => array(
-            'alarmer','archer','errpile','gdiver','impl','syntaxer','invmoder',
-            'overflower','talker','typeer','user'
-            )
-        ),
-    'SYMBOLS' => array(
-        1 => array(
-            '(',')','{','}','[',']','+','-','*','/','%','=','<','>','!','^','&','|','?',';',':',',','\\','\''
-            )
-        ),
-    'CASE_SENSITIVE' => array(
-        GESHI_COMMENTS => false,
-        1 => true,
-        2 => true,
-        3 => true,
-        4 => true
-        ),
-    'STYLES' => array(
-        'KEYWORDS' => array(
-            1 => 'color: #0000ff;',
-            2 => 'color: #e07022;',
-            3 => 'color: #00d2d2;',
-            4 => 'color: #00d2d2;'
-            ),
-        'COMMENTS' => array(
-            1 => 'color: #008000;',
-            'MULTI' => 'color: #008000;'
-            ),
-        'ESCAPE_CHAR' => array(
-            0 => 'color: #111111; font-weight: bold;'
-            ),
-        'BRACKETS' => array(
-            0 => 'color: #002222;'
-            ),
-        'STRINGS' => array(
-            0 => 'color: #800080;'
-            ),
-        'NUMBERS' => array(
-            0 => 'color: #666666;',
-            1 => 'color: #666666;',
-            2 => 'color: #666666;'
-            ),
-        'METHODS' => array(
-            0 => 'color: #004000;'
-            ),
-        'SYMBOLS' => array(
-            1 => 'color: #339933;'
-            ),
-        'REGEXPS' => array(
-            0 => 'color: #e07022',    # Should be the same as keyword group 2
-            1 => 'color: #555555'
-            ),
-        'SCRIPT' => array()
-        ),
-    'URLS' => array(
-        1 => '',
-        2 => '',
-        3 => '',
-        4 => ''
-        ),
-    'OOLANG' => true,
-    'OBJECT_SPLITTERS' => array(
-        1 => '.'
-        ),
-    'REGEXPS' => array(
-        0 => array( # types marked on variables
-            GESHI_SEARCH => '(?<!\\\\ )"(t_(?:INT|REAL|INTMOD|FRAC|FFELT|COMPLEX|PADIC|QUAD|POLMOD|POL|SER|RFRAC|QFR|QFI|VEC|COL|MAT|LIST|STR|VECSMALL|CLOSURE))"',
-            GESHI_REPLACE => '\\1',
-            GESHI_MODIFIERS => '',
-            GESHI_BEFORE => '"',
-            GESHI_AFTER => '"'
-            ),
-        1 => array( # literal variables
-            GESHI_SEARCH => '(?<!\\\\)(\'[a-zA-Z][a-zA-Z0-9_]*)',
-            GESHI_REPLACE => '\\1',
-            GESHI_MODIFIERS => '',
-            GESHI_BEFORE => '',
-            GESHI_AFTER => ''
-            )
-        ),
-    'STRICT_MODE_APPLIES' => GESHI_NEVER,
-    'SCRIPT_DELIMITERS' => array(
-        2 => array(
-            '[a-zA-Z][a-zA-Z0-9_]*:' => ''
-            ),
-        3 => array(
-            'default(' => ''
-            ),
-        4 => array(
-            'trap(' => ''
-            ),
-        ),
-    'HIGHLIGHT_STRICT_BLOCK' => array()
-);
-
-?>
diff --git a/inc/html.php b/inc/html.php
index ffa1d489f151fd8264481f079392fa4a04628667..b1cc13c8d09269912efaf48b93f746821bff6c29 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -74,7 +74,7 @@ function html_login(){
 function html_denied() {
     print p_locale_xhtml('denied');
 
-    if(!$_SERVER['REMOTE_USER']){
+    if(empty($_SERVER['REMOTE_USER'])){
         html_login();
     }
 }
@@ -183,7 +183,7 @@ function html_topbtn(){
  * @param bool|string    $label  label text, false: lookup btn_$name in localization
  * @return string
  */
-function html_btn($name,$id,$akey,$params,$method='get',$tooltip='',$label=false){
+function html_btn($name, $id, $akey, $params, $method='get', $tooltip='', $label=false){
     global $conf;
     global $lang;
 
@@ -221,17 +221,26 @@ function html_btn($name,$id,$akey,$params,$method='get',$tooltip='',$label=false
         $tip = htmlspecialchars($label);
     }
 
-    $ret .= '<input type="submit" value="'.hsc($label).'" class="button" ';
+    $ret .= '<button type="submit" ';
     if($akey){
         $tip .= ' ['.strtoupper($akey).']';
         $ret .= 'accesskey="'.$akey.'" ';
     }
-    $ret .= 'title="'.$tip.'" ';
-    $ret .= '/>';
+    $ret .= 'title="'.$tip.'">';
+    $ret .= hsc($label);
+    $ret .= '</button>';
     $ret .= '</div></form>';
 
     return $ret;
 }
+/**
+ * show a revision warning
+ *
+ * @author Szymon Olewniczak <dokuwiki@imz.re>
+ */
+function html_showrev() {
+    print p_locale_xhtml('showrev');
+}
 
 /**
  * Show a wiki page
@@ -265,7 +274,10 @@ function html_show($txt=null){
         echo '</div></div>';
 
     }else{
-        if ($REV||$DATE_AT) print p_locale_xhtml('showrev');
+        if ($REV||$DATE_AT){
+            $data = array('rev' => &$REV, 'date_at' => &$DATE_AT);
+            trigger_event('HTML_SHOWREV_OUTPUT', $data, 'html_showrev');
+        }
         $html = p_wiki_xhtml($ID,$REV,true,$DATE_AT);
         $html = html_secedit($html,$secedit);
         if($INFO['prependTOC']) $html = tpl_toc(true).$html;
@@ -765,10 +777,16 @@ function html_recent($first=0, $show_changes='both'){
         $href = '';
 
         if (!empty($recent['media'])) {
-            $diff = (count(getRevisions($recent['id'], 0, 1, 8192, true)) && file_exists(mediaFN($recent['id'])));
+            $changelog = new MediaChangeLog($recent['id']);
+            $revs = $changelog->getRevisions(0, 1);
+            $diff = (count($revs) && file_exists(mediaFN($recent['id'])));
             if ($diff) {
-                $href = media_managerURL(array('tab_details' => 'history',
-                    'mediado' => 'diff', 'image' => $recent['id'], 'ns' => getNS($recent['id'])), '&');
+                $href = media_managerURL(array(
+                                             'tab_details' => 'history',
+                                             'mediado' => 'diff',
+                                             'image' => $recent['id'],
+                                             'ns' => getNS($recent['id'])
+                                         ), '&');
             }
         } else {
             $href = wl($recent['id'],"do=diff", false, '&');
@@ -839,26 +857,28 @@ function html_recent($first=0, $show_changes='both'){
         $first -= $conf['recent'];
         if ($first < 0) $first = 0;
         $form->addElement(form_makeOpenTag('div', array('class' => 'pagenav-prev')));
-        $form->addElement(form_makeTag('input', array(
+        $form->addElement(form_makeOpenTag('button', array(
                     'type'  => 'submit',
                     'name'  => 'first['.$first.']',
-                    'value' => $lang['btn_newer'],
                     'accesskey' => 'n',
                     'title' => $lang['btn_newer'].' [N]',
                     'class' => 'button show'
                     )));
+        $form->addElement($lang['btn_newer']);
+        $form->addElement(form_makeCloseTag('button'));
         $form->addElement(form_makeCloseTag('div'));
     }
     if ($hasNext) {
         $form->addElement(form_makeOpenTag('div', array('class' => 'pagenav-next')));
-        $form->addElement(form_makeTag('input', array(
+        $form->addElement(form_makeOpenTag('button', array(
                         'type'  => 'submit',
                         'name'  => 'first['.$last.']',
-                        'value' => $lang['btn_older'],
                         'accesskey' => 'p',
                         'title' => $lang['btn_older'].' [P]',
                         'class' => 'button show'
                         )));
+        $form->addElement($lang['btn_older']);
+        $form->addElement(form_makeCloseTag('button'));
         $form->addElement(form_makeCloseTag('div'));
     }
     $form->addElement(form_makeCloseTag('div'));
@@ -937,13 +957,14 @@ function html_list_index($item){
  */
 function html_li_index($item){
     global $INFO;
+    global $ACT;
 
     $class = '';
     $id = '';
 
     if($item['type'] == "f"){
         // scroll to the current item
-        if($item['id'] == $INFO['id']) {
+        if($item['id'] == $INFO['id'] && $ACT == 'index') {
             $id = ' id="scroll__here"';
             $class = ' bounce';
         }
@@ -987,7 +1008,7 @@ function html_li_default($item){
  * @param callable $func  callback to print an list item
  * @param callable $lifunc callback to the opening li tag
  * @param bool     $forcewrapper Trigger building a wrapper ul if the first level is
-                                 0 (we have a root object) or 1 (just the root content)
+ *                               0 (we have a root object) or 1 (just the root content)
  * @return string html of an unordered list
  */
 function html_buildlist($data,$class,$func,$lifunc='html_li_default',$forcewrapper=false){
@@ -1391,7 +1412,13 @@ function html_diff_navigation($pagelog, $type, $l_rev, $r_rev) {
 
     // last timestamp is not in changelog, retrieve timestamp from metadata
     // note: when page is removed, the metadata timestamp is zero
-    $r_rev = $r_rev ? $r_rev : $INFO['meta']['last_change']['date'];
+    if(!$r_rev) {
+        if(isset($INFO['meta']['last_change']['date'])) {
+            $r_rev = $INFO['meta']['last_change']['date'];
+        } else {
+            $r_rev = 0;
+        }
+    }
 
     //retrieve revisions with additional info
     list($l_revs, $r_revs) = $pagelog->getRevisionsAround($l_rev, $r_rev);
@@ -2052,6 +2079,13 @@ function html_admin(){
                     $menu['config']['prompt'].'</a></div></li>');
         }
         unset($menu['config']);
+
+        if($menu['styling']){
+            ptln('  <li class="admin_styling"><div class="li">'.
+                '<a href="'.wl($ID, array('do' => 'admin','page' => 'styling')).'">'.
+                $menu['styling']['prompt'].'</a></div></li>');
+        }
+        unset($menu['styling']);
     }
     ptln('</ul>');
 
@@ -2080,7 +2114,17 @@ function html_admin(){
 
     // print the rest as sorted list
     if(count($menu)){
-        usort($menu, 'p_sort_modes');
+        // sort by name, then sort
+        usort(
+            $menu,
+            function ($a, $b) {
+                $strcmp = strcasecmp($a['prompt'], $b['prompt']);
+                if($strcmp != 0) return $strcmp;
+                if($a['sort'] == $b['sort']) return 0;
+                return ($a['sort'] < $b['sort']) ? -1 : 1;
+            }
+        );
+
         // output the menu
         ptln('<div class="clearer"></div>');
         print p_locale_xhtml('adminplugins');
diff --git a/inc/httputils.php b/inc/httputils.php
index ac79aa1768cb4358b2558401ec8625f8fd379f1d..c365f4f5ca8bc8d2bf1a892dadb0066eb0ef1caa 100644
--- a/inc/httputils.php
+++ b/inc/httputils.php
@@ -197,6 +197,8 @@ function http_rangeRequest($fh,$size,$mime){
  * @return bool
  */
 function http_gzip_valid($uncompressed_file) {
+    if(!DOKU_HAS_GZIP) return false;
+
     $gzip = $uncompressed_file.'.gz';
     if (filemtime($gzip) < filemtime($uncompressed_file)) {    // filemtime returns false (0) if file doesn't exist
         return copy($uncompressed_file, 'compress.zlib://'.$gzip);
@@ -252,10 +254,10 @@ function http_cached_finish($file, $content) {
 
     // save cache file
     io_saveFile($file, $content);
-    if(function_exists('gzopen')) io_saveFile("$file.gz",$content);
+    if(DOKU_HAS_GZIP) io_saveFile("$file.gz",$content);
 
     // finally send output
-    if ($conf['gzip_output']) {
+    if ($conf['gzip_output'] && DOKU_HAS_GZIP) {
         header('Vary: Accept-Encoding');
         header('Content-Encoding: gzip');
         print gzencode($content,9,FORCE_GZIP);
diff --git a/inc/init.php b/inc/init.php
index 91bc77f981cc1527e68f4b67438c060c7e9bdbf8..c7a17948950d87cf02291d9905efa13d6ce7242e 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -191,13 +191,16 @@ global $plugin_controller_class, $plugin_controller;
 if (empty($plugin_controller_class)) $plugin_controller_class = 'Doku_Plugin_Controller';
 
 // load libraries
+require_once(DOKU_INC.'vendor/autoload.php');
 require_once(DOKU_INC.'inc/load.php');
 
 // disable gzip if not available
-if($conf['compression'] == 'bz2' && !function_exists('bzopen')){
+define('DOKU_HAS_BZIP', function_exists('bzopen'));
+define('DOKU_HAS_GZIP', function_exists('gzopen'));
+if($conf['compression'] == 'bz2' && !DOKU_HAS_BZIP) {
     $conf['compression'] = 'gz';
 }
-if($conf['compression'] == 'gz' && !function_exists('gzopen')){
+if($conf['compression'] == 'gz' && !DOKU_HAS_GZIP) {
     $conf['compression'] = 0;
 }
 
@@ -535,7 +538,7 @@ function nice_die($msg){
 </body>
 </html>
 EOT;
-    exit;
+    exit(1);
 }
 
 /**
diff --git a/inc/io.php b/inc/io.php
index 3ed2271622f5b5e86ae33d48d62e01c47331c3a1..066030c89a5dc339bb62861df7f23cab17c7df5f 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -101,20 +101,24 @@ function _io_readWikiPage_action($data) {
  *
  * @param string $file  filename
  * @param bool   $clean
- * @return string
+ * @return string|bool the file contents or false on error
  */
 function io_readFile($file,$clean=true){
     $ret = '';
     if(file_exists($file)){
         if(substr($file,-3) == '.gz'){
-            $ret = join('',gzfile($file));
+            if(!DOKU_HAS_GZIP) return false;
+            $ret = gzfile($file);
+            if(is_array($ret)) $ret = join('', $ret);
         }else if(substr($file,-4) == '.bz2'){
+            if(!DOKU_HAS_BZIP) return false;
             $ret = bzfile($file);
         }else{
             $ret = file_get_contents($file);
         }
     }
-    if($clean){
+    if($ret === null) return false;
+    if($ret !== false && $clean){
         return cleanText($ret);
     }else{
         return $ret;
@@ -124,22 +128,42 @@ function io_readFile($file,$clean=true){
  * Returns the content of a .bz2 compressed file as string
  *
  * @author marcel senf <marcel@rucksackreinigung.de>
+ * @author  Andreas Gohr <andi@splitbrain.org>
  *
  * @param string $file filename
- * @return string content
+ * @param bool   $array return array of lines
+ * @return string|array|bool content or false on error
  */
-function bzfile($file){
+function bzfile($file, $array=false) {
     $bz = bzopen($file,"r");
+    if($bz === false) return false;
+
+    if($array) $lines = array();
     $str = '';
-    while (!feof($bz)){
+    while (!feof($bz)) {
         //8192 seems to be the maximum buffersize?
-        $str = $str . bzread($bz,8192);
+        $buffer = bzread($bz,8192);
+        if(($buffer === false) || (bzerrno($bz) !== 0)) {
+            return false;
+        }
+        $str = $str . $buffer;
+        if($array) {
+            $pos = strpos($str, "\n");
+            while($pos !== false) {
+                $lines[] = substr($str, 0, $pos+1);
+                $str = substr($str, $pos+1);
+                $pos = strpos($str, "\n");
+            }
+        }
     }
     bzclose($bz);
+    if($array) {
+        if($str !== '') $lines[] = $str;
+        return $lines;
+    }
     return $str;
 }
 
-
 /**
  * Used to write out a DokuWiki page to file, and send IO_WIKIPAGE_WRITE events.
  *
@@ -185,13 +209,7 @@ function _io_writeWikiPage_action($data) {
 }
 
 /**
- * Saves $content to $file.
- *
- * If the third parameter is set to true the given content
- * will be appended.
- *
- * Uses gzip if extension is .gz
- * and bz2 if extension is .bz2
+ * Internal function to save contents to a file.
  *
  * @author  Andreas Gohr <andi@splitbrain.org>
  *
@@ -200,106 +218,142 @@ function _io_writeWikiPage_action($data) {
  * @param bool   $append
  * @return bool true on success, otherwise false
  */
-function io_saveFile($file,$content,$append=false){
+function _io_saveFile($file, $content, $append) {
     global $conf;
     $mode = ($append) ? 'ab' : 'wb';
-
     $fileexists = file_exists($file);
-    io_makeFileDir($file);
-    io_lock($file);
+
     if(substr($file,-3) == '.gz'){
+        if(!DOKU_HAS_GZIP) return false;
         $fh = @gzopen($file,$mode.'9');
-        if(!$fh){
-            msg("Writing $file failed",-1);
-            io_unlock($file);
-            return false;
-        }
+        if(!$fh) return false;
         gzwrite($fh, $content);
         gzclose($fh);
     }else if(substr($file,-4) == '.bz2'){
-        $fh = @bzopen($file,$mode{0});
-        if(!$fh){
-            msg("Writing $file failed", -1);
-            io_unlock($file);
-            return false;
+        if(!DOKU_HAS_BZIP) return false;
+        if($append) {
+            $bzcontent = bzfile($file);
+            if($bzcontent === false) return false;
+            $content = $bzcontent.$content;
         }
+        $fh = @bzopen($file,'w');
+        if(!$fh) return false;
         bzwrite($fh, $content);
         bzclose($fh);
     }else{
         $fh = @fopen($file,$mode);
-        if(!$fh){
-            msg("Writing $file failed",-1);
-            io_unlock($file);
-            return false;
-        }
+        if(!$fh) return false;
         fwrite($fh, $content);
         fclose($fh);
     }
 
     if(!$fileexists and !empty($conf['fperm'])) chmod($file, $conf['fperm']);
-    io_unlock($file);
     return true;
 }
 
 /**
- * Delete exact linematch for $badline from $file.
+ * Saves $content to $file.
  *
- * Be sure to include the trailing newline in $badline
+ * If the third parameter is set to true the given content
+ * will be appended.
  *
  * Uses gzip if extension is .gz
+ * and bz2 if extension is .bz2
  *
- * 2005-10-14 : added regex option -- Christopher Smith <chris@jalakai.co.uk>
+ * @author  Andreas Gohr <andi@splitbrain.org>
  *
- * @author Steven Danz <steven-danz@kc.rr.com>
+ * @param string $file filename path to file
+ * @param string $content
+ * @param bool   $append
+ * @return bool true on success, otherwise false
+ */
+function io_saveFile($file, $content, $append=false) {
+    io_makeFileDir($file);
+    io_lock($file);
+    if(!_io_saveFile($file, $content, $append)) {
+        msg("Writing $file failed",-1);
+        io_unlock($file);
+        return false;
+    }
+    io_unlock($file);
+    return true;
+}
+
+/**
+ * Replace one or more occurrences of a line in a file.
  *
- * @param string $file    filename
- * @param string $badline exact linematch to remove
- * @param bool   $regex   use regexp?
+ * The default, when $maxlines is 0 is to delete all matching lines then append a single line.
+ * A regex that matches any part of the line will remove the entire line in this mode.
+ * Captures in $newline are not available.
+ *
+ * Otherwise each line is matched and replaced individually, up to the first $maxlines lines
+ * or all lines if $maxlines is -1. If $regex is true then captures can be used in $newline.
+ *
+ * Be sure to include the trailing newline in $oldline when replacing entire lines.
+ *
+ * Uses gzip if extension is .gz
+ * and bz2 if extension is .bz2
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Patrick Brown <ptbrown@whoopdedo.org>
+ *
+ * @param string $file     filename
+ * @param string $oldline  exact linematch to remove
+ * @param string $newline  new line to insert
+ * @param bool   $regex    use regexp?
+ * @param int    $maxlines number of occurrences of the line to replace
  * @return bool true on success
  */
-function io_deleteFromFile($file,$badline,$regex=false){
+function io_replaceInFile($file, $oldline, $newline, $regex=false, $maxlines=0) {
+    if ((string)$oldline === '') {
+        trigger_error('$oldline parameter cannot be empty in io_replaceInFile()', E_USER_WARNING);
+        return false;
+    }
+
     if (!file_exists($file)) return true;
 
     io_lock($file);
 
     // load into array
     if(substr($file,-3) == '.gz'){
+        if(!DOKU_HAS_GZIP) return false;
         $lines = gzfile($file);
+    }else if(substr($file,-4) == '.bz2'){
+        if(!DOKU_HAS_BZIP) return false;
+        $lines = bzfile($file, true);
     }else{
         $lines = file($file);
     }
 
-    // remove all matching lines
-    if ($regex) {
-        $lines = preg_grep($badline,$lines,PREG_GREP_INVERT);
-    } else {
-        $pos = array_search($badline,$lines); //return null or false if not found
-        while(is_int($pos)){
-            unset($lines[$pos]);
-            $pos = array_search($badline,$lines);
+    // make non-regexes into regexes
+    $pattern = $regex ? $oldline : '/^'.preg_quote($oldline,'/').'$/';
+    $replace = $regex ? $newline : addcslashes($newline, '\$');
+
+    // remove matching lines
+    if ($maxlines > 0) {
+        $count = 0;
+        $matched = 0;
+        while (($count < $maxlines) && (list($i,$line) = each($lines))) {
+            // $matched will be set to 0|1 depending on whether pattern is matched and line replaced
+            $lines[$i] = preg_replace($pattern, $replace, $line, -1, $matched);
+            if ($matched) $count++;
         }
+    } else if ($maxlines == 0) {
+        $lines = preg_grep($pattern, $lines, PREG_GREP_INVERT);
+
+        if ((string)$newline !== ''){
+            $lines[] = $newline;
+        }
+    } else {
+        $lines = preg_replace($pattern, $replace, $lines);
     }
 
     if(count($lines)){
-        $content = join('',$lines);
-        if(substr($file,-3) == '.gz'){
-            $fh = @gzopen($file,'wb9');
-            if(!$fh){
-                msg("Removing content from $file failed",-1);
-                io_unlock($file);
-                return false;
-            }
-            gzwrite($fh, $content);
-            gzclose($fh);
-        }else{
-            $fh = @fopen($file,'wb');
-            if(!$fh){
-                msg("Removing content from $file failed",-1);
-                io_unlock($file);
-                return false;
-            }
-            fwrite($fh, $content);
-            fclose($fh);
+        if(!_io_saveFile($file, join('',$lines), false)) {
+            msg("Removing content from $file failed",-1);
+            io_unlock($file);
+            return false;
         }
     }else{
         @unlink($file);
@@ -309,6 +363,22 @@ function io_deleteFromFile($file,$badline,$regex=false){
     return true;
 }
 
+/**
+ * Delete lines that match $badline from $file.
+ *
+ * Be sure to include the trailing newline in $badline
+ *
+ * @author Patrick Brown <ptbrown@whoopdedo.org>
+ *
+ * @param string $file    filename
+ * @param string $badline exact linematch to remove
+ * @param bool   $regex   use regexp?
+ * @return bool true on success
+ */
+function io_deleteFromFile($file,$badline,$regex=false){
+    return io_replaceInFile($file,$badline,null,$regex,0);
+}
+
 /**
  * Tries to lock a file
  *
diff --git a/inc/lang/.htaccess b/inc/lang/.htaccess
index 2d69be754fc9e93b6ccfaffbe7a1e42cf553cd24..2aaae02fd59fedbb870d96bcee0feee5ac265e7e 100644
--- a/inc/lang/.htaccess
+++ b/inc/lang/.htaccess
@@ -1,3 +1,8 @@
 ## no access to the lang directory
-order allow,deny
-deny from all
+<IfModule mod_authz_host>
+    Require all denied
+</IfModule>
+<IfModule !mod_authz_host>
+    Order allow,deny
+    Deny from all
+</IfModule>
diff --git a/inc/lang/af/lang.php b/inc/lang/af/lang.php
index 70672fbdd5fa7ec388116805141463351d3e4954..f719647198e4cdf1cc856a10b0895409e3097a39 100644
--- a/inc/lang/af/lang.php
+++ b/inc/lang/af/lang.php
@@ -44,7 +44,6 @@ $lang['profnoempty']           = 'Jy moet \'n name en a e-posadres in sit';
 $lang['resendpwdmissing']      = 'Jammer, jy moet ales in fil';
 $lang['resendpwdconfirm']      = '\'n Bevestigingpos is gestuur na die gekose e-posadres.';
 $lang['resendpwdsuccess']      = 'Jou nuive wagwoord was deur e-pos gesteur';
-$lang['fileupload']            = 'Laai lêer';
 $lang['uploadsucc']            = 'Laai suksesvol';
 $lang['uploadfail']            = 'Laai fout';
 $lang['js']['hidedetails']     = 'Steek weg';
@@ -62,7 +61,6 @@ $lang['qb_link']               = 'Interne skakel';
 $lang['qb_extlink']            = 'Eksterne skakel';
 $lang['qb_hr']                 = 'Horisontale streep';
 $lang['qb_sig']                = 'Handtekening met datum';
-$lang['admin_register']        = 'Skep gerus \'n rekening';
 $lang['btn_img_backto']        = 'Terug na %s';
 $lang['img_date']              = 'Datem:';
 $lang['img_camera']            = 'Camera:';
diff --git a/inc/lang/ar/jquery.ui.datepicker.js b/inc/lang/ar/jquery.ui.datepicker.js
index c93fed48dc6cd1cba06e243c04afd782562ffaef..c9ee84a543537f8cfb639ffa1c4e6cfe954501bc 100644
--- a/inc/lang/ar/jquery.ui.datepicker.js
+++ b/inc/lang/ar/jquery.ui.datepicker.js
@@ -1,6 +1,7 @@
 /* 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 */
+/* Used in most of Arab countries, primarily in Bahrain, Kuwait, Oman, Qatar, Saudi Arabia and the United Arab Emirates, Egypt, Sudan and Yemen. */
+/* Written by Mohammed Alshehri -- m@dralshehri.com */
+
 (function( factory ) {
 	if ( typeof define === "function" && define.amd ) {
 
@@ -18,15 +19,15 @@ datepicker.regional['ar'] = {
 	prevText: '&#x3C;السابق',
 	nextText: 'التالي&#x3E;',
 	currentText: 'اليوم',
-	monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
-	'تموز', 'آب', 'أيلول',	'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+	monthNames: ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
+	'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
 	monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
 	dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
-	dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+	dayNamesShort: ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
 	dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
 	weekHeader: 'أسبوع',
 	dateFormat: 'dd/mm/yy',
-	firstDay: 6,
+	firstDay: 0,
 		isRTL: true,
 	showMonthAfterYear: false,
 	yearSuffix: ''};
diff --git a/inc/lang/ar/lang.php b/inc/lang/ar/lang.php
index 50984e6303ef11db3090fd0eb37895e98c6fc8cc..fb89bb0c7bb6a2ba487d0cec26debc4f5f2d098e 100644
--- a/inc/lang/ar/lang.php
+++ b/inc/lang/ar/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Mostafa Hussein <mostafa@gmail.com>
  * @author Yaman Hokan <always.smile.yh@hotmail.com>
  * @author Usama Akkad <uahello@gmail.com>
@@ -41,7 +41,6 @@ $lang['btn_update']            = 'حدّث';
 $lang['btn_delete']            = 'احذف';
 $lang['btn_back']              = 'ارجع';
 $lang['btn_backlink']          = 'ارتباطات';
-$lang['btn_backtomedia']       = 'ارجع إلى اختيار ملف الوسائط';
 $lang['btn_subscribe']         = 'ادر الاشتراكات';
 $lang['btn_profile']           = 'حدث الملف الشخصي';
 $lang['btn_reset']             = 'صفّر';
@@ -88,7 +87,7 @@ $lang['profchanged']           = 'حُدث الملف الشخصي للمستخ
 $lang['profnodelete']          = 'هذه الموسوعه لا ندعم حذف الأشخاص';
 $lang['profdeleteuser']        = 'احذف حساب';
 $lang['profdeleted']           = 'حسابك الخاص تم حذفه من هذه الموسوعة';
-$lang['profconfdelete']        = 'أنا أرغب في حذف حسابي من هذه الموسوعة.<br/> 
+$lang['profconfdelete']        = 'أنا أرغب في حذف حسابي من هذه الموسوعة.<br/>
 هذا الحدث غير ممكن.';
 $lang['profconfdeletemissing'] = 'لم تقم بوضع علامة في مربع التأكيد';
 $lang['pwdforget']             = 'أنسيت كلمة السر؟ احصل على واحدة جديدة';
@@ -143,8 +142,6 @@ $lang['js']['del_confirm']     = 'هل حقاً تريد حذف البنود ا
 $lang['js']['restore_confirm'] = 'أمتأكد من استرجاع هذه النسخة؟';
 $lang['js']['media_diff']      = 'عرض الفروق:';
 $lang['js']['media_diff_both'] = 'جنبا إلى جنب';
-$lang['js']['media_diff_opacity'] = 'Shine-through';
-$lang['js']['media_diff_portions'] = 'Swipe';
 $lang['js']['media_select']    = 'اختر ملفا...';
 $lang['js']['media_upload_btn'] = 'ارفع';
 $lang['js']['media_done_btn']  = 'تم';
@@ -154,7 +151,6 @@ $lang['js']['media_overwrt']   = 'أكتب فوق الملفات الموجود
 $lang['rssfailed']             = 'خطأ ما حدث أثناء جلب ملف التغذية:';
 $lang['nothingfound']          = 'لا يوجد شيء';
 $lang['mediaselect']           = 'ملفات الوسائط';
-$lang['fileupload']            = 'تحميل ملف وسائط';
 $lang['uploadsucc']            = 'تم الرفع بنجاح';
 $lang['uploadfail']            = 'فشل الرفع، ربما خطأ تراخيص؟';
 $lang['uploadwrong']           = 'الرفع ممنوع، نوع الملف مرفوض!';
@@ -245,7 +241,6 @@ $lang['qb_sig']                = 'أدرج التوقيع';
 $lang['qb_smileys']            = 'الإبتسامات';
 $lang['qb_chars']              = 'محارف خاصة';
 $lang['upperns']               = 'انتقل للنطاق الأب';
-$lang['admin_register']        = 'أضف مستخدما جديدا';
 $lang['metaedit']              = 'تحرير البيانات الشمولية ';
 $lang['metasaveerr']           = 'فشلت كتابة البيانات الشمولية';
 $lang['metasaveok']            = 'حُفظت البيانات الشمولية';
@@ -278,7 +273,6 @@ $lang['subscr_style_every']    = 'بريدا على كل تغيير';
 $lang['subscr_style_digest']   = 'البريد الإلكتروني, ملخص للتغييرات لكل صفحة (كل يوم %.2f)';
 $lang['subscr_style_list']     = 'قائمة بالصفحات التي تم تغييرها منذ آخر بريد الإلكتروني (كل يوم %.2f)';
 $lang['authtempfail']          = 'تصريح المشترك غير متوفر مؤقتاً، إن استمرت هذه الحالة يرجى مراسلة المدير';
-$lang['authpwdexpire']         = 'ستنتهي صلاحية كلمة السر في %d . عليك بتغييرها سريعا.';
 $lang['i_chooselang']          = 'اختر لغتك';
 $lang['i_installer']           = 'برنامج تنصيب دوكو ويكي';
 $lang['i_wikiname']            = 'اسم الويكي';
@@ -303,8 +297,8 @@ $lang['i_badhash']             = 'الملف dokuwiki.php غير مصنف أو 
 (hash=<code>%s</code>)';
 $lang['i_badval']              = 'القيمة <code>%s</code> غير شرعية أو فارغة';
 $lang['i_success']             = 'الإعدادات تمت بنجاح، يرجى حذف الملف install.php الآن.
-ثم تابع إلى <a href="doku.php"> دوكو ويكي الجديدة</a>';
-$lang['i_failure']             = 'بعض الأخطاء حدثت أثنا كتابة ملفات الإعدادات، عليك تعديلها يدوياً قبل أن تستطيع استخدام <a href="doku.php"> دوكو ويكي الجديدة</a>';
+ثم تابع إلى <a href="doku.php?id=wiki:welcome"> دوكو ويكي الجديدة</a>';
+$lang['i_failure']             = 'بعض الأخطاء حدثت أثنا كتابة ملفات الإعدادات، عليك تعديلها يدوياً قبل أن تستطيع استخدام <a href="doku.php?id=wiki:welcome"> دوكو ويكي الجديدة</a>';
 $lang['i_policy']              = 'تصريح ACL مبدئي';
 $lang['i_pol0']                = 'ويكي مفتوحة؛ أي القراءة والكتابة والتحميل مسموحة للجميع';
 $lang['i_pol1']                = 'ويكي عامة؛ أي القراءة للجميع ولكن الكتابة والتحميل للمشتركين المسجلين فقط';
diff --git a/inc/lang/ar/register.txt b/inc/lang/ar/register.txt
index 57406ddd43779141ffa698e695d2c9707cb7ff72..10a7fa202dc15b144887519381cdfbabfbda6db9 100644
--- a/inc/lang/ar/register.txt
+++ b/inc/lang/ar/register.txt
@@ -1,3 +1,3 @@
 ====== سجل كمستخدم جديد ======
 
-أملئ البيانات التالية لتسجيل حساب جديد على الويكي. تأكد من كتابة **بريد إلكترونى صحيح** - سترسل اليك كلمة سر جديدة. أسم الدخول يجب أن يكون [[doku>pagename|أسم صفحة]] صحيح.
+املئ البيانات التالية لتسجيل حساب جديد على الويكي. تأكد من كتابة **بريد إلكتروني صحيح** - سترسل إليك كلمة سر جديدة. اسم الدخول يجب أن يكون [[doku>pagename|أسم صفحة]] صحيح.
diff --git a/inc/lang/ar/stopwords.txt b/inc/lang/ar/stopwords.txt
index bc6eb48aea08f241e220bc59d6d6851acfb8e381..1a885988a49003e7d8e7cc2fe79453ff687365ec 100644
--- a/inc/lang/ar/stopwords.txt
+++ b/inc/lang/ar/stopwords.txt
@@ -2,6 +2,169 @@
 # When you edit this file be sure to use UNIX line endings (single newline)
 # No need to include words shorter than 3 chars - these are ignored anyway
 # This list is based upon the ones found at http://www.ranks.nl/stopwords/
+ب
+ا
+،
+عشر
+عدد
+عدة
+عشرة
+عدم
+عام
+عاما
+عن
+عند
+عندما
+على
+عليه
+عليها
+زيارة
+سنة
+سنوات
+تم
+ضد
+بعد
+بعض
+اعادة
+اعلنت
+بسبب
+حتى
+اذا
+احد
+اثر
+برس
+باسم
+غدا
+شخصا
+صباح
+اطار
+اربعة
+اخرى
+بان
+اجل
+غير
+بشكل
+حاليا
+بن
+به
+ثم
+اف
+ان
+او
+اي
+بها
+صفر
+حيث
+اكد
+الا
+اما
+امس
+السابق
+التى
+التي
+اكثر
+ايار
+ايضا
+ثلاثة
+الذاتي
+الاخيرة
+الثاني
+الثانية
+الذى
+الذي
+الان
+امام
+ايام
+خلال
+حوالى
+الذين
+الاول
+الاولى
+بين
+ذلك
+دون
+حول
+حين
+الف
+الى
+انه
+اول
+ضمن
+انها
+جميع
+الماضي
+الوقت
+المقبل
+اليوم
+Ù€
+ف
+Ùˆ
+Ùˆ6
+قد
+لا
+ما
+مع
+مساء
+هذا
+واحد
+واضاف
+واضافت
+فان
+قبل
+قال
+كان
+لدى
+نحو
+هذه
+وان
+واكد
+كانت
+واوضح
+مايو
+فى
+في
+كل
+لم
+لن
+له
+من
+هو
+هي
+قوة
+كما
+لها
+منذ
+وقد
+ولا
+نفسه
+لقاء
+مقابل
+هناك
+وقال
+وكان
+نهاية
+وقالت
+وكانت
+للامم
+فيه
+كلم
+لكن
+وفي
+وقف
+ولم
+ومن
+وهو
+وهي
+يوم
+فيها
+منها
+مليار
+لوكالة
+يكون
+يمكن
+مليون
+فى
+أم
 about
 are
 and
diff --git a/inc/lang/az/lang.php b/inc/lang/az/lang.php
index bcec31daecbea834b6ac70421913e906183e2c25..26b177ee63838c815f720dcec14b846e9232f6d3 100644
--- a/inc/lang/az/lang.php
+++ b/inc/lang/az/lang.php
@@ -35,7 +35,6 @@ $lang['btn_update']            = 'YenilÉ™';
 $lang['btn_delete']            = 'Sil';
 $lang['btn_back']              = 'Geri';
 $lang['btn_backlink']          = 'Bura olan link-lər';
-$lang['btn_backtomedia']       = 'media-fayl seçiminə qayıt';
 $lang['btn_subscribe']         = 'Abunə ol (bütün dəyişiklər)';
 $lang['btn_profile']           = 'Profil';
 $lang['btn_reset']             = 'BoÅŸalt';
@@ -92,7 +91,6 @@ $lang['js']['willexpire']            = 'Sizin bu səhifədə dəyişik etmək ü
 $lang['rssfailed']             = 'Aşağıda göstərilmiş xəbər lentini əldə edən zaman xəta baş verdi: ';
 $lang['nothingfound']          = 'Heçnə tapılmadı.';
 $lang['mediaselect']           = 'Mediya-faylın seçilməsi';
-$lang['fileupload']            = 'Mediya-faylın serverə yüklənməsi';
 $lang['uploadsucc']            = 'Yüklənmə uğur ilə başa çatdı';
 $lang['uploadfail']            = 'Yüklənmə zamanı xəta baş veri. Bəlkə giriş haqları ilə problem var?';
 $lang['uploadwrong']           = 'Yuklənməyə qadağa qoyuldu. Belə növlu faylları serverə yükləmək olmaz. ';
@@ -169,7 +167,6 @@ $lang['qb_sig']                = 'Ä°mza at';
 $lang['qb_smileys']            = 'Smayllar';
 $lang['qb_chars']              = 'Xüsusi simvollar';
 $lang['upperns']               = 'Ana namespace-ə keç';
-$lang['admin_register']        = 'İstifadəçi əlavə et';
 $lang['metaedit']              = 'Meta-məlumatlarda düzəliş et';
 $lang['metasaveerr']           = 'Meta-məlumatları yazan zamanı xəta';
 $lang['metasaveok']            = 'Meta-məlumatlar yadda saxlandı';
diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php
index cfacd09aa6cb3abafe6dc77170597668898a1db9..0dc3f866051ec22d2ce3e884cde31b658e831ee9 100644
--- a/inc/lang/bg/lang.php
+++ b/inc/lang/bg/lang.php
@@ -10,8 +10,8 @@
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
-$lang['doublequoteopening']    = '"';
-$lang['doublequoteclosing']    = '"';
+$lang['doublequoteopening']    = '„';
+$lang['doublequoteclosing']    = '“';
 $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
 $lang['apostrophe']            = '’';
@@ -38,7 +38,6 @@ $lang['btn_update']            = 'Актуализиране';
 $lang['btn_delete']            = 'Изтриване';
 $lang['btn_back']              = 'Назад';
 $lang['btn_backlink']          = 'Какво сочи насам';
-$lang['btn_backtomedia']       = 'Назад към избора на файл';
 $lang['btn_subscribe']         = 'Абонаменти';
 $lang['btn_profile']           = 'Профил';
 $lang['btn_reset']             = 'Изчистване';
@@ -51,6 +50,8 @@ $lang['btn_register']          = 'Регистриране';
 $lang['btn_apply']             = 'Прилагане';
 $lang['btn_media']             = 'Диспечер на файлове';
 $lang['btn_deleteuser']        = 'Изтриване на профила';
+$lang['btn_img_backto']        = 'Назад към %s';
+$lang['btn_mediaManager']      = 'Преглед в диспечера на файлове';
 $lang['loggedinas']            = 'Вписани сте като:';
 $lang['user']                  = 'Потребител';
 $lang['pass']                  = 'Парола';
@@ -71,6 +72,7 @@ $lang['regmissing']            = 'Моля, попълнете всички по
 $lang['reguexists']            = 'Вече съществува потребител с избраното име.';
 $lang['regsuccess']            = 'Потребителят е създаден, а паролата е пратена по електронната поща.';
 $lang['regsuccess2']           = 'Потребителят е създаден.';
+$lang['regfail']               = 'Потребителят не може да бъде създаден.';
 $lang['regmailfail']           = 'Изглежда, че има проблем с пращането на писмото с паролата. Моля, свържете се с администратора!';
 $lang['regbadmail']            = 'Въведеният адрес изглежда невалиден - ако мислите, че това е грешка, свържете се с администратора.';
 $lang['regbadpass']            = 'Двете въведени пароли не съвпадат, моля опитайте отново.';
@@ -85,6 +87,7 @@ $lang['profdeleteuser']        = 'Изтриване на профила';
 $lang['profdeleted']           = 'Вашият профил е премахнат от това wiki ';
 $lang['profconfdelete']        = 'Искам да изтрия профила си от това wiki. <br/>  Веднъж изтрит, профилът не може да бъде възстановен!';
 $lang['profconfdeletemissing'] = 'Не сте поставили отметка в кутията потвърждение';
+$lang['proffail']              = 'Потребителският профил не може да бъде актуализиран.';
 $lang['pwdforget']             = 'Забравили сте паролата си? Получете нова';
 $lang['resendna']              = 'Wiki-то не поддържа повторно пращане на паролата.';
 $lang['resendpwd']             = 'Задаване на нова парола за';
@@ -147,7 +150,6 @@ $lang['js']['media_overwrt']   = 'Презапиши съществуващит
 $lang['rssfailed']             = 'Възникна грешка при получаването на емисията: ';
 $lang['nothingfound']          = 'Нищо не е открито.';
 $lang['mediaselect']           = 'Файлове';
-$lang['fileupload']            = 'Качване на файлове';
 $lang['uploadsucc']            = 'Качването е успешно';
 $lang['uploadfail']            = 'Качването се провали. Може би поради грешни права?';
 $lang['uploadwrong']           = 'Качването е отказано. Файлово разширение е забранено!';
@@ -181,6 +183,9 @@ $lang['difflink']              = 'Препратка към сравнениет
 $lang['diff_type']             = 'Преглед на разликите:';
 $lang['diff_inline']           = 'Вграден';
 $lang['diff_side']             = 'Един до друг';
+$lang['diffprevrev']           = 'Предходна версия';
+$lang['diffnextrev']           = 'Следваща версия';
+$lang['difflastrev']           = 'Последна версия';
 $lang['line']                  = 'Ред';
 $lang['breadcrumb']            = 'Следа:';
 $lang['youarehere']            = 'Намирате се в:';
@@ -233,11 +238,9 @@ $lang['qb_sig']                = 'Вмъкване на подпис';
 $lang['qb_smileys']            = 'Усмивчици';
 $lang['qb_chars']              = 'Специални знаци';
 $lang['upperns']               = 'към майчиното именно пространство';
-$lang['admin_register']        = 'Добавяне на нов потребител';
 $lang['metaedit']              = 'Редактиране на метаданни';
 $lang['metasaveerr']           = 'Записването на метаданните се провали';
 $lang['metasaveok']            = 'Метаданните са запазени успешно';
-$lang['btn_img_backto']        = 'Назад към %s';
 $lang['img_title']             = 'Заглавие:';
 $lang['img_caption']           = 'Надпис:';
 $lang['img_date']              = 'Дата:';
@@ -250,7 +253,6 @@ $lang['img_camera']            = 'Фотоапарат:';
 $lang['img_keywords']          = 'Ключови думи:';
 $lang['img_width']             = 'Ширина:';
 $lang['img_height']            = 'Височина:';
-$lang['btn_mediaManager']      = 'Преглед в диспечера на файлове';
 $lang['subscr_subscribe_success'] = '%s е добавен към списъка с абониралите се за %s';
 $lang['subscr_subscribe_error'] = 'Грешка при добавянето на %s към списъка с абониралите се за %s';
 $lang['subscr_subscribe_noaddress'] = 'Добавянето ви към списъка с абонати не е възможно поради липсата на свързан адрес (имейл) с профила ви.';
@@ -268,7 +270,6 @@ $lang['subscr_style_every']    = 'на имейл при всяка промян
 $lang['subscr_style_digest']   = 'на имейл с обобщение на промените във всяка страница (всеки %.2f дни)';
 $lang['subscr_style_list']     = 'на списък с променените страници от последния имейл (всеки %.2f дни)';
 $lang['authtempfail']          = 'Удостоверяването на потребители не е възможно за момента. Ако продължи дълго, моля уведомете администратора на Wiki страницата.';
-$lang['authpwdexpire']         = 'Срока на паролата ви ще изтече след %d дни. Препоръчително е да я смените по-скоро.';
 $lang['i_chooselang']          = 'Изберете вашия език';
 $lang['i_installer']           = 'Инсталатор на DokuWiki';
 $lang['i_wikiname']            = 'Име на Wiki-то';
@@ -279,12 +280,13 @@ $lang['i_modified']            = 'Поради мерки за сигурнос
 								  Трябва да разархивирате отново файловете от сваления архив или да се посъветвате с <a href="http://dokuwiki.org/install">Инструкциите за инсталиране на Dokuwiki</a>.';
 $lang['i_funcna']              = 'PHP функцията <code>%s</code> не е достъпна. Може би е забранена от доставчика на хостинг.';
 $lang['i_phpver']              = 'Инсталираната версия <code>%s</code> на PHP е по-стара от необходимата <code>%s</code>. Актуализирайте PHP инсталацията.';
+$lang['i_mbfuncoverload']      = 'Необходимо е да изключите mbstring.func_overload в php.ini за да може DokuWiki да стартира.';
 $lang['i_permfail']            = '<code>%s</code> не е достъпна за писане от DokuWiki. Трябва да промените правата за достъп до директорията!';
 $lang['i_confexists']          = '<code>%s</code> вече съществува';
 $lang['i_writeerr']            = '<code>%s</code> не можа да бъде създаден. Трябва да проверите правата за достъп до директорията/файла и да създадете файла ръчно.';
 $lang['i_badhash']             = 'Файлът dokuwiki.php не може да бъде разпознат или е променен (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> - непозволена или празна стойност';
-$lang['i_success']             = 'Настройването приключи успешно. Вече можете да изтриете файла install.php. Продължете към <a href="doku.php?id=wiki:welcome">Вашето ново DokuWiki</a>.';
+$lang['i_success']             = 'Настройването приключи успешно. Вече можете да изтриете файла install.php. Продължете към <a href="doku.php?id=wiki:welcome">Вашето новата инсталация на DokuWiki</a>.';
 $lang['i_failure']             = 'Възникнаха грешки при записването на файловете с настройки. Вероятно ще се наложи да ги поправите ръчно,
                                   за да можете да ползвате <a href="doku.php?id=wiki:welcome">Вашето ново DokuWiki</a>.';
 $lang['i_policy']              = 'Първоначална политика за достъп';
@@ -329,5 +331,6 @@ $lang['media_perm_read']       = 'За съжаление нямате дост
 $lang['media_perm_upload']     = 'За съжаление нямате достатъчно права, за да можете да качите файла.';
 $lang['media_update']          = 'Качване на нова версия';
 $lang['media_restore']         = 'Възстановяване на тази версия';
+$lang['currentns']             = 'Текущо именно пространство';
 $lang['searchresult']          = 'Резултати от търсенето';
 $lang['plainhtml']             = 'Обикновен HTML';
diff --git a/inc/lang/bn/lang.php b/inc/lang/bn/lang.php
index 0995bc478656a65372516428b6a26da3aad44174..5cb66a85307e2a93951ba70c85f1c390d1b6d1b2 100644
--- a/inc/lang/bn/lang.php
+++ b/inc/lang/bn/lang.php
@@ -2,24 +2,24 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Foysol <ragebot1125@gmail.com>
  * @author ninetailz <ninetailz1125@gmail.com>
  * @author Khan M. B. Asad <muhammad2017@gmail.com>
+ * @author Ninetailz <ninetailz1125@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
-$lang['direction']             = 'itr';
-$lang['doublequoteopening']    = '"';
-$lang['doublequoteclosing']    = '"';
-$lang['singlequoteopening']    = '\'';
-$lang['singlequoteclosing']    = '\'';
-$lang['apostrophe']            = '\'';
+$lang['direction']             = 'ltr';
+$lang['doublequoteopening']    = '“';
+$lang['doublequoteclosing']    = '”';
+$lang['singlequoteopening']    = '‘';
+$lang['singlequoteclosing']    = '’';
+$lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'এই পৃষ্ঠা সম্পাদনা করুন';
 $lang['btn_source']            = 'দেখান পাতা উৎস';
 $lang['btn_show']              = 'দেখান পৃষ্ঠা';
 $lang['btn_create']            = 'এই পৃষ্ঠা তৈরি করুন';
 $lang['btn_search']            = 'অনুসন্ধান';
-$lang['btn_save']              = 'Save';
 $lang['btn_preview']           = 'পূর্বরূপ';
 $lang['btn_top']               = 'উপরে ফিরে যান ';
 $lang['btn_newer']             = '<< আরো সাম্প্রতিক';
@@ -37,7 +37,6 @@ $lang['btn_update']            = 'আধুনিক করা';
 $lang['btn_delete']            = 'মুছে ফেলা';
 $lang['btn_back']              = 'পিছনে';
 $lang['btn_backlink']          = 'ব্যাকলিঙ্কগুলি';
-$lang['btn_backtomedia']       = 'পিছনে Mediafile নির্বাচনে যান';
 $lang['btn_subscribe']         = 'সাবস্ক্রিপশন পরিচালনা করুন';
 $lang['btn_profile']           = 'প্রোফাইল আপডেট করুন';
 $lang['btn_reset']             = 'রিসেট করুন';
@@ -148,7 +147,6 @@ $lang['js']['media_overwrt']   = 'বর্তমান ফাইল ওভা
 $lang['rssfailed']             = 'ফিডটি জোগাড় করতে গিয়ে একটি ত্রুটি ঘটেছে:';
 $lang['nothingfound']          = 'কিছু পাওয়া যায়নি।';
 $lang['mediaselect']           = 'মিডিয়া ফাইল';
-$lang['fileupload']            = 'মিডিয়া ফাইল আপলোড';
 $lang['uploadsucc']            = 'আপলোড সফল';
 $lang['uploadfail']            = 'আপলোড ব্যর্থ। অনুমতি জনিত ত্রুটি কী?';
 $lang['uploadwrong']           = 'আপলোড প্রত্যাখ্যাত। এই ফাইল এক্সটেনশন অননুমোদিত।';
@@ -197,4 +195,32 @@ $lang['created']               = 'তৈরি করা';
 $lang['restored']              = 'পুরানো সংস্করণের পুনঃস্থাপন (%s)';
 $lang['external_edit']         = 'বাহ্যিক সম্পাদনা';
 $lang['summary']               = 'সম্পাদনা সারাংশ';
-$lang['noflash']               = 'এ href="http://www.adobe.com/products/flashplayer/"> অ্যাডোবি ফ্ল্যাশ প্লাগইন </ a> এই সামগ্রী প্রদর্শন করার জন্য প্রয়োজন হয়.';
+$lang['noflash']               = 'এ href="http://www.adobe.com/products/flashplayer/"> অ্যাডোবি ফ্ল্যাশ প্লাগইন </a> এই সামগ্রী প্রদর্শন করার জন্য প্রয়োজন হয়.';
+$lang['download']              = 'ডাউনলোড স্নিপেট ';
+$lang['tools']                 = 'সরঞ্জামসমূহ';
+$lang['user_tools']            = 'ব্যবহারকারীর সরঞ্জামসমূহ';
+$lang['site_tools']            = 'সাইটের সরঞ্জামসমূহ';
+$lang['page_tools']            = 'পৃষ্ঠার সরঞ্জামসমূহ';
+$lang['skip_to_content']       = 'বিষয়ে এড়িয়ে যান';
+$lang['sidebar']               = 'সাইডবার';
+$lang['mail_newpage']          = 'পৃষ্ঠা যোগ করা হয়েছে:';
+$lang['mail_changed']          = 'পৃষ্ঠা পরিবর্তন করা হয়েছে:';
+$lang['mail_subscribe_list']   = 'পৃষ্ঠাগুলির নামস্থান পরিবর্তন:';
+$lang['mail_new_user']         = 'নতুন ব্যবহারকারী:';
+$lang['mail_upload']           = 'ফাইল আপলোড করেছেন:';
+$lang['changes_type']          = 'দেখুন পরিবর্তনসমূহ';
+$lang['pages_changes']         = 'পৃষ্ঠাগুলি';
+$lang['media_changes']         = 'মিডিয়া ফাইলগুলি';
+$lang['both_changes']          = 'পেজ এবং মিডিয়া ফাইল উভয়েই';
+$lang['qb_bold']               = 'গাঢ় লেখা';
+$lang['qb_italic']             = 'বাঁকা লেখা';
+$lang['qb_underl']             = 'আন্ডারলাইন টেক্সট';
+$lang['qb_code']               = 'মোনোস্কেপ লেখা';
+$lang['qb_strike']             = 'স্ট্রাইক মাধ্যমে টেক্সট';
+$lang['qb_h1']                 = 'স্তর 1 শিরোনাম';
+$lang['qb_h2']                 = 'স্তর 2 শিরোনাম';
+$lang['qb_h3']                 = 'স্তর 3 শিরোনাম';
+$lang['qb_h4']                 = 'স্তর 4 শিরোনাম';
+$lang['qb_h5']                 = 'স্তর 5 শিরোনাম';
+$lang['qb_h']                  = 'শিরোনাম';
+$lang['qb_hs']                 = 'নির্বাচন করুন শিরোনাম';
diff --git a/inc/lang/ca-valencia/lang.php b/inc/lang/ca-valencia/lang.php
index 3a4e30923a910d773e47b2d54bf5b4f54b44c028..862ed2886bae91189fe84c349f3c1fa48bcbc640 100644
--- a/inc/lang/ca-valencia/lang.php
+++ b/inc/lang/ca-valencia/lang.php
@@ -36,7 +36,6 @@ $lang['btn_update']            = 'Actualisar';
 $lang['btn_delete']            = 'Borrar';
 $lang['btn_back']              = 'Arrere';
 $lang['btn_backlink']          = 'Vínculs remitents';
-$lang['btn_backtomedia']       = 'Tornar a la selecció d\'archius de mijos';
 $lang['btn_subscribe']         = 'Subscriure\'s a la pàgina';
 $lang['btn_profile']           = 'Actualisar perfil';
 $lang['btn_reset']             = 'Reiniciar';
@@ -94,7 +93,6 @@ $lang['js']['notsavedyet']     = 'Els canvis no guardats es perdran.\n¿Segur qu
 $lang['rssfailed']             = 'Ha ocorregut un erro al solicitar este canal: ';
 $lang['nothingfound']          = 'No s\'ha trobat res.';
 $lang['mediaselect']           = 'Archius de mijos';
-$lang['fileupload']            = 'Enviar archius de mijos';
 $lang['uploadsucc']            = 'Enviament correcte';
 $lang['uploadfail']            = 'Enviament fallit. ¿Potser no tinga els permissos necessaris?';
 $lang['uploadwrong']           = 'Enviament denegat. ¡Esta extensió d\'archiu està prohibida!';
@@ -171,7 +169,6 @@ $lang['qb_sig']                = 'Afegir firma';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Caràcters especials';
 $lang['upperns']               = 'anar a l\'espai de noms superior';
-$lang['admin_register']        = 'Afegir nou usuari';
 $lang['metaedit']              = 'Editar meta-senyes';
 $lang['metasaveerr']           = 'Erro escrivint meta-senyes';
 $lang['metasaveok']            = 'Meta-senyes guardades';
diff --git a/inc/lang/ca/lang.php b/inc/lang/ca/lang.php
index 31c16ee23e6577cc6281c98e8f189a5d1ee8e87d..d27ce56f9b9d36f0e876a62113b1a8fed6b91cac 100644
--- a/inc/lang/ca/lang.php
+++ b/inc/lang/ca/lang.php
@@ -1,11 +1,13 @@
 <?php
+
 /**
- * catalan language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Carles Bellver <carles.bellver@cent.uji.es>
  * @author Carles Bellver <carles.bellver@gmail.com>
  * @author daniel@6temes.cat
+ * @author Eduard Díaz <edudiaz@scopia.es>
+ * @author controlonline.net <controlonline.net@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -37,7 +39,6 @@ $lang['btn_update']            = 'Actualitza';
 $lang['btn_delete']            = 'Suprimeix';
 $lang['btn_back']              = 'Enrere';
 $lang['btn_backlink']          = 'Què hi enllaça';
-$lang['btn_backtomedia']       = 'Torna a la selecció de fitxers';
 $lang['btn_subscribe']         = 'Subscripció a canvis d\'aquesta pàgina';
 $lang['btn_profile']           = 'Actualització del perfil';
 $lang['btn_reset']             = 'Reinicia';
@@ -48,6 +49,10 @@ $lang['btn_draftdel']          = 'Suprimeix esborrany';
 $lang['btn_revert']            = 'Restaura';
 $lang['btn_register']          = 'Registra\'m';
 $lang['btn_apply']             = 'Aplica';
+$lang['btn_media']             = 'Mànager Multimèdia';
+$lang['btn_deleteuser']        = 'Esborrar compte';
+$lang['btn_img_backto']        = 'Torna a %s';
+$lang['btn_mediaManager']      = 'Veure a multimèdia mànager ';
 $lang['loggedinas']            = 'Heu entrat com:';
 $lang['user']                  = 'Nom d\'usuari';
 $lang['pass']                  = 'Contrasenya';
@@ -59,14 +64,16 @@ $lang['fullname']              = 'Nom complet';
 $lang['email']                 = 'Correu electrònic';
 $lang['profile']               = 'Perfil d\'usuari';
 $lang['badlogin']              = 'Nom d\'usuari o contrasenya incorrectes.';
+$lang['badpassconfirm']        = 'Contrasenya incorrecta';
 $lang['minoredit']             = 'Canvis menors';
 $lang['draftdate']             = 'L\'esborrany s\'ha desat automàticament';
 $lang['nosecedit']             = 'Mentrestant la pàgina ha estat modificada. La informació de seccions estava obsoleta i ha calgut carregar la pàgina sencera.';
-$lang['searchcreatepage']      = "Si no trobeu allò que buscàveu, podeu crear una pàgina nova per mitjà del botó ''Edita aquesta pàgina''.";
+$lang['searchcreatepage']      = 'Si no trobeu allò que buscàveu, podeu crear una pàgina nova per mitjà del botó \'\'Edita aquesta pàgina\'\'.';
 $lang['regmissing']            = 'Heu d\'omplir tots els camps.';
 $lang['reguexists']            = 'Ja existeix un altre usuari amb aquest nom.';
 $lang['regsuccess']            = 'S\'ha creat l\'usuari. La contrasenya s\'ha enviat per correu.';
 $lang['regsuccess2']           = 'S\'ha creat l\'usuari.';
+$lang['regfail']               = 'L\'usuari no pot ser creat';
 $lang['regmailfail']           = 'Sembla que un error ha impedit enviar la contrasenya per correu. Contacteu amb l\'administrador.';
 $lang['regbadmail']            = 'L\'adreça de correu que heu donat no sembla vàlida. Si creieu que això és un error, contacu amb l\'administrador.';
 $lang['regbadpass']            = 'Les dues contrasenyes no són iguals. Torneu a intentar-ho.';
@@ -76,6 +83,12 @@ $lang['profna']                = 'Aquest wiki no permet modificar el perfil';
 $lang['profnochange']          = 'No heu introduït cap canvi.';
 $lang['profnoempty']           = 'No es pot deixar en blanc el nom o l\'adreça de correu.';
 $lang['profchanged']           = 'El perfil d\'usuari s\'ha actualitzat correctament.';
+$lang['profnodelete']          = 'Aquesta wiki no permet esborrar usuaris';
+$lang['profdeleteuser']        = 'Esborrar compte';
+$lang['profdeleted']           = 'El vostre compte ha sigut esborrat d\'aquest compte';
+$lang['profconfdelete']        = 'Vull esmorrar el meu compte d\'aquesta wiki. </br> Aquesta acció no pot desfer-se.';
+$lang['profconfdeletemissing'] = 'Confirmació no acceptada';
+$lang['proffail']              = 'Perfil d\'usuari no actialitzat';
 $lang['pwdforget']             = 'Heu oblidat la contrasenya? Podeu obtenir-ne una de nova.';
 $lang['resendna']              = 'Aquest wiki no permet tornar a enviar la contrasenya.';
 $lang['resendpwd']             = 'Estableix una nova contrasenya per';
@@ -140,7 +153,6 @@ $lang['js']['media_overwrt']   = 'Sobreescriu els arxius existents';
 $lang['rssfailed']             = 'S\'ha produït un error en recollir aquesta alimentació: ';
 $lang['nothingfound']          = 'No s\'ha trobat res.';
 $lang['mediaselect']           = 'Selecció de fitxers';
-$lang['fileupload']            = 'Càrrega de fitxers';
 $lang['uploadsucc']            = 'S\'ha penjat el fitxer';
 $lang['uploadfail']            = 'No es pot penjar el fitxer. Potser no teniu prou permisos?';
 $lang['uploadwrong']           = 'No es pot penjar el fitxer. Aquesta extensió està prohibida.';
@@ -174,6 +186,9 @@ $lang['difflink']              = 'Enllaç a la visualització de la comparació'
 $lang['diff_type']             = 'Veieu les diferències:';
 $lang['diff_inline']           = 'En línia';
 $lang['diff_side']             = 'Un al costat de l\'altre';
+$lang['diffprevrev']           = 'Revisió prèvia';
+$lang['diffnextrev']           = 'Següent revisió';
+$lang['difflastrev']           = 'Ultima revisió';
 $lang['line']                  = 'Línia';
 $lang['breadcrumb']            = 'Camí:';
 $lang['youarehere']            = 'Sou aquí:';
@@ -194,6 +209,7 @@ $lang['skip_to_content']       = 'salta al contingut';
 $lang['sidebar']               = 'Barra lateral';
 $lang['mail_newpage']          = 'pàgina afegida:';
 $lang['mail_changed']          = 'pàgina modificada:';
+$lang['mail_subscribe_list']   = 'pagines canviades a l0espai de noms:';
 $lang['mail_new_user']         = 'nou usuari:';
 $lang['mail_upload']           = 'fitxer penjat:';
 $lang['changes_type']          = 'Veure els canvis de';
@@ -225,11 +241,9 @@ $lang['qb_sig']                = 'Insereix signatura';
 $lang['qb_smileys']            = 'Emoticones';
 $lang['qb_chars']              = 'Caràcters especials';
 $lang['upperns']               = 'Salta a l\'espai superior';
-$lang['admin_register']        = 'Afegeix nou usuari';
 $lang['metaedit']              = 'Edita metadades';
 $lang['metasaveerr']           = 'No s\'han pogut escriure les metadades';
 $lang['metasaveok']            = 'S\'han desat les metadades';
-$lang['btn_img_backto']        = 'Torna a %s';
 $lang['img_title']             = 'Títol:';
 $lang['img_caption']           = 'Peu d\'imatge:';
 $lang['img_date']              = 'Data:';
@@ -259,7 +273,6 @@ $lang['subscr_style_every']    = 'Envia\'m un correu electrònic per a cada canv
 $lang['subscr_style_digest']   = 'Envia\'m un correu electrònic amb un resum dels canvis per a cada pàgina (cada %.2f dies)';
 $lang['subscr_style_list']     = 'llistat de pàgines canviades des de l\'últim correu electrònic  (cada %.2f dies)';
 $lang['authtempfail']          = 'L\'autenticació d\'usuaris no està disponible temporalment. Si aquesta situació persisteix, si us plau informeu els administradors del wiki.';
-$lang['authpwdexpire']         = 'La vostra contrasenya caducarà en %d dies, l\'hauríeu de canviar aviat.';
 $lang['i_chooselang']          = 'Trieu l\'idioma';
 $lang['i_installer']           = 'Instal·lador de DokuWiki';
 $lang['i_wikiname']            = 'Nom del wiki';
@@ -274,14 +287,18 @@ $lang['i_confexists']          = '<code>%s</code> ja existeix';
 $lang['i_writeerr']            = 'No es pot crear <code>%s</code>. Comproveu els permisos del directori i/o del fitxer i creeu el fitxer manualment.';
 $lang['i_badhash']             = 'dokuwiki.php no reconegut o modificat (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> - valor il·legal o buit';
-$lang['i_success']             = 'La configuració s\'ha acabat amb èxit. Ara podeu suprimir el fitxer install.php. Aneu al vostre nou <a href="doku.php">DokuWiki</a>.';
-$lang['i_failure']             = 'S\'han produït alguns errors en escriure els fitxers de configuració. Potser caldrà que els arregleu manualment abans d\'utilitzar el vostre nou <a href="doku.php">DokuWiki</a>.';
+$lang['i_success']             = 'La configuració s\'ha acabat amb èxit. Ara podeu suprimir el fitxer install.php. Aneu al <a href="doku.php?id=wiki:welcome">vostre nou DokuWiki</a>.';
+$lang['i_failure']             = 'S\'han produït alguns errors en escriure els fitxers de configuració. Potser caldrà que els arregleu manualment abans d\'utilitzar el <a href="doku.php?id=wiki:welcome">vostre nou DokuWiki</a>.';
 $lang['i_policy']              = 'Política ACL inicial';
 $lang['i_pol0']                = 'Wiki obert (tothom pot llegir, escriure i penjar fitxers)';
 $lang['i_pol1']                = 'Wiki públic (tothom pot llegir, els usuaris registrats poden escriure i penjar fitxers)';
 $lang['i_pol2']                = 'Wiki tancat (només els usuaris registrats poden llegir, escriure i penjar fitxers)';
+$lang['i_allowreg']            = 'Permet d\'autoinscripció d\'usuaris';
 $lang['i_retry']               = 'Reintenta';
 $lang['i_license']             = 'Escolliu el tipus de llicència que voleu fer servir per al vostre contingut:';
+$lang['i_license_none']        = 'No mostrar cap informació sobre llicencies';
+$lang['i_pop_field']           = 'Si us plau, ajuda\'ns a millorar la DokuWiki';
+$lang['i_pop_label']           = 'Una vegada al mes, enviar anònimament dades als programadors de la DokuWiki';
 $lang['recent_global']         = 'Esteu veient els canvis recents de l\'espai <strong>%s</strong>. També podeu veure els <a href="%s">canvis recents de tot el wiki</a>.';
 $lang['years']                 = 'fa %d anys';
 $lang['months']                = 'fa %d mesos';
@@ -314,3 +331,6 @@ $lang['media_perm_read']       = 'No teniu permisos suficients per a llegir arxi
 $lang['media_perm_upload']     = 'No teniu permisos suficients per a pujar arxius';
 $lang['media_update']          = 'Puja la nova versió';
 $lang['media_restore']         = 'Restaura aquesta versió';
+$lang['currentns']             = 'Espai de noms actual';
+$lang['searchresult']          = 'Resultats cerca';
+$lang['plainhtml']             = 'HTML pla';
diff --git a/inc/lang/ca/subscr_form.txt b/inc/lang/ca/subscr_form.txt
index d3679454f725fae5443822c368eefd633b296ca3..3c63ce66d5edb6107e59b5fbd4019faa72d5adc5 100644
--- a/inc/lang/ca/subscr_form.txt
+++ b/inc/lang/ca/subscr_form.txt
@@ -1,3 +1,3 @@
 ===== Gestió de les Subscripcions =====
 
-Aquesta pàgina podeu gestiona les vostres subscripcions per a les pàgines i els espais actuals.
\ No newline at end of file
+Des d'aquesta pàgina, podeu gestionar les vostres subscripcions per a les pàgines i els espais que seleccioneu. 
\ No newline at end of file
diff --git a/inc/lang/cs/admin.txt b/inc/lang/cs/admin.txt
index ccfbc4455749ad0e7e7c78335daee5cce6abc79e..df7c5b61cd376e0300e7bf8ece73c085ae90c25b 100644
--- a/inc/lang/cs/admin.txt
+++ b/inc/lang/cs/admin.txt
@@ -1,3 +1,3 @@
 ====== Správa ======
 
-Níže je možno spravovat vaši DokuWiki.
+Níže je možno spravovat vaší DokuWiki.
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index 1dd4def5ac4917dd627fd57175e272ec0441d1bc..ffc99eccf9ce0a15dc1305bcdcb6fb40f66fe7cb 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -19,6 +19,7 @@
  * @author Radovan Buroň <radovan@buron.cz>
  * @author Viktor Zavadil <vzavadil@newps.cz>
  * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ * @author Turkislav <turkislav@blabla.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -50,7 +51,6 @@ $lang['btn_update']            = 'Aktualizovat';
 $lang['btn_delete']            = 'Vymazat';
 $lang['btn_back']              = 'Zpět';
 $lang['btn_backlink']          = 'Zpětné odkazy';
-$lang['btn_backtomedia']       = 'Zpět do Výběru dokumentu';
 $lang['btn_subscribe']         = 'Odebírat e-mailem změny stránky';
 $lang['btn_profile']           = 'Upravit profil';
 $lang['btn_reset']             = 'Reset';
@@ -85,6 +85,7 @@ $lang['regmissing']            = 'Musíte vyplnit všechny údaje.';
 $lang['reguexists']            = 'Uživatel se stejným jménem už je zaregistrován.';
 $lang['regsuccess']            = 'Uživatelský účet byl vytvořen a heslo zasláno e-mailem.';
 $lang['regsuccess2']           = 'Uživatelský účet byl vytvořen.';
+$lang['regfail']               = 'Uživatelský profil nemohl být vytvořen.';
 $lang['regmailfail']           = 'Zdá se, že nastala chyba při posílání mailu s heslem. Zkuste kontaktovat správce.';
 $lang['regbadmail']            = 'Zadaná e-mailová adresa není platná. Pokud si myslíte, že to je špatně, zkuste kontaktovat správce.';
 $lang['regbadpass']            = 'Heslo nebylo zadáno dvakrát stejně, zkuste to prosím znovu.';
@@ -99,6 +100,7 @@ $lang['profdeleteuser']        = 'Smazat účet';
 $lang['profdeleted']           = 'Váš uživatelský účet byl z této wiki smazán';
 $lang['profconfdelete']        = 'Chci smazat můj účet z této wiki. <br/> Tato akce je nevratná.';
 $lang['profconfdeletemissing'] = 'Potvrzovací tlačítko nezaškrtnuto';
+$lang['proffail']              = 'Uživatelský profil nebyl aktualizován.';
 $lang['pwdforget']             = 'Zapomněli jste heslo? Nechte si zaslat nové';
 $lang['resendna']              = 'Tato wiki neumožňuje zasílání nových hesel.';
 $lang['resendpwd']             = 'Nastavit nové heslo pro';
@@ -163,7 +165,6 @@ $lang['js']['media_overwrt']   = 'Přepsat existující soubory';
 $lang['rssfailed']             = 'Nastala chyba při vytváření tohoto RSS: ';
 $lang['nothingfound']          = 'Nic nenalezeno.';
 $lang['mediaselect']           = 'Výběr dokumentu';
-$lang['fileupload']            = 'Načtení dokumentu';
 $lang['uploadsucc']            = 'Přenos proběhl v pořádku';
 $lang['uploadfail']            = 'Chyba při načítání. Možná kvůli špatně nastaveným právům?';
 $lang['uploadwrong']           = 'Načtení souboru s takovouto příponou není dovoleno.';
@@ -254,7 +255,6 @@ $lang['qb_sig']                = 'Vložit podpis';
 $lang['qb_smileys']            = 'Emotikony';
 $lang['qb_chars']              = 'Speciální znaky';
 $lang['upperns']               = 'skočit do nadřazeného jmenného prostoru';
-$lang['admin_register']        = 'Přidat nového uživatele';
 $lang['metaedit']              = 'Upravit Metadata';
 $lang['metasaveerr']           = 'Chyba při zápisu metadat';
 $lang['metasaveok']            = 'Metadata uložena';
@@ -287,7 +287,6 @@ $lang['subscr_style_every']    = 'e-mail pro každou změnu';
 $lang['subscr_style_digest']   = 'souhrnný e-mail změn pro každou stránku (každé %.2f dny/dní)';
 $lang['subscr_style_list']     = 'seznam změněných stránek od posledního e-mailu (každé %.2f dny/dní)';
 $lang['authtempfail']          = 'Autentizace uživatelů je dočasně nedostupná. Pokud tento problém přetrvává, informujte prosím správce této wiki.';
-$lang['authpwdexpire']         = 'Platnost vašeho hesla vyprší za %d dní, měli byste ho změnit co nejdříve.';
 $lang['i_chooselang']          = 'Vyberte si jazyk';
 $lang['i_installer']           = 'Instalace DokuWiki';
 $lang['i_wikiname']            = 'Název wiki';
@@ -347,6 +346,7 @@ $lang['media_perm_read']       = 'Bohužel, nemáte práva číst soubory.';
 $lang['media_perm_upload']     = 'Bohužel, nemáte práva nahrávat soubory.';
 $lang['media_update']          = 'Nahrát novou verzi';
 $lang['media_restore']         = 'Obnovit tuto verzi';
+$lang['media_acl_warning']     = 'Tento seznam nemusí být úplný z důvodu omezení práv ACL a skrytým stránkám.';
 $lang['currentns']             = 'Aktuální jmenný prostor';
 $lang['searchresult']          = 'Výsledek hledání';
 $lang['plainhtml']             = 'Čisté HTML';
diff --git a/inc/lang/cy/admin.txt b/inc/lang/cy/admin.txt
new file mode 100644
index 0000000000000000000000000000000000000000..75485fcf268cc2cc7bfe67be7ddf775e3137ed18
--- /dev/null
+++ b/inc/lang/cy/admin.txt
@@ -0,0 +1,4 @@
+====== Gweinyddu ======
+
+Gallwch chi ddarganfod rhestr o dasgau gweinyddol ar gael mewn DokuWiki, isod.
+
diff --git a/inc/lang/cy/adminplugins.txt b/inc/lang/cy/adminplugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ff21264fdf244741c1f82496831554a5af5cde6f
--- /dev/null
+++ b/inc/lang/cy/adminplugins.txt
@@ -0,0 +1,2 @@
+===== Ategion Ychwanegol =====
+
diff --git a/inc/lang/cy/backlinks.txt b/inc/lang/cy/backlinks.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2180e5503263e70750dca65906834ae6c48ba771
--- /dev/null
+++ b/inc/lang/cy/backlinks.txt
@@ -0,0 +1,4 @@
+====== Olgysylltiadau ======
+
+Dyma restr o dudalennau sy'n ymddangos eu bod nhw'n cysylltu'n ôl i'r dudalen gyfredol.
+
diff --git a/inc/lang/cy/conflict.txt b/inc/lang/cy/conflict.txt
new file mode 100644
index 0000000000000000000000000000000000000000..133e863e5ec45ca52738d5a50edf0ca9acef35b1
--- /dev/null
+++ b/inc/lang/cy/conflict.txt
@@ -0,0 +1,6 @@
+====== Mae fersiwn mwy diweddar yn bodoli ======
+
+Mae fersiwn mwy diweddar o'r ddogfen a wnaethoch chi olygu yn bodoli. Bydd hwn yn digwydd pan fydd defnyddiwr arall yn newid y ddogfen wrth i chi'n ei golygu hi.
+
+Archwiliwch y gwahaniaethau isod yn drylwyr, yna penderfynnwch pa fersiwn i'w gadw. Os ydych chi'n dewis ''cadw'', caiff eich fersiwn chi ei gadw. Pwyswch ''canslo'' i gadw'r fersiwn cyfredol.
+
diff --git a/inc/lang/cy/denied.txt b/inc/lang/cy/denied.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2c0eb001c319f82078e0f364a0e4e9de2c37e08f
--- /dev/null
+++ b/inc/lang/cy/denied.txt
@@ -0,0 +1,4 @@
+====== Gwrthodwyd Hawl ======
+
+Sori, 'sdim hawliau digonol 'da chi i barhau.
+
diff --git a/inc/lang/cy/diff.txt b/inc/lang/cy/diff.txt
new file mode 100644
index 0000000000000000000000000000000000000000..69a9ff6888d732300037558ab4aecf08bd187f10
--- /dev/null
+++ b/inc/lang/cy/diff.txt
@@ -0,0 +1,4 @@
+====== Gwahaniaethau ======
+
+Mae hwn yn dangos y gwahaniaethau rhwng dau fersiwn y dudalen.
+
diff --git a/inc/lang/cy/draft.txt b/inc/lang/cy/draft.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3b10c511e09692a5b0bd05254cd526646cb4f7a2
--- /dev/null
+++ b/inc/lang/cy/draft.txt
@@ -0,0 +1,8 @@
+====== Ffeil ddrafft wedi'i darganfod ======
+
+Doedd eich sesiwn golygu ddiwethaf heb gwblhau'n gywir. Gwnaeth DokuWiki gadw copi ddrafft yn awtomatig wrth i chi weithio, sydd nawr ar gael i chi er mwyn parhau gyda'ch golygu. Gallwch chi weld y data a gafodd ei gadw o'ch sesiwn diwethaf isod.
+
+Penderfynwch os ydych chi am //adennill// eich sesiwn golygu goll, //dileu//'r drafft awtogadw neu //canslo//'r broses olygu.
+
+
+
diff --git a/inc/lang/cy/edit.txt b/inc/lang/cy/edit.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7e2d899ef0ac1437790252d0df427996e017d629
--- /dev/null
+++ b/inc/lang/cy/edit.txt
@@ -0,0 +1,2 @@
+Golygwch y dudalen a phwyso ''Cadw''. Gweler [[wiki:syntax]] ar gyfer cystrawen Wici. Golygwch y dudalen hon dim ond os ydych chi'n gallu ei **gwella** hi. Os ydych chi am brofi pethau, cymerwch eich camau cyntaf ar y [[playground:playground|maes chwarae]].
+
diff --git a/inc/lang/cy/editrev.txt b/inc/lang/cy/editrev.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5d32e9a687a899eefcb98e1990c222772fb67195
--- /dev/null
+++ b/inc/lang/cy/editrev.txt
@@ -0,0 +1,2 @@
+**Rydych chi wedi llwytho hen adolygiad y ddogfen!** Os ydych chi'n ei chadw hi, byddwch chi'n creu fersiwn newydd gyda'r data hwn.
+----
diff --git a/inc/lang/cy/index.txt b/inc/lang/cy/index.txt
new file mode 100644
index 0000000000000000000000000000000000000000..607a2f695cc201bf43e233c51bbbc3629ce73a6f
--- /dev/null
+++ b/inc/lang/cy/index.txt
@@ -0,0 +1,4 @@
+====== Map safle ======
+
+Dyma fap safle o bob tudalen sydd ar gael, wedi'u trefnu gan [[doku>namespaces|namespaces]].
+
diff --git a/inc/lang/cy/install.html b/inc/lang/cy/install.html
new file mode 100644
index 0000000000000000000000000000000000000000..406c7b456a10494254f7fb75b14b44bad1ca615a
--- /dev/null
+++ b/inc/lang/cy/install.html
@@ -0,0 +1,24 @@
+<p>Mae'r dudalen hon yn eich helpu chi i arsefydlu am y tro cyntaf a gyda ffurfweddu
+<a href="http://dokuwiki.org">Dokuwiki</a>. Mae mwy o wybodaeth ar yr arsefydlwr hwn
+ar <a href="http://dokuwiki.org/installer">dudalen ddogfennaeth</a> ei hun.</p>
+
+<p>Mae DokuWiki yn defnyddio ffeiliau arferol ar gyfer storio tudalennau wici a
+gwybodaeth gysylltiol gyda'r tudalennau hynny (e.e. delweddau, indecsau chwilio,
+hen adolygiadau, ac ati).  Er mwyn gweithredu'n llwyddiannus mae'n
+<strong>rhaid</strong> i DokuWiki gael yr hawl i ysgrifennu i'r ffolderi sydd yn
+dal y ffeiliau hynny. 'Dyw'r arsefydlwr hwn ddim yn gallu gosod hawliau ffolderi.
+Bydd hwn, fel rheol, yn gorfod cael ei wneud yn uniongyrchol gydag anogwr gorchymyn,
+neu os ydych chi'n defnyddio gwesteiwr, drwy FTP neu eich panel gwesteio (e.e.
+cPanel).</p>
+
+<p>Bydd yr arsefydlwr hwn yn gosod eich ffurfwedd DokuWiki ar gyfer
+<abbr title="access control list">ACL</abbr>, sydd yn ei dro yn caniat&aacute;u
+mewngofnodi gweinyddwr a mynediad i ddewislen gweinyddu DokuWiki ar gyfer arsefydlu
+ategion, rheoli defnyddwyr, rheoli mynediad i dudalennau wici a newid gosodiadau
+ffurfwedd. 'Sdim angen hwn ar DokuWiki er mwyn gweithio, ond bydd yn gwneud
+Dokuwiki yn haws i'w weinyddu.</p>
+
+<p>Dylai defnyddwyr profiadol neu'r rheiny gydag anghenion gosodiad rrbennig special
+ddefnyddio'r dolenni hyn am wybodaeth parthed
+<a href="http://dokuwiki.org/install">canllawiau arsefydlu</a>
+and <a href="http://dokuwiki.org/config">gosodiadau ffurfwedd</a>.</p>
diff --git a/inc/lang/cy/jquery.ui.datepicker.js b/inc/lang/cy/jquery.ui.datepicker.js
new file mode 100644
index 0000000000000000000000000000000000000000..254eedab23d5606ff573bd8af4c963cec9772050
--- /dev/null
+++ b/inc/lang/cy/jquery.ui.datepicker.js
@@ -0,0 +1,37 @@
+/* Danish initialisation for the jQuery UI date picker plugin. */
+
+(function( factory ) {
+	if ( typeof define === "function" && define.amd ) {
+
+		// AMD. Register as an anonymous module.
+		define([ "../datepicker" ], factory );
+	} else {
+
+		// Browser globals
+		factory( jQuery.datepicker );
+	}
+}(function( datepicker ) {
+
+datepicker.regional['cy'] = {
+	closeText: 'Cau',
+	prevText: '&#x3C;',
+	nextText: '&#x3E;',
+	currentText: 'Heddiw',
+	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: 'Wyth',
+	dateFormat: 'dd/mm/yy',
+	firstDay: 1,
+	isRTL: false,
+	showMonthAfterYear: false,
+	yearSuffix: ''};
+datepicker.setDefaults(datepicker.regional['cy']);
+
+return datepicker.regional['cy'];
+
+}));
diff --git a/inc/lang/cy/lang.php b/inc/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7018e007115747c2e5ca48e8f1531ceacd0aab00
--- /dev/null
+++ b/inc/lang/cy/lang.php
@@ -0,0 +1,373 @@
+<?php
+/**
+ * welsh language file
+ *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author     Andreas Gohr <andi@splitbrain.org>
+ * @author     Anika Henke <anika@selfthinker.org>
+ * @author     Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author     Matthias Schulte <mailinglist@lupo49.de>
+ * @author     Alan Davies <ben.brynsadler@gmail.com>
+ */
+$lang['encoding']              = 'utf-8';
+$lang['direction']             = 'ltr';
+$lang['doublequoteopening']    = '“'; //&ldquo;
+$lang['doublequoteclosing']    = '”'; //&rdquo;
+$lang['singlequoteopening']    = '‘'; //&lsquo;
+$lang['singlequoteclosing']    = '’'; //&rsquo;
+$lang['apostrophe']            = '’'; //&rsquo;
+
+$lang['btn_edit']              = 'Golygu\'r dudaen hon';
+$lang['btn_source']            = 'Dangos y ffynhonnell';
+$lang['btn_show']              = 'Dangos y dudalen';
+$lang['btn_create']            = 'Creu\'r dudalen';
+$lang['btn_search']            = 'Chwilio';
+$lang['btn_save']              = 'Cadw';
+$lang['btn_preview']           = 'Rhagolwg';
+$lang['btn_top']               = 'Nôl i\'r brig';
+$lang['btn_newer']             = '<< mwy diweddar';
+$lang['btn_older']             = 'llai diweddar >>';
+$lang['btn_revs']              = 'Hen adolygiadau';
+$lang['btn_recent']            = 'Newidiadau Diweddar';
+$lang['btn_upload']            = 'Lanlwytho';
+$lang['btn_cancel']            = 'Canslo';
+$lang['btn_index']             = 'Safle map';
+$lang['btn_secedit']           = 'Golygu';
+$lang['btn_login']             = 'Mewngofnodi';
+$lang['btn_logout']            = 'Allgofnodi';
+$lang['btn_admin']             = 'Gweinyddu';
+$lang['btn_update']            = 'Diweddaru';
+$lang['btn_delete']            = 'Dileu';
+$lang['btn_back']              = 'Nôl';
+$lang['btn_backlink']          = 'Olgysylltiadau';
+$lang['btn_subscribe']         = 'Rheoli Tanysgrifiadau';
+$lang['btn_profile']           = 'Diweddaru Proffil';
+$lang['btn_reset']             = 'Ailosod';
+$lang['btn_resendpwd']         = 'Gosod cyfrinair newydd';
+$lang['btn_draft']             = 'Golygu drafft';
+$lang['btn_recover']           = 'Adennill drafft';
+$lang['btn_draftdel']          = 'Dileu drafft';
+$lang['btn_revert']            = 'Adfer';
+$lang['btn_register']          = 'Cofrestru';
+$lang['btn_apply']             = 'Gosod';
+$lang['btn_media']             = 'Rheolwr Cyfrwng';
+$lang['btn_deleteuser']        = 'Tynnu Fy Nghyfrif';
+$lang['btn_img_backto']        = 'Nôl i %s';
+$lang['btn_mediaManager']      = 'Dangos mewn rheolwr cyfrwng';
+
+$lang['loggedinas']            = 'Mewngofnodwyd fel:';
+$lang['user']                  = 'Defnyddair';
+$lang['pass']                  = 'Cyfrinair';
+$lang['newpass']               = 'Cyfrinair newydd';
+$lang['oldpass']               = 'Cadarnhau cyfrinair cyfredol';
+$lang['passchk']               = 'unwaith eto';
+$lang['remember']              = 'Cofio fi';
+$lang['fullname']              = 'Enw go iawn';
+$lang['email']                 = 'E-Bost';
+$lang['profile']               = 'Proffil Defnyddiwr';
+$lang['badlogin']              = 'Sori, roedd y defnyddair neu\'r gyfriair yn anghywir.';
+$lang['badpassconfirm']        = 'Sori, roedd y cyfrinair yn anghywir';
+$lang['minoredit']             = 'Newidiadau Bach';
+$lang['draftdate']             = 'Awtogadwyd drafft ar'; // full dformat date will be added
+$lang['nosecedit']             = 'Newidiwyd y dudaen yn y cyfamser, roedd gwybodaeth yr adran wedi dyddio, felly llwythwyd y dudalen gyfan.';
+$lang['searchcreatepage']      = 'Os na wnaethoch chi ddod o hyd i\'r hyn roeddech chi am ddarganfod, gallwch chi greu neu golygu\'r dudalen wedi\'i henwi ar ôl eich ymholiad gyda\'r teclyn priodol.';
+
+$lang['regmissing']            = 'Sori, llenwch bob maes.';
+$lang['reguexists']            = 'Sori, mae defnyddiwr â\'r enw hwn yn bodoli eisoes.';
+$lang['regsuccess']            = 'Cafodd y defnyddiwr ei greu a chafodd y cyfrinair ei anfon gan ebost.';
+$lang['regsuccess2']           = 'Cafodd y defnyddiwr ei greu.';
+$lang['regfail']               = 'Doedd dim modd creu\'r defnyddiwr.';
+$lang['regmailfail']           = 'Mae\'n debyg roedd gwall wrth anfon y post cyfrinair. Cysylltwch â\'r gweinyddwr!';
+$lang['regbadmail']            = 'Mae\'r cyfeiriad ebost a gyflwynoch chi\'n edrych yn annilys - os ydych chi\'n credu ei fod yn gywir, cysylltwch â\'r gweinyddwr';
+$lang['regbadpass']            = '\'Dyw\'r ddau gyfrinair ddim yn unfath, ceisiwch eto.';
+$lang['regpwmail']             = 'Eich cyfrinair DokuWiki';
+$lang['reghere']               = '\'Sdim cyfrif \'da chi eto? Cewch afael yn un nawr';
+
+$lang['profna']                = '\'Dyw\'r wici hwn ddim yn caniatáu newid eich proffil';
+$lang['profnochange']          = 'Dim newidiadau, dim i\'w wneud.';
+$lang['profnoempty']           = '\'Sdim modd gadael eich enw neu\'ch cyfeiriad ebost chi\'n wag.';
+$lang['profchanged']           = 'Diweddarwyd eich proffil defnyddiwr yn llwyddiannus.';
+$lang['profnodelete']          = '\'Dyw\'r wici hwn ddim yn caniatáu dileu defnyddwyr';
+$lang['profdeleteuser']        = 'Dileu Cyfrif';
+$lang['profdeleted']           = 'Cafodd eich cyfrif defnyddiwr chi ei ddileu o\'r wiki hwn';
+$lang['profconfdelete']        = '\'Dwi eisiau tynnu fy nghyfrif oddi ar y wici hwn. <br/> \'Sdim modd dadwneud hyn.';
+$lang['profconfdeletemissing'] = 'Blwch gwirio heb ei dicio';
+$lang['proffail']              = 'Proffil defnyddiwr heb ei ddiweddaru.';
+
+$lang['pwdforget']             = 'Anghofio\'ch cyfrinair? Cael gafael ar un newydd';
+$lang['resendna']              = '\'Dyw\'r wici hwn ddim yn caniatáu ailanfon cyfrineiriau.';
+$lang['resendpwd']             = 'Gosod cyfrinair newydd ar gyfer';
+$lang['resendpwdmissing']      = 'Sori, mae\'n rhaid llenwi pob maes.';
+$lang['resendpwdnouser']       = 'Sori, \'dyn ni ddim yn gallu darganfod y defnyddiwr hwn yn ein databas ni.';
+$lang['resendpwdbadauth']      = 'Sori, \'dyw\'r cod dilysu hwn ddim yn ddilys. Sicrhewch eich bod chi wedi defnyddio\'r ddolen gadarnhau gyfan.';
+$lang['resendpwdconfirm']      = 'Cafodd ddolen gadarnhau ei hanfon gan ebost.';
+$lang['resendpwdsuccess']      = 'Cafodd eich cyfrinair newydd chi ei anfon gan ebost.';
+
+$lang['license']               = 'Heb law bod datganiad i\'r gwrthwyneb, mae cynnwys y wici hwn o dan y drwydded ganlynol:';
+$lang['licenseok']             = 'Sylwir: Gan olygu\'r dudalen hon rydych chi\'n cytuno i drwyddedu\'ch cynnwys chi o dan y drwydded ganlynol:';
+
+$lang['searchmedia']           = 'Chwilio enw ffeil:';
+$lang['searchmedia_in']        = 'Chwilio mewn %s';
+$lang['txt_upload']            = 'Dewis ffeil i\'w lanlwytho:';
+$lang['txt_filename']          = 'Upload as (optional):';
+$lang['txt_overwrt']           = 'Trosysgrifo ffeil sy\'n bodoli';
+$lang['maxuploadsize']         = 'Lanlwytho uchanfswm %s y ffeil.';
+$lang['lockedby']              = 'Clowyd yn bresennol gan:';
+$lang['lockexpire']            = 'Clo\'n dod i ben ar:';
+
+$lang['js']['willexpire']      = 'Mae\'ch clo ar gyfer golygu\'r dudalen hon yn mynd i ddod i ben mewn munud.\nEr mwyn osgoi gwrthdrawiadau defnyddiwch y botwm rhagolwg i ailosod amserydd y clo.';
+$lang['js']['notsavedyet']     = 'Caiff newidiadau heb gadw eu colli.';
+$lang['js']['searchmedia']     = 'Chwilio am ffeiliau';
+$lang['js']['keepopen']        = 'Cadw ffesnestr y dewisiad ar agor';
+$lang['js']['hidedetails']     = 'Cuddio Manylion';
+$lang['js']['mediatitle']      = 'Gosodiadau dolenni';
+$lang['js']['mediadisplay']    = 'Math y ddolen';
+$lang['js']['mediaalign']      = 'Aliniad';
+$lang['js']['mediasize']       = 'Maint y ddelwedd';
+$lang['js']['mediatarget']     = 'Targed y ddolen';
+$lang['js']['mediaclose']      = 'Cau';
+$lang['js']['mediainsert']     = 'Mewnosod';
+$lang['js']['mediadisplayimg'] = 'Dangos y ddelwedd.';
+$lang['js']['mediadisplaylnk'] = 'Dangos y ddolen yn unig.';
+$lang['js']['mediasmall']      = 'Fersiwn bach';
+$lang['js']['mediamedium']     = 'Fersiwn canolig';
+$lang['js']['medialarge']      = 'Fersiwn mawr';
+$lang['js']['mediaoriginal']   = 'Fersiwn gwreiddiol';
+$lang['js']['medialnk']        = 'Cysylltu i dudalen fanylion';
+$lang['js']['mediadirect']     = 'Cysylltiad uniongyrchol i\'r gwreiddiol';
+$lang['js']['medianolnk']      = 'Dim dolen';
+$lang['js']['medianolink']     = 'Peidio cysylltu i\'r dudalen';
+$lang['js']['medialeft']       = 'Alinio\'r ddelwedd i\'r chwith.';
+$lang['js']['mediaright']      = 'Alinio\'r ddelwedd i\'r dde.';
+$lang['js']['mediacenter']     = 'Alinio\'r ddelwedd i\'r canol.';
+$lang['js']['medianoalign']    = 'Peidio alinio.';
+$lang['js']['nosmblinks']      = 'Mae cysylltu gyda Windows shares dim ond yn gweithio gyda Microsoft Internet Explorer.\nGallwch chi gopïo a gludo\'r ddolen hefyd.';
+$lang['js']['linkwiz']         = 'Dewin Dolenni';
+$lang['js']['linkto']          = 'Cysylltu i:';
+$lang['js']['del_confirm']     = 'Gwir ddileu\'r eitem(au) a ddewiswyd?';
+$lang['js']['restore_confirm'] = 'Gwir adfer y fersiwn hwn?';
+$lang['js']['media_diff']          = 'Gweld gwahaniaethau:';
+$lang['js']['media_diff_both']     = 'Ochr wrth Ochr';
+$lang['js']['media_diff_opacity']  = 'Tywynnu-drwodd';
+$lang['js']['media_diff_portions'] = 'Taro'; //Swipe - rhaid bod gwell ateb i hwn
+$lang['js']['media_select']        = 'Dewis ffeiliau…';
+$lang['js']['media_upload_btn']    = 'Lanlwytho';
+$lang['js']['media_done_btn']      = 'Gorffen';
+$lang['js']['media_drop']          = 'Gollwng ffeiliau yma i\'w lanlwytho';
+$lang['js']['media_cancel']        = 'tynnu';
+$lang['js']['media_overwrt']       = 'Trosysgrifo ffeiliau sy\'n bodoli';
+
+$lang['rssfailed']             = 'Roedd gwall wrth hôl y ffrwd hwn: ';
+$lang['nothingfound']          = 'Dim wedi\'i ddarganfod.';
+
+$lang['mediaselect']           = 'Ffeiliau Cyfrwng';
+$lang['uploadsucc']            = 'Lanlwythiad llwyddiannus';
+$lang['uploadfail']            = 'Methodd y lanlwythiad. Hawliau anghywir efallai?';
+$lang['uploadwrong']           = 'Gwrthodwyd y lanlwythiad. Gwaherddir yr estyniad ffeil hwn!';
+$lang['uploadexist']           = 'Mae\'r ffeil eisoes yn bodoli. Dim wedi\'i wneud.';
+$lang['uploadbadcontent']      = 'Doedd y cynnwys a lanlwythwyd ddim yn cydweddu ag estyniad ffeil %s.';
+$lang['uploadspam']            = 'Cafodd y lanlwythiad ei flocio gan rhestr wahardd sbam.';
+$lang['uploadxss']             = 'Cafodd y lanlwythiad ei flocio efallai oherwydd cynnwys maleisus.';
+$lang['uploadsize']            = 'Roedd y ffeil a lanlwythwyd yn rhy fawr. (uchaf. %s)';
+$lang['deletesucc']            = 'Cafodd ffeil "%s" ei dileu.';
+$lang['deletefail']            = 'Doedd dim modd dileu "%s" - gwiriwch hawliau.';
+$lang['mediainuse']            = 'Doedd "%s" heb ei dileu - mae\'n cael ei defnyddio ar hyn o bryd.';
+$lang['namespaces']            = 'Namespaces'; //namespace
+$lang['mediafiles']            = 'Ffeiliau ar gael mewn';
+$lang['accessdenied']          = '\'Sdim hawl \'da chi weld y dudalen hon.';
+$lang['mediausage']            = 'Defnyddiwch y gystrawen ganlynol i gyfeirio at y ffeil hon:';
+$lang['mediaview']             = 'Dangos y ffeil wreiddiol';
+$lang['mediaroot']             = 'gwraidd';
+$lang['mediaupload']           = 'lanlwythwch ffeil i\'r namespace cyfredol yma. Er mwy creu is-namespace, ychwanegwch nhw o flaen enw\'r ffeil gan eu gwahanu nhw gyda cholonau, ar ôl i chi ddewis y ffeiliau. Gall ffeiliau hefyd eu dewis gan lusgo a gollwng.'; //namespace
+$lang['mediaextchange']        = 'Newidiwyd yr estyniad o .%s i .%s!';
+$lang['reference']             = 'Cyfeirnodau ar gyfer';
+$lang['ref_inuse']             = '\'Sdim modd dileu\'r ffeil hon, oherwydd ei bod hi\'n dal yn cael ei defnyddio gan y tudalennau canlynol:';
+$lang['ref_hidden']            = 'Mae rhai cyfeirnodau ar dudalennau \'sdim hawl \'da chi weld';
+
+$lang['hits']                  = 'Trawiadau';
+$lang['quickhits']             = 'Enw tudalennau\'n cydweddu';
+$lang['toc']                   = 'Tabl Cynnwys';
+$lang['current']               = 'cyfredol';
+$lang['yours']                 = 'Eich Fersiwn';
+$lang['diff']                  = 'Dangos gwahaniaethau i\'r adolygiadau cyfredol';
+$lang['diff2']                 = 'Dangos gwahaniaethau rhwng adolygiadau a ddewiswyd';
+$lang['difflink']              = 'Cysylltu i\'r olwg gymharu hon';
+$lang['diff_type']             = 'Dangos gwahaniaethau:';
+$lang['diff_inline']           = 'Mewnlin';
+$lang['diff_side']             = 'Ochr wrth Ochr';
+$lang['diffprevrev']           = 'Adolygiad blaenorol';
+$lang['diffnextrev']           = 'Adolygiad nesaf';
+$lang['difflastrev']           = 'Adolygiad diwethaf';
+$lang['diffbothprevrev']       = 'Dwy ochr yr adolygiad blaenorol';
+$lang['diffbothnextrev']       = 'Dwy ochr yr adolygiad nesaf';
+$lang['line']                  = 'Llinell';
+$lang['breadcrumb']            = 'Olrhain:';
+$lang['youarehere']            = 'Rydych chi yma:';
+$lang['lastmod']               = 'Newidiwyd ddiwethaf:';
+$lang['by']                    = 'gan';
+$lang['deleted']               = 'tynnwyd';
+$lang['created']               = 'crewyd';
+$lang['restored']              = 'adferwyd hen adolygiad (%s)';
+$lang['external_edit']         = 'golygiad allanol';
+$lang['summary']               = 'Crynodeb golygiad';
+$lang['noflash']               = 'Mae angen <a href="http://www.adobe.com/products/flashplayer/">Ategyn Adobe Flash</a> i ddangos y cynnwys hwn.';
+$lang['download']              = 'Lawrlwytho Darn';
+$lang['tools']                 = 'Teclynnau';
+$lang['user_tools']            = 'Teclynnau Defnyddiwr';
+$lang['site_tools']            = 'Teclynnau Safle';
+$lang['page_tools']            = 'Teclynnau Tudalennau';
+$lang['skip_to_content']       = 'nedio i\'r cynnwys';
+$lang['sidebar']               = 'Bar ochr';
+
+$lang['mail_newpage']          = 'ychwanegwyd tudalen:';
+$lang['mail_changed']          = 'newidiwyd tudalen:';
+$lang['mail_subscribe_list']   = 'newidiwyd tudalennau mewn namespace:'; //namespace
+$lang['mail_new_user']         = 'defnyddiwr newydd:';
+$lang['mail_upload']           = 'lanlwythwyd ffeil:';
+
+$lang['changes_type']          = 'Dangos newidiadau mewn';
+$lang['pages_changes']         = 'Tudalennau';
+$lang['media_changes']         = 'Ffeiliau cyfrwng';
+$lang['both_changes']          = 'Tudalennau a ffeiliau cyfrwng';
+
+$lang['qb_bold']               = 'Testun Bras';
+$lang['qb_italic']             = 'Testun Italig';
+$lang['qb_underl']             = 'Testun wedi\'i Danlinellu';
+$lang['qb_code']               = 'Testun Unbylchog';
+$lang['qb_strike']             = 'Testun Llinell Drwodd';
+$lang['qb_h1']                 = 'Pennawd Lefel 1';
+$lang['qb_h2']                 = 'Pennawd Lefel 2';
+$lang['qb_h3']                 = 'Pennawd Lefel 3';
+$lang['qb_h4']                 = 'Pennawd Lefel 4';
+$lang['qb_h5']                 = 'Pennawd Lefel 5';
+$lang['qb_h']                  = 'Pennawd';
+$lang['qb_hs']                 = 'Dewis Pennawd';
+$lang['qb_hplus']              = 'Pennawd Uwch';
+$lang['qb_hminus']             = 'Pennawd Is';
+$lang['qb_hequal']             = 'Pennawd yr un Lefel';
+$lang['qb_link']               = 'Dolen fewnol';
+$lang['qb_extlink']            = 'Dolen allanol';
+$lang['qb_hr']                 = 'Llinell Lorweddol';
+$lang['qb_ol']                 = 'Eitem Rhestr Drefnedig';
+$lang['qb_ul']                 = 'Eitem Rhestr Rifol';
+$lang['qb_media']              = 'Ychwanegu Delweddau a ffeiliau eraill (agor mewn ffenestr newydd)';
+$lang['qb_sig']                = 'Mewnosod Llofnod';
+$lang['qb_smileys']            = 'Gwenogluniau';
+$lang['qb_chars']              = 'Nodau Arbennig';
+
+$lang['upperns']               = 'neidio i namespace uwch'; //namespace
+
+$lang['metaedit']              = 'Golygu Metadata';
+$lang['metasaveerr']           = 'Methwyd ysgrifennu metadata';
+$lang['metasaveok']            = 'Cadwyd y metadata';
+$lang['img_title']             = 'Teitl:';
+$lang['img_caption']           = 'Egluryn:';
+$lang['img_date']              = 'Dyddiad:';
+$lang['img_fname']             = 'Enw ffeil:';
+$lang['img_fsize']             = 'Maint:';
+$lang['img_artist']            = 'Ffotograffydd:';
+$lang['img_copyr']             = 'Hawlfraint:';
+$lang['img_format']            = 'Fformat:';
+$lang['img_camera']            = 'Camera:';
+$lang['img_keywords']          = 'Allweddeiriau:';
+$lang['img_width']             = 'Lled:';
+$lang['img_height']            = 'Uchder:';
+
+$lang['subscr_subscribe_success']   = 'Ychwanegwyd %s i\'r rhestr danysgrifio ar gyfer %s';
+$lang['subscr_subscribe_error']     = 'Gwall wrth ychwanegu %s i\'r rhestr danysgrifio ar gyfer %s';
+$lang['subscr_subscribe_noaddress'] = '\'Sdim cyfeiriad wedi\'i gysylltu gyda\'ch defnyddair, felly \'sdim modd eich ychwanegu chi i\'r rhestr danysgrifio';
+$lang['subscr_unsubscribe_success'] = 'Tynnwyd %s o\'r rhestr danysgrifio ar gyfer %s';
+$lang['subscr_unsubscribe_error']   = 'Roedd gwall wrth dynnu %s o\'r rhestr danysgrfio ar gyfer %s';
+$lang['subscr_already_subscribed']  = 'Mae %s eisoes wedi tanysgrifio i %s';
+$lang['subscr_not_subscribed']      = '\'Dyw %s heb danysgrifio i %s';
+// Manage page for subscriptions
+$lang['subscr_m_not_subscribed']    = '\'Dych chi heb danysgrifio i\'r dudalen gyfredol neu\'r namespace, yn bresennol.'; //namespace
+$lang['subscr_m_new_header']        = 'Ychwanegu tanysgrifiad';
+$lang['subscr_m_current_header']    = 'Tanysgrifiadau cyfredol';
+$lang['subscr_m_unsubscribe']       = 'Tynnu tanysgrifiad';
+$lang['subscr_m_subscribe']         = 'Tanysgrifio';
+$lang['subscr_m_receive']           = 'Derbyn';
+$lang['subscr_style_every']         = 'ebost ar bob newid';
+$lang['subscr_style_digest']        = 'ebost cryno o\'r newidiadau ar bob tudalen (pob %.2f diwrnod)';
+$lang['subscr_style_list']          = 'rhestr o dudalennau a newidiwyd ers yr ebost diwethaf (pob %.2f diwrnod)';
+
+/* auth.class language support */
+$lang['authtempfail']          = '\'Dyw dilysiad defnyddiwr ddim ar gael yn bresennol (dros dro). Os ydy\'r sefyllfa\'n parhau, cysylltwch â gweinyddwr y wici.';
+
+/* installer strings */
+$lang['i_chooselang']          = 'Dewiswch eich iaith';
+$lang['i_installer']           = 'Arsefydlwr DokuWiki';
+$lang['i_wikiname']            = 'Enw Wici';
+$lang['i_enableacl']           = 'Galluogi ACL (awgrymwyd)';
+$lang['i_superuser']           = 'Uwchddefnyddiwr';
+$lang['i_problems']            = 'Gwnaeth yr arsefydlwr ddod o hyd i broblemau, isod. \'Sdim modd parhau nes i chi eu datrys nhw.';
+$lang['i_modified']            = 'Oherwydd rhesymau diogelwch, bydd y sgript hwn dim ond yn gweithio gydag arsefydliad DokuWiki newydd sydd heb ei newid.
+                                  Dylech chi naill ai ail-echdynnu\'r ffeiliau o\'r pecyn a lawrlwythwyd neu porwch dros y
+                                  <a href="http://dokuwiki.org/install">canllawiau arsefydylu Dokuwiki</a> cyfan';
+$lang['i_funcna']              = 'Swyddogaeth PHP <code>%s</code> ddim ar gael. Posib bod eich gwesteiwr wedi\'i hanalluogi am ryw reswm?';
+$lang['i_phpver']              = 'Mae\'ch fersiwn PHP <code>%s</code> yn is na\'r hyn sydd ei angen <code>%s</code>. Mae angen i chi ddiweddaru eich arsefydliad PHP.';
+$lang['i_mbfuncoverload']      = 'Mae\'n rhaid analluogi mbstring.func_overload mewn php.ini er mwyn rhedeg DokuWiki.';
+$lang['i_permfail']            = '\'Dyw DokuWiki ddim yn gallu ysgrifennu i <code>%s</code>. Mae angen newid gosodiadau hawliau ar gyfer y ffolder hwn!';
+$lang['i_confexists']          = 'Mae <code>%s</code> eisoes yn bodoli';
+$lang['i_writeerr']            = 'Methu creu <code>%s</code>. Bydd angen i chi wirio hawliau ffolder/ffeil a chreu\'r ffeil gan law.';
+$lang['i_badhash']             = 'dokuwiki.php heb ei adnabod neu wedi\'i newid (hash=<code>%s</code>)';
+$lang['i_badval']              = '<code>%s</code> - gwerth anghyfreithlon neu wag';
+$lang['i_success']             = 'Gorffennodd y ffurfwedd yn llwyddiannus. Gallwch chi ddileu\'r ffeil install.php nawr. Ewch
+                                 <a href="doku.php?id=wiki:welcome">i\'ch DokuWiki newydd</a>.';
+$lang['i_failure']             = 'Ymddangosodd gwallau wrth ysgrifennu\'r ffeiliau ffurfwedd. Bydd angen i chi eu cywiro
+                                  nhw gan law cyn gallwch chi ddefnyddio\'ch <a href="doku.php?id=wiki:welcome">DokuWiki newydd</a>.';
+$lang['i_policy']              = 'Polisi ACL cychwynnol';
+$lang['i_pol0']                = 'Wici Agored (darllen, ysgrifennu, lanlwytho i bawb)';
+$lang['i_pol1']                = 'Wici Cyhoeddus (darllen i bawb, ysgrifennu a lanlwytho i ddefnyddwyr cofrestredig)';
+$lang['i_pol2']                = 'Wici Caeedig (darllen, ysgrifennu, lanlwytho i ddefnyddwyr cofrestredig yn unig)';
+$lang['i_allowreg']            = 'Caniatáu defnyddwyr i gofrestru eu hunain';
+$lang['i_retry']               = 'Ailgeisio';
+$lang['i_license']             = 'Dewiswch y drwydded rydych chi am osod ar eich cynnwys:';
+$lang['i_license_none']        = 'Peidio â dangos unrhyw wybodaeth drwyddedu';
+$lang['i_pop_field']           = 'Plis, helpwch ni i wella\'r profiad o ddefnyddio DokuWiki:';
+$lang['i_pop_label']           = 'Anfon data defnydd anhysbys i ddatblygwyr DokuWiki unwaith y mis';
+
+$lang['recent_global']         = 'Yn bresennol, rydych chi\'n gwylio newidiadau tu fewn namespace <b>%s</b>. Gallwch chi hefyd <a href="%s">weld y newidiadau diweddar ar gyfer y wici cyfan</a>.'; //namespace
+
+$lang['years']                 = '%d blynedd yn ôl';
+$lang['months']                = '%d mis yn ôl';
+$lang['weeks']                 = '%d wythnos yn ôl';
+$lang['days']                  = '%d diwrnod yn ôl';
+$lang['hours']                 = '%d awr yn ôl';
+$lang['minutes']               = '%d munud yn ôl';
+$lang['seconds']               = '%d eiliad yn ôl';
+
+$lang['wordblock']             = 'Doedd eich newid heb gadw gan ei fod yn cynnwys testun wedi\'i flocio (sbam).';
+
+$lang['media_uploadtab']       = 'Lanlwytho';
+$lang['media_searchtab']       = 'Chwilio';
+$lang['media_file']            = 'Ffeil';
+$lang['media_viewtab']         = 'Golwg';
+$lang['media_edittab']         = 'Golygu';
+$lang['media_historytab']      = 'Hanes';
+$lang['media_list_thumbs']     = 'Bawdlun';
+$lang['media_list_rows']       = 'Rhesi';
+$lang['media_sort_name']       = 'Enw';
+$lang['media_sort_date']       = 'Dyddiad';
+$lang['media_namespaces']      = 'Dewis namespace'; //namespace
+$lang['media_files']           = 'Ffeiliau mewn %s';
+$lang['media_upload']          = 'Lanlwytho i %s';
+$lang['media_search']          = 'Chwilio mewn %s';
+$lang['media_view']            = '%s';
+$lang['media_viewold']         = '%s ar %s';
+$lang['media_edit']            = 'Golygu %s';
+$lang['media_history']         = 'Hanes %s';
+$lang['media_meta_edited']     = 'golygwyd metadata';
+$lang['media_perm_read']       = 'Sori, ond \'sdim digon o hawliau \'da chi i ddarllen ffeiliau.';
+$lang['media_perm_upload']     = 'Sori, ond \'sdim digon o hawliau \'da chi i lanlwytho ffeiliau.';
+$lang['media_update']          = 'Lanlwytho fersiwn newydd';
+$lang['media_restore']         = 'Adfer y fersiwn hwn';
+$lang['media_acl_warning']     = 'Gall y rhestr hon fod yn anghyflawn oherwydd cyfyngiadau ACL a thudalennau coll.';
+
+$lang['currentns']             = 'Namespace cyfredol'; //namespace
+$lang['searchresult']          = 'Canlyniad Chwilio';
+$lang['plainhtml']             = 'HTML Plaen';
+$lang['wikimarkup']            = 'Iaith Wici';
+$lang['page_nonexist_rev']     = 'Doedd y dudalen ddim yn bodoli ar %s. Cafodd ei chreu wedyn ar <a href="%s">%s</a>.';
+$lang['unable_to_parse_date']  = 'Methu dosbarthu ar baramedr "%s".';
+//Setup VIM: ex: et ts=2 :
diff --git a/inc/lang/cy/locked.txt b/inc/lang/cy/locked.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4c7865dd01ca63a5c663aaa7ce2324187e8f127b
--- /dev/null
+++ b/inc/lang/cy/locked.txt
@@ -0,0 +1,3 @@
+====== Tudalen ar glo ======
+
+Mae'r dudalen hon wedi'i chloi ar gyfer golygu gan ddefnyddiwr arall. Bydd yn rhaid i chi aros tan i'r defnyddiwr orffen golygu neu tan fod y cyfnod cloi yn dod i ben.
diff --git a/inc/lang/cy/login.txt b/inc/lang/cy/login.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dbdde0e67e8e12f610a5f4ff71a4870c82b80171
--- /dev/null
+++ b/inc/lang/cy/login.txt
@@ -0,0 +1,4 @@
+====== Mewngofnodi ======
+
+'Dych chi heb fewngofnodi! Rhowch eich manylion mewngofnodi isod. Mae angen galluogi cwcis er mwyn mewngofnodi.
+
diff --git a/inc/lang/cy/mailtext.txt b/inc/lang/cy/mailtext.txt
new file mode 100644
index 0000000000000000000000000000000000000000..27462332e9a0beff45ff587b370a18a3a37daafe
--- /dev/null
+++ b/inc/lang/cy/mailtext.txt
@@ -0,0 +1,17 @@
+Cafodd tudalen yn eich DokuWiki ei hychwanegu neu newid. Dyma'r manylion:
+
+Dyddiad         : @DATE@
+Porwr           : @BROWSER@
+Cyfeiriad-IP    : @IPADDRESS@
+Gwesteiwr       : @HOSTNAME@
+Hen Adolygiad   : @OLDPAGE@
+Adolygiad Newydd: @NEWPAGE@
+Crynodeb Golygu : @SUMMARY@
+Defnyddiwr      : @USER@
+
+@DIFF@
+
+
+-- 
+Cafodd y neges hon ei generadyu gan DokuWiki ar
+@DOKUWIKIURL@
diff --git a/inc/lang/cy/mailwrap.html b/inc/lang/cy/mailwrap.html
new file mode 100644
index 0000000000000000000000000000000000000000..254fcca7a411e37af0a070b21ba4125427866ddb
--- /dev/null
+++ b/inc/lang/cy/mailwrap.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+    <title>@TITLE@</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+</head>
+<body>
+
+@HTMLBODY@
+
+<br /><hr />
+<small>Cafodd y neges hon ei generadu gan DokuWiki ar @DOKUWIKIURL@.</small>
+</body>
+</html>
diff --git a/inc/lang/cy/newpage.txt b/inc/lang/cy/newpage.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dfe8a79d9ea22a41578a35ff0f70b9bf25c90522
--- /dev/null
+++ b/inc/lang/cy/newpage.txt
@@ -0,0 +1,4 @@
+====== 'Dyw'r testun hwn ddim yn bodoli eto ======
+
+Rydych chi wedi dilyn dolen i destun sy ddim yn bodoli eto. Os oes hawliau 'da chi, gallwch chi ei greu gan bwyso ar "Creu y dudalen hon".
+
diff --git a/inc/lang/cy/norev.txt b/inc/lang/cy/norev.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7d978c55022711b2d368794db94a28396a85b29a
--- /dev/null
+++ b/inc/lang/cy/norev.txt
@@ -0,0 +1,4 @@
+====== Adolygiad ddim y bodoli ======
+
+'Dyw'r adolygiad hwn ddim yn bodoli. Pwyswch ar "Hen adolygiadau" am restr o hen adolygiadau'r ddogfen hon.
+
diff --git a/inc/lang/cy/password.txt b/inc/lang/cy/password.txt
new file mode 100644
index 0000000000000000000000000000000000000000..da0678ef32006529d6b20ee1a833a45607d375b1
--- /dev/null
+++ b/inc/lang/cy/password.txt
@@ -0,0 +1,10 @@
+Shw mae @FULLNAME@!
+
+Dyma'ch manylion ar gyfer @TITLE@ ar @DOKUWIKIURL@
+
+Defnyddair  : @LOGIN@
+Cyfrinair   : @PASSWORD@
+
+-- 
+Cafodd y neges hon ei generadu gan DokuWiki ar
+@DOKUWIKIURL@
diff --git a/inc/lang/cy/preview.txt b/inc/lang/cy/preview.txt
new file mode 100644
index 0000000000000000000000000000000000000000..477879d51c55e7d28060db3fc87bda8bbba87c1e
--- /dev/null
+++ b/inc/lang/cy/preview.txt
@@ -0,0 +1,4 @@
+====== Rhagolwg ======
+
+Dyma ragolwg o sut fydd eich testun yn edrych. Cofiwch: 'Dyw e **heb ei gadw** 'to!
+
diff --git a/inc/lang/cy/pwconfirm.txt b/inc/lang/cy/pwconfirm.txt
new file mode 100644
index 0000000000000000000000000000000000000000..529571e14c20206babfeef998b24ce2bc4a60853
--- /dev/null
+++ b/inc/lang/cy/pwconfirm.txt
@@ -0,0 +1,15 @@
+Shw mae @FULLNAME@!
+
+Mae rhywun wedi gofyn am gyfrinair newydd ar gyfer eich manylion
+@TITLE@ ar @DOKUWIKIURL@
+
+Os na wnaethoch chi ofyn am gyfrinair newydd, anwybyddwch yr e-bost hwn.
+
+I gadarnhau daeth y cais oddi wrthoch chi, pwyswch y ddolen isod.
+
+@CONFIRM@
+
+--
+Cafodd y neges hon ei generadu gan DokuWiki ar
+@DOKUWIKIURL@
+
diff --git a/inc/lang/cy/read.txt b/inc/lang/cy/read.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8703ef9374bb94b46d99eef142ec27e04e6d2c6b
--- /dev/null
+++ b/inc/lang/cy/read.txt
@@ -0,0 +1,2 @@
+Mae'r dudalen hon i'w darllen yn unig. Gallwch chi edrych ar y ffynhonnell, ond nid ei newid hi. Cysylltwch â'ch gweinyddwr chi os ydych chi'n meddwl bod hwn yn anghywir.
+
diff --git a/inc/lang/cy/recent.txt b/inc/lang/cy/recent.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2affbf9050d17511e976ba4df5f3b013e6641013
--- /dev/null
+++ b/inc/lang/cy/recent.txt
@@ -0,0 +1,5 @@
+====== Newidiadau Diweddar ======
+
+Cafodd y tudalennau canlynol eu newid yn ddiweddar.
+
+
diff --git a/inc/lang/cy/register.txt b/inc/lang/cy/register.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6fbc8505622ce389d4c8da69e5245df287b94b1f
--- /dev/null
+++ b/inc/lang/cy/register.txt
@@ -0,0 +1,4 @@
+====== Cofrestru fel defnyddiwr newydd ======
+
+Llenwch yr holl wybodaeth isod i greu cyfrif newydd ar y wici hwn. Sicrhewch eich bod chi'n cynnwys **cyfeiriad e-bost dilys** - os na chewch chi'ch annog am gyfrinair, caiff un ei anfon i'ch cyfeiriad. Dylai'r enw mewngofnodi fod yn [[doku>pagename|enw tudalen]] dilys.
+
diff --git a/inc/lang/cy/registermail.txt b/inc/lang/cy/registermail.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0cb2b4fd230d280425a4771ec98676cf80527b88
--- /dev/null
+++ b/inc/lang/cy/registermail.txt
@@ -0,0 +1,14 @@
+Cofrestrodd defnyddiwr newydd. Dyma'r manylion:
+
+Defnyddair   : @NEWUSER@
+Enw llawn    : @NEWNAME@
+E-bost       : @NEWEMAIL@
+
+Dyddiad      : @DATE@
+Porwr        : @BROWSER@
+Cyfeiriad-IP : @IPADDRESS@
+Gwesteiwr    : @HOSTNAME@
+
+-- 
+Cafodd y neges hon ei generadu gan DokuWiki ar
+@DOKUWIKIURL@
diff --git a/inc/lang/cy/resendpwd.txt b/inc/lang/cy/resendpwd.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ddad8a906b2d981bbccdbf393b43df31fdd1ec26
--- /dev/null
+++ b/inc/lang/cy/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Anfon cyfrinair newydd ======
+
+Ailgyflwynwch eich defnyddair yn y ffurflen isod i wneud cais am gyfrinair newydd i'ch cyfrif ar y wici hwn. Caiff ddolen gadarnhau ei hanfon i chi drwy eich e-bost cofrestredig.
+
diff --git a/inc/lang/cy/resetpwd.txt b/inc/lang/cy/resetpwd.txt
new file mode 100644
index 0000000000000000000000000000000000000000..57f19928e817fb201424af205238ef04cbca5171
--- /dev/null
+++ b/inc/lang/cy/resetpwd.txt
@@ -0,0 +1,4 @@
+====== Gosod cyfrinair newydd ======
+
+Rhowch gyfrinair newydd i'ch cyfrif ar y wici hwn.
+
diff --git a/inc/lang/cy/revisions.txt b/inc/lang/cy/revisions.txt
new file mode 100644
index 0000000000000000000000000000000000000000..afbc9fed28d656d54933c0610d90a0d5e721eda0
--- /dev/null
+++ b/inc/lang/cy/revisions.txt
@@ -0,0 +1,4 @@
+====== Hen Adolygiadau ======
+
+Dyma adolygiadau hŷn y ddogfen gyfredol. I droi'n ôl i hen adolygiad, dewiswch e isod a phwyso ''Golygu'r dudalen hon'' a'i gadw.
+
diff --git a/inc/lang/cy/searchpage.txt b/inc/lang/cy/searchpage.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fd554e1e70ef61e28b4fec80c7b28bd8fe21a395
--- /dev/null
+++ b/inc/lang/cy/searchpage.txt
@@ -0,0 +1,5 @@
+====== Chwilio ======
+
+Gallwch chi ddarganfod canlyniadau eich chwiliad isod. @CREATEPAGEINFO@
+
+===== Canlyniadau =====
diff --git a/inc/lang/cy/showrev.txt b/inc/lang/cy/showrev.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6cc9d6c2eea3381bf1ce17c78f324ee698e82a8a
--- /dev/null
+++ b/inc/lang/cy/showrev.txt
@@ -0,0 +1,2 @@
+**Dyma hen adolygiad y ddogfen!**
+----
diff --git a/inc/lang/ku/stopwords.txt b/inc/lang/cy/stopwords.txt
similarity index 69%
rename from inc/lang/ku/stopwords.txt
rename to inc/lang/cy/stopwords.txt
index bc6eb48aea08f241e220bc59d6d6851acfb8e381..2ac4c3174cd8686747dfd2ea485ce8c31bd28b06 100644
--- a/inc/lang/ku/stopwords.txt
+++ b/inc/lang/cy/stopwords.txt
@@ -2,28 +2,30 @@
 # When you edit this file be sure to use UNIX line endings (single newline)
 # No need to include words shorter than 3 chars - these are ignored anyway
 # This list is based upon the ones found at http://www.ranks.nl/stopwords/
-about
-are
-and
-you
-your
-them
-their
-com
-for
-from
-into
-how
-that
-the
-this
-was
-what
-when
-where
-who
-will
-with
-und
-the
-www
+allan
+beth
+ble
+bydd
+chi
+dyma
+dyna
+eich
+gyda
+hefyd
+hon
+honna
+hwn
+hwnnw
+hwy
+hyn
+hynny
+mewn
+nhw
+oddi
+oedd
+pan
+pwy
+roedd
+sut
+wrth
+www
\ No newline at end of file
diff --git a/inc/lang/cy/subscr_digest.txt b/inc/lang/cy/subscr_digest.txt
new file mode 100644
index 0000000000000000000000000000000000000000..611e0570924f24a04e9080aa1e4282fa505894d5
--- /dev/null
+++ b/inc/lang/cy/subscr_digest.txt
@@ -0,0 +1,20 @@
+Shw mae!
+
+Gwnaeth y dudalen @PAGE@ mewn wici @TITLE@ newid.
+Dyma'r newidiadau:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Hen Adolygiad: @OLDPAGE@
+Adolygiad Newydd: @NEWPAGE@
+
+I ganslo hysbysiadau tudalen, mewngofnodwch i'r wici ar
+@DOKUWIKIURL@ ac yna ewch i
+@SUBSCRIBE@
+a thanysgrifio o newidiadau tudalen a/neu namespace.
+
+-- 
+Cafodd y neges hon ei generadu gan DokuWiki ar
+@DOKUWIKIURL@
diff --git a/inc/lang/cy/subscr_form.txt b/inc/lang/cy/subscr_form.txt
new file mode 100644
index 0000000000000000000000000000000000000000..47d1a1715b4bc342c0353051c254e723a5cc601f
--- /dev/null
+++ b/inc/lang/cy/subscr_form.txt
@@ -0,0 +1,3 @@
+====== Rheoli Tanysgrifiad ======
+
+Mae'r dudalen hon yn eich galluogi i reoli'ch tanysgrifiadau ar gyfer y dudalen gyfredol a'r namespace.
diff --git a/inc/lang/cy/subscr_list.txt b/inc/lang/cy/subscr_list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..592f29028a1df3dcbef703516c6f4348cb1c11da
--- /dev/null
+++ b/inc/lang/cy/subscr_list.txt
@@ -0,0 +1,17 @@
+Shw mae!
+
+Gwnaeth tudalennau yn y namespace @PAGE@ o'r wici @TITLE@ newid.
+Dyma'r tudaalennau sydd wedi newid:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+I ganslo hysbysiadau'r dudalen, mewngofnodwch i'r wici ar
+@DOKUWIKIURL@ yna ewch i
+@SUBSCRIBE@
+a thanysgrifio o newidiadau tudalen a/neu namespace.
+
+-- 
+Cafodd y neges hon ei generadu gan DokuWiki ar
+@DOKUWIKIURL@
diff --git a/inc/lang/cy/subscr_single.txt b/inc/lang/cy/subscr_single.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2a774ebd28728667c7d37351e3909d7d787991a5
--- /dev/null
+++ b/inc/lang/cy/subscr_single.txt
@@ -0,0 +1,23 @@
+Shw mae!
+
+Gwnaeth y dudalen @PAGE@ yn y wici @TITLE@ newid.
+Dyma'r newidiadau:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Dyddiad          : @DATE@
+Defnyddiwr       : @USER@
+Crynodeb Golygu  : @SUMMARY@
+Hen Adolygiad    : @OLDPAGE@
+Adolygiad Newwydd: @NEWPAGE@
+
+I ganslo hysbysiadau'r dudalen, mewngofnodwch i'r wici ar
+@DOKUWIKIURL@ yna ewch i
+@SUBSCRIBE@
+a thanysgrifio o newidiadau tudalen a namespace.
+
+-- 
+Cafodd y neges hon ei generadu gan DokuWiki ar
+@DOKUWIKIURL@
diff --git a/inc/lang/cy/updateprofile.txt b/inc/lang/cy/updateprofile.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ce9ca503f3e5955feacdbc1e83c3850d01b6284d
--- /dev/null
+++ b/inc/lang/cy/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Diweddaru proffil eich cyfrif ======
+
+Newidiwch y meysydd rydych chi amm newid yn unig.  'Sdim modd i chi newid eich defnyddair.
+
+
diff --git a/inc/lang/cy/uploadmail.txt b/inc/lang/cy/uploadmail.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8102232a3512578ed0b08f67845a702876b53560
--- /dev/null
+++ b/inc/lang/cy/uploadmail.txt
@@ -0,0 +1,15 @@
+Cafodd ffeil ei lanlwytho i'ch DokuWiki. Dyma'r manylion:
+
+Ffeil         : @MEDIA@
+Hen adolygiad : @OLD@
+Dyddiad       : @DATE@
+Porwr         : @BROWSER@
+Cyfeiriad-IP  : @IPADDRESS@
+Gwesteiwr     : @HOSTNAME@
+Maint         : @SIZE@
+Teip MIME     : @MIME@
+Defnyddiwr    : @USER@
+
+-- 
+Cafodd y neges hon ei generadu gan DokuWiki ar
+@DOKUWIKIURL@
diff --git a/inc/lang/da/denied.txt b/inc/lang/da/denied.txt
index 7bf3b8b9be3251b0b9e4923a6b1c317301326426..217d8937e5cd85959904a12ee10a7ae036be81e8 100644
--- a/inc/lang/da/denied.txt
+++ b/inc/lang/da/denied.txt
@@ -1,3 +1,3 @@
-====== Adgang nægtet! ======
+====== Adgang nægtet ======
 
 Du har ikke rettigheder til at fortsætte.
diff --git a/inc/lang/da/lang.php b/inc/lang/da/lang.php
index 3b353d50cc8209435b4da983cef93908f48486f3..ee8a92cf03bd90b8c118ee7b7886115eac383f58 100644
--- a/inc/lang/da/lang.php
+++ b/inc/lang/da/lang.php
@@ -19,6 +19,7 @@
  * @author soer9648 <soer9648@eucl.dk>
  * @author Søren Birk <sbi@eucl.dk>
  * @author Søren Birk <soer9648@eucl.dk>
+ * @author Jacob Palm <mail@jacobpalm.dk>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -50,7 +51,6 @@ $lang['btn_update']            = 'Opdatér';
 $lang['btn_delete']            = 'Slet';
 $lang['btn_back']              = 'Tilbage';
 $lang['btn_backlink']          = 'Henvisninger bagud';
-$lang['btn_backtomedia']       = 'Tilbage til valg af mediefil';
 $lang['btn_subscribe']         = 'Abonnér på ændringer';
 $lang['btn_profile']           = 'Opdatér profil';
 $lang['btn_reset']             = 'Nulstil';
@@ -58,7 +58,7 @@ $lang['btn_resendpwd']         = 'Vælg ny adgangskode';
 $lang['btn_draft']             = 'Redigér kladde';
 $lang['btn_recover']           = 'Gendan kladde';
 $lang['btn_draftdel']          = 'Slet kladde';
-$lang['btn_revert']            = 'Reetablér';
+$lang['btn_revert']            = 'Gendan';
 $lang['btn_register']          = 'Registrér';
 $lang['btn_apply']             = 'Anvend';
 $lang['btn_media']             = 'Media Manager';
@@ -76,7 +76,7 @@ $lang['fullname']              = 'Fulde navn';
 $lang['email']                 = 'E-mail';
 $lang['profile']               = 'Brugerprofil';
 $lang['badlogin']              = 'Brugernavn eller adgangskode var forkert.';
-$lang['badpassconfirm']        = 'Kodeordet var desværre forkert';
+$lang['badpassconfirm']        = 'Adgangkode var desværre forkert';
 $lang['minoredit']             = 'Mindre ændringer';
 $lang['draftdate']             = 'Kladde automatisk gemt d.';
 $lang['nosecedit']             = 'Siden blev ændret i mellemtiden, sektions information var for gammel, hentede hele siden i stedet.';
@@ -88,26 +88,26 @@ $lang['regsuccess2']           = 'Du er nu oprettet som bruger.';
 $lang['regmailfail']           = 'Dit adgangskode blev ikke sendt. Kontakt venligst administratoren.';
 $lang['regbadmail']            = 'E-mail-adressen er ugyldig. Kontakt venligst administratoren, hvis du mener dette er en fejl.';
 $lang['regbadpass']            = 'De to adgangskoder er ikke ens, vær venlig at prøve igen.';
-$lang['regpwmail']             = 'Dit DokuWiki password';
+$lang['regpwmail']             = 'Dit adgangskode til DokuWiki';
 $lang['reghere']               = 'Opret en DokuWiki-konto her';
 $lang['profna']                = 'Denne wiki understøtter ikke ændring af profiler';
 $lang['profnochange']          = 'Ingen ændringer, intet modificeret.';
 $lang['profnoempty']           = 'Tomt navn eller e-mail adresse er ikke tilladt.';
 $lang['profchanged']           = 'Brugerprofil opdateret korrekt.';
-$lang['profnodelete']          = 'Denne wiki supporterer ikke sletning af brugere';
-$lang['profdeleteuser']        = 'Slet Konto';
+$lang['profnodelete']          = 'Denne wiki understøtter ikke sletning af brugere';
+$lang['profdeleteuser']        = 'Slet konto';
 $lang['profdeleted']           = 'Din brugerkonto er blevet slettet fra denne wiki';
 $lang['profconfdelete']        = 'Jeg ønsker at slette min konto fra denne wiki. <br/> Denne handling kan ikke fortrydes.';
-$lang['pwdforget']             = 'Har du glemt dit adgangskode? FÃ¥ et nyt';
-$lang['resendna']              = 'Denne wiki understøtter ikke udsendelse af nyt adgangskode.';
-$lang['resendpwd']             = 'Vælg ny adgangskode for';
+$lang['pwdforget']             = 'Har du glemt dit adgangskode? FÃ¥ en ny';
+$lang['resendna']              = 'Denne wiki understøtter ikke udsendelse af ny adgangskode.';
+$lang['resendpwd']             = 'Vælg en ny adgangskode for';
 $lang['resendpwdmissing']      = 'Du skal udfylde alle felter.';
 $lang['resendpwdnouser']       = 'Vi kan ikke finde denne bruger i vores database.';
 $lang['resendpwdbadauth']      = 'Beklager, denne autoriseringskode er ikke gyldig. Kontroller venligst at du benyttede det fulde link til bekræftelse.';
-$lang['resendpwdconfirm']      = 'Et henvisning med bekræftelse er blevet sendt med email.';
-$lang['resendpwdsuccess']      = 'Dit nye adgangskode er blevet sendt med e-mail.';
-$lang['license']               = 'Med mindre andet angivet, vil indhold på denne wiki blive frigjort under følgende licens:';
-$lang['licenseok']             = 'Note: ved at ændre denne side, acceptere du at dit indhold bliver frigivet under følgende licens:';
+$lang['resendpwdconfirm']      = 'En e-mail med et link til bekræftelse er blevet sendt.';
+$lang['resendpwdsuccess']      = 'Din nye adgangskode er blevet sendt med e-mail.';
+$lang['license']               = 'Med mindre andet angivet, vil indhold på denne wiki blive udgivet under følgende licens:';
+$lang['licenseok']             = 'Bemærk - ved at redigere denne side, accepterer du at dit indhold bliver frigivet under følgende licens:';
 $lang['searchmedia']           = 'Søg filnavn';
 $lang['searchmedia_in']        = 'Søg i %s';
 $lang['txt_upload']            = 'Vælg den fil der skal overføres:';
@@ -117,76 +117,75 @@ $lang['maxuploadsize']         = 'Upload max. %s pr. fil.';
 $lang['lockedby']              = 'Midlertidig låst af:';
 $lang['lockexpire']            = 'Lås udløber kl:.';
 $lang['js']['willexpire']      = 'Din lås på dette dokument udløber om et minut.\nTryk på Forhåndsvisning-knappen for at undgå konflikter.';
-$lang['js']['notsavedyet']     = 'Ugemte ændringer vil blive mistet
+$lang['js']['notsavedyet']     = 'Ugemte ændringer vil blive mistet.
 Fortsæt alligevel?';
 $lang['js']['searchmedia']     = 'Søg efter filer';
 $lang['js']['keepopen']        = 'Hold vindue åbent ved valg';
 $lang['js']['hidedetails']     = 'Skjul detaljer';
 $lang['js']['mediatitle']      = 'Link indstillinger';
 $lang['js']['mediadisplay']    = 'Link type';
-$lang['js']['mediaalign']      = 'Juster';
+$lang['js']['mediaalign']      = 'Justering';
 $lang['js']['mediasize']       = 'Billede størrelse';
-$lang['js']['mediatarget']     = 'Link mål';
+$lang['js']['mediatarget']     = 'Link destination';
 $lang['js']['mediaclose']      = 'Luk';
 $lang['js']['mediainsert']     = 'Indsæt';
 $lang['js']['mediadisplayimg'] = 'Vis billedet';
 $lang['js']['mediadisplaylnk'] = 'Vis kun linket';
 $lang['js']['mediasmall']      = 'Lille version';
-$lang['js']['mediamedium']     = 'Medium version';
+$lang['js']['mediamedium']     = 'Mellem version';
 $lang['js']['medialarge']      = 'Stor version';
 $lang['js']['mediaoriginal']   = 'Original version';
 $lang['js']['medialnk']        = 'Link til detajle side';
 $lang['js']['mediadirect']     = 'Direkte link til originalen';
 $lang['js']['medianolnk']      = 'Intet link';
-$lang['js']['medianolink']     = 'Link ikke billedet';
+$lang['js']['medianolink']     = 'Link ikke til billedet';
 $lang['js']['medialeft']       = 'Juster billedet til venstre';
 $lang['js']['mediaright']      = 'Juster billedet til højre';
 $lang['js']['mediacenter']     = 'Centreret';
 $lang['js']['medianoalign']    = 'Brug ingen justering';
 $lang['js']['nosmblinks']      = 'Henvisninger til Windows shares virker kun i Microsoft Internet Explorer.
 Du kan stadig kopiere og indsætte linket.';
-$lang['js']['linkwiz']         = 'guiden til henvisninger';
-$lang['js']['linkto']          = 'Henvise til:';
+$lang['js']['linkwiz']         = 'Guiden til henvisninger';
+$lang['js']['linkto']          = 'Henvis til:';
 $lang['js']['del_confirm']     = 'Slet valgte post(er)?';
-$lang['js']['restore_confirm'] = 'Vil du virkeligt genskabe denne version?';
+$lang['js']['restore_confirm'] = 'Er du sikker på at du vil genskabe denne version?';
 $lang['js']['media_diff']      = 'Vis forskelle:';
 $lang['js']['media_diff_both'] = 'Side ved Side';
-$lang['js']['media_diff_opacity'] = 'Skin-igennem';
+$lang['js']['media_diff_opacity'] = 'Skin igennem';
 $lang['js']['media_diff_portions'] = 'Skub';
 $lang['js']['media_select']    = 'Vælg filer...';
-$lang['js']['media_upload_btn'] = 'Upload';
+$lang['js']['media_upload_btn'] = 'Overfør';
 $lang['js']['media_done_btn']  = 'Færdig';
-$lang['js']['media_drop']      = 'Drop filer her for at uploade';
+$lang['js']['media_drop']      = 'Træk filer hertil for at overføre';
 $lang['js']['media_cancel']    = 'fjern';
 $lang['js']['media_overwrt']   = 'Overskriv eksisterende filer';
-$lang['rssfailed']             = 'Der opstod en fejl ved indhentning af: ';
+$lang['rssfailed']             = 'Der opstod en fejl ved hentning af dette feed: ';
 $lang['nothingfound']          = 'Søgningen gav intet resultat.';
 $lang['mediaselect']           = 'Vælg mediefil';
-$lang['fileupload']            = 'Overføre mediefil';
-$lang['uploadsucc']            = 'Overførelse var en succes';
-$lang['uploadfail']            = 'Overførelse fejlede. Der er muligvis problemer med rettighederne.';
-$lang['uploadwrong']           = 'Overførelse afvist. Filtypen er ikke tilladt.';
+$lang['uploadsucc']            = 'Overførels blev fuldført';
+$lang['uploadfail']            = 'Overførslen fejlede. Der er muligvis problemer med rettighederne.';
+$lang['uploadwrong']           = 'Overførslen blev afvist. Filtypen er ikke tilladt.';
 $lang['uploadexist']           = 'Filen eksisterer allerede.';
-$lang['uploadbadcontent']      = 'Overføret indhold tilsvaret ikke til %s fil-endelsen.';
+$lang['uploadbadcontent']      = 'Det overført indhold svarer ikke til %s fil-endelsen.';
 $lang['uploadspam']            = 'Overførelsen blev blokeret af spam sortlisten.';
 $lang['uploadxss']             = 'Overførelsen blev blokeret på grund af mulig skadeligt indhold.';
-$lang['uploadsize']            = 'Den overføret fil var for stor (max. %s)';
+$lang['uploadsize']            = 'Den overførte fil var for stor (maksimal størrelse %s)';
 $lang['deletesucc']            = 'Filen "%s" er blevet slettet.';
-$lang['deletefail']            = '"%s" kunne ikke slettes - check rettighederne.';
-$lang['mediainuse']            = 'Filen "%s" er ikke slettet - den er stadig i brug.';
+$lang['deletefail']            = '"%s" kunne ikke slettes - kontroller rettighederne.';
+$lang['mediainuse']            = 'Filen "%s" kan ikke slettes - den er stadig i brug.';
 $lang['namespaces']            = 'Navnerum';
 $lang['mediafiles']            = 'Tilgængelige filer i';
-$lang['accessdenied']          = 'Du har ikke tilladelse til at se denne side';
+$lang['accessdenied']          = 'Du har ikke tilladelse til at se denne side.';
 $lang['mediausage']            = 'Brug den følgende syntaks til at henvise til denne fil:';
 $lang['mediaview']             = 'Vis oprindelig fil';
 $lang['mediaroot']             = 'rod';
 $lang['mediaupload']           = 'Overføre en fil til det nuværende navnerum her. For at oprette under-navnerum, tilføj dem til "Overføre som" filnavnet, adskilt af kolontegn.';
-$lang['mediaextchange']        = 'Filudvidelse ændret fra .%s til .%s!';
+$lang['mediaextchange']        = 'Filtype ændret fra .%s til .%s!';
 $lang['reference']             = 'Henvisning til';
 $lang['ref_inuse']             = 'Filen kan ikke slettes, da den stadig er i brug på følgende sider:';
-$lang['ref_hidden']            = 'Nogle henvisninger er i dokumenter du ikke har læserettigheder til';
+$lang['ref_hidden']            = 'Nogle henvisninger er på sider du ikke har læserettigheder til';
 $lang['hits']                  = 'Besøg';
-$lang['quickhits']             = 'Tilsvarende dokumentnavne';
+$lang['quickhits']             = 'Tilsvarende sidenavne';
 $lang['toc']                   = 'Indholdsfortegnelse';
 $lang['current']               = 'nuværende';
 $lang['yours']                 = 'Din version';
@@ -195,7 +194,7 @@ $lang['diff2']                 = 'Vis forskelle i forhold til de valgte revision
 $lang['difflink']              = 'Link til denne sammenlinings vising';
 $lang['diff_type']             = 'Vis forskelle:';
 $lang['diff_inline']           = 'Indeni';
-$lang['diff_side']             = 'Side ved Side';
+$lang['diff_side']             = 'Side ved side';
 $lang['diffprevrev']           = 'Forrige revision';
 $lang['diffnextrev']           = 'Næste revision';
 $lang['difflastrev']           = 'Sidste revision';
@@ -208,26 +207,26 @@ $lang['lastmod']               = 'Sidst ændret:';
 $lang['by']                    = 'af';
 $lang['deleted']               = 'slettet';
 $lang['created']               = 'oprettet';
-$lang['restored']              = 'gammel udgave reetableret (%s)';
+$lang['restored']              = 'gammel udgave gendannet (%s)';
 $lang['external_edit']         = 'ekstern redigering';
-$lang['summary']               = 'Redigerings resumé';
-$lang['noflash']               = 'Den <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> er nødvendig til at vise denne indehold.';
-$lang['download']              = 'Hente kodestykke';
+$lang['summary']               = 'Resumé af ændrigner';
+$lang['noflash']               = 'Du skal installere <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Player</a> for at kunne se dette indhold.';
+$lang['download']              = 'Hent kodestykke';
 $lang['tools']                 = 'Værktøjer';
 $lang['user_tools']            = 'Brugerværktøjer';
 $lang['site_tools']            = 'Webstedsværktøjer';
 $lang['page_tools']            = 'Sideværktøjer';
 $lang['skip_to_content']       = 'hop til indhold';
 $lang['sidebar']               = 'Sidebjælke';
-$lang['mail_newpage']          = 'dokument tilføjet:';
-$lang['mail_changed']          = 'dokument ændret:';
-$lang['mail_subscribe_list']   = 'sider ændret i navnerum';
+$lang['mail_newpage']          = 'side tilføjet:';
+$lang['mail_changed']          = 'side ændret:';
+$lang['mail_subscribe_list']   = 'sider ændret i navnerum:';
 $lang['mail_new_user']         = 'Ny bruger';
-$lang['mail_upload']           = 'fil overføret:';
+$lang['mail_upload']           = 'fil overført:';
 $lang['changes_type']          = 'Vis ændringer af';
 $lang['pages_changes']         = 'Sider';
-$lang['media_changes']         = 'Media filer';
-$lang['both_changes']          = 'BÃ¥de sider og media filer';
+$lang['media_changes']         = 'Mediefiler';
+$lang['both_changes']          = 'BÃ¥de sider og medie filer';
 $lang['qb_bold']               = 'Fed';
 $lang['qb_italic']             = 'Kursiv';
 $lang['qb_underl']             = 'Understregning';
@@ -239,7 +238,7 @@ $lang['qb_h3']                 = 'Niveau 3 overskrift';
 $lang['qb_h4']                 = 'Niveau 4 overskrift';
 $lang['qb_h5']                 = 'Niveau 5 overskrift';
 $lang['qb_h']                  = 'Overskrift';
-$lang['qb_hs']                 = 'Vælg overskriften';
+$lang['qb_hs']                 = 'Vælg overskrift';
 $lang['qb_hplus']              = 'Højere overskriftsniveau';
 $lang['qb_hminus']             = 'Lavere overskriftsniveau';
 $lang['qb_hequal']             = 'Samme overskriftsniveau';
@@ -247,15 +246,14 @@ $lang['qb_link']               = 'Intern henvisning';
 $lang['qb_extlink']            = 'Ekstern henvisning';
 $lang['qb_hr']                 = 'Vandret linje';
 $lang['qb_ol']                 = 'Nummereret liste';
-$lang['qb_ul']                 = 'Unummereret liste';
+$lang['qb_ul']                 = 'Punktopstilling';
 $lang['qb_media']              = 'Tilføj billeder og andre filer';
 $lang['qb_sig']                = 'Indsæt signatur';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Specialtegn';
 $lang['upperns']               = 'GÃ¥ til overordnet navnerum';
-$lang['admin_register']        = 'Tilføj ny bruger';
 $lang['metaedit']              = 'Rediger metadata';
-$lang['metasaveerr']           = 'Skrivning af metadata fejlede';
+$lang['metasaveerr']           = 'Fejl under skrivning af metadata';
 $lang['metasaveok']            = 'Metadata gemt';
 $lang['img_title']             = 'Titel:';
 $lang['img_caption']           = 'Billedtekst:';
@@ -286,7 +284,6 @@ $lang['subscr_style_every']    = 'email på hver ændring';
 $lang['subscr_style_digest']   = 'opsummeringsmail med ændringer for hver side (hver %.2f dage)';
 $lang['subscr_style_list']     = 'list af ændrede sider siden sidste email (hver %.2f dage)';
 $lang['authtempfail']          = 'Brugervalidering er midlertidigt ude af drift. Hvis dette er vedvarende, kontakt venligst wikiens administrator.';
-$lang['authpwdexpire']         = 'Din adgangskode vil udløbe om %d dage, du bør ændre det snart.';
 $lang['i_chooselang']          = 'Vælg dit sprog';
 $lang['i_installer']           = 'DokuWiki Installer';
 $lang['i_wikiname']            = 'Wiki Navn';
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index 1a1491f6bb1ea99860fcbc3918c428941a94bda1..42fb9a2656d30932fd3f5817852f218b607b05d2 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -22,6 +22,7 @@
  * @author Frank Loizzi <contact@software.bacal.de>
  * @author Volker Bödker <volker@boedker.de>
  * @author Janosch <janosch@moinzen.de>
+ * @author rnck <dokuwiki@rnck.de>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -53,7 +54,6 @@ $lang['btn_update']            = 'Updaten';
 $lang['btn_delete']            = 'Löschen';
 $lang['btn_back']              = 'Zurück';
 $lang['btn_backlink']          = 'Links hierher';
-$lang['btn_backtomedia']       = 'Zurück zur Dateiauswahl';
 $lang['btn_subscribe']         = 'Aboverwaltung';
 $lang['btn_profile']           = 'Benutzerprofil';
 $lang['btn_reset']             = 'Zurücksetzen';
@@ -66,6 +66,8 @@ $lang['btn_register']          = 'Registrieren';
 $lang['btn_apply']             = 'Ãœbernehmen';
 $lang['btn_media']             = 'Medien-Manager';
 $lang['btn_deleteuser']        = 'Benutzerprofil löschen';
+$lang['btn_img_backto']        = 'Zurück zu %s';
+$lang['btn_mediaManager']      = 'Im Medien-Manager anzeigen';
 $lang['loggedinas']            = 'Angemeldet als:';
 $lang['user']                  = 'Benutzername';
 $lang['pass']                  = 'Passwort';
@@ -81,11 +83,12 @@ $lang['badpassconfirm']        = 'Das Passwort war falsch.';
 $lang['minoredit']             = 'Kleine Änderung';
 $lang['draftdate']             = 'Entwurf gespeichert am';
 $lang['nosecedit']             = 'Diese Seite wurde in der Zwischenzeit geändert, da das Sektionsinfo veraltet ist. Die ganze Seite wird stattdessen geladen.';
-$lang['searchcreatepage']      = "Falls der gesuchte Begriff nicht gefunden wurde, kannst du direkt eine neue Seite für den Suchbegriff anlegen, indem du auf den Knopf **''[Seite anlegen]''** drückst.";
+$lang['searchcreatepage']      = 'Falls der gesuchte Begriff nicht gefunden wurde, kannst du direkt eine neue Seite für den Suchbegriff anlegen, indem du auf den Knopf **\'\'[Seite anlegen]\'\'** drückst.';
 $lang['regmissing']            = 'Alle Felder müssen ausgefüllt werden';
 $lang['reguexists']            = 'Der Benutzername existiert leider schon.';
 $lang['regsuccess']            = 'Der neue Benutzer wurde angelegt und das Passwort per E-Mail versandt.';
 $lang['regsuccess2']           = 'Der neue Benutzer wurde angelegt.';
+$lang['regfail']               = 'Der Benutzer konnte nicht erstellt werden.';
 $lang['regmailfail']           = 'Offenbar ist ein Fehler beim Versenden der Passwortmail aufgetreten. Bitte wende dich an den Wiki-Admin.';
 $lang['regbadmail']            = 'Die angegebene Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wende dich bitte an den Wiki-Admin.';
 $lang['regbadpass']            = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuche es noch einmal.';
@@ -100,6 +103,7 @@ $lang['profdeleteuser']        = 'Benutzerprofil löschen';
 $lang['profdeleted']           = 'Dein Benutzerprofil wurde im Wiki gelöscht.';
 $lang['profconfdelete']        = 'Ich möchte mein Benutzerprofil löschen.<br/> Diese Aktion ist nicht umkehrbar.';
 $lang['profconfdeletemissing'] = 'Bestätigungs-Checkbox wurde nicht angehakt.';
+$lang['proffail']              = 'Das Benutzerprofil wurde nicht aktualisiert.';
 $lang['pwdforget']             = 'Passwort vergessen? Fordere ein neues an';
 $lang['resendna']              = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
 $lang['resendpwd']             = 'Neues Passwort setzen für';
@@ -162,7 +166,6 @@ $lang['js']['media_overwrt']   = 'Existierende Dateien überschreiben';
 $lang['rssfailed']             = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
 $lang['nothingfound']          = 'Nichts gefunden.';
 $lang['mediaselect']           = 'Dateiauswahl';
-$lang['fileupload']            = 'Datei hochladen';
 $lang['uploadsucc']            = 'Datei wurde erfolgreich hochgeladen';
 $lang['uploadfail']            = 'Hochladen fehlgeschlagen. Keine Berechtigung?';
 $lang['uploadwrong']           = 'Hochladen verweigert. Diese Dateiendung ist nicht erlaubt.';
@@ -196,6 +199,11 @@ $lang['difflink']              = 'Link zu der Vergleichsansicht';
 $lang['diff_type']             = 'Unterschiede anzeigen:';
 $lang['diff_inline']           = 'Inline';
 $lang['diff_side']             = 'Side by Side';
+$lang['diffprevrev']           = 'Vorherige Ãœberarbeitung';
+$lang['diffnextrev']           = 'Nächste Überarbeitung';
+$lang['difflastrev']           = 'Letzte Ãœberarbeitung';
+$lang['diffbothprevrev']       = 'Beide Seiten, vorherige Ãœberarbeitung';
+$lang['diffbothnextrev']       = 'Beide Seiten, nächste Überarbeitung';
 $lang['line']                  = 'Zeile';
 $lang['breadcrumb']            = 'Zuletzt angesehen:';
 $lang['youarehere']            = 'Du befindest dich hier:';
@@ -248,11 +256,9 @@ $lang['qb_sig']                = 'Unterschrift einfügen';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Sonderzeichen';
 $lang['upperns']               = 'Gehe zum übergeordneten Namensraum';
-$lang['admin_register']        = 'Neuen Benutzer anmelden';
 $lang['metaedit']              = 'Metadaten bearbeiten';
 $lang['metasaveerr']           = 'Die Metadaten konnten nicht gesichert werden';
 $lang['metasaveok']            = 'Metadaten gesichert';
-$lang['btn_img_backto']            = 'Zurück zu %s';
 $lang['img_title']             = 'Titel:';
 $lang['img_caption']           = 'Bildunterschrift:';
 $lang['img_date']              = 'Datum:';
@@ -265,7 +271,6 @@ $lang['img_camera']            = 'Kamera:';
 $lang['img_keywords']          = 'Schlagwörter:';
 $lang['img_width']             = 'Breite:';
 $lang['img_height']            = 'Höhe:';
-$lang['btn_mediaManager']           = 'Im Medien-Manager anzeigen';
 $lang['subscr_subscribe_success'] = 'Die Seite %s wurde zur Abonnementliste von %s hinzugefügt';
 $lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementliste von %s';
 $lang['subscr_subscribe_noaddress'] = 'In deinem Account ist keine E-Mail-Adresse hinterlegt. Dadurch kann die Seite nicht abonniert werden';
@@ -283,7 +288,6 @@ $lang['subscr_style_every']    = 'E-Mail bei jeder Änderung';
 $lang['subscr_style_digest']   = 'E-Mail mit zusammengefasster Übersicht der Seitenänderungen (alle %.2f Tage)';
 $lang['subscr_style_list']     = 'Auflistung aller geänderten Seiten seit der letzten E-Mail (alle %.2f Tage)';
 $lang['authtempfail']          = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wende dich an den Admin.';
-$lang['authpwdexpire']         = 'Dein Passwort läuft in %d Tag(en) ab. Du solltest es es frühzeitig ändern.';
 $lang['i_chooselang']          = 'Wähle deine Sprache';
 $lang['i_installer']           = 'DokuWiki-Installation';
 $lang['i_wikiname']            = 'Wiki-Name';
@@ -293,6 +297,7 @@ $lang['i_problems']            = 'Das Installationsprogramm hat unten aufgeführ
 $lang['i_modified']            = 'Aus Sicherheitsgründen arbeitet dieses Skript nur mit einer neuen bzw. nicht modifizierten DokuWiki-Installation. Du solltest entweder alle Dateien noch einmal frisch installieren oder die <a href="http://dokuwiki.org/install">Dokuwiki-Installationsanleitung</a> konsultieren.';
 $lang['i_funcna']              = 'Die PHP-Funktion <code>%s</code> ist nicht verfügbar. Unter Umständen wurde sie von deinem Hoster deaktiviert?';
 $lang['i_phpver']              = 'Deine PHP-Version <code>%s</code> ist niedriger als die benötigte Version <code>%s</code>. Bitte aktualisiere deine PHP-Installation.';
+$lang['i_mbfuncoverload']      = 'mbstring.func_overload muss in php.in deaktiviert werden um DokuWiki auszuführen.';
 $lang['i_permfail']            = '<code>%s</code> ist nicht durch DokuWiki beschreibbar. Du musst die Berechtigungen dieses Ordners ändern!';
 $lang['i_confexists']          = '<code>%s</code> existiert bereits';
 $lang['i_writeerr']            = '<code>%s</code> konnte nicht erzeugt werden. Du solltest die Verzeichnis-/Datei-Rechte überprüfen und die Datei manuell anlegen.';
@@ -342,5 +347,9 @@ $lang['media_perm_read']       = 'Du besitzt nicht die notwendigen Berechtigunge
 $lang['media_perm_upload']     = 'Du besitzt nicht die notwendigen Berechtigungen um Dateien hochzuladen.';
 $lang['media_update']          = 'Neue Version hochladen';
 $lang['media_restore']         = 'Diese Version wiederherstellen';
+$lang['media_acl_warning']     = 'Diese Liste ist möglicherweise nicht vollständig. Versteckte und durch ACL gesperrte Seiten werden nicht angezeigt.';
 $lang['currentns']             = 'Aktueller Namensraum';
 $lang['searchresult']          = 'Suchergebnis';
+$lang['plainhtml']             = 'Reines HTML';
+$lang['wikimarkup']            = 'Wiki Markup';
+$lang['page_nonexist_rev']     = 'Seite existierte nicht an der Stelle %s. Sie wurde an folgende Stelle erstellt: <a href="%s">%s</a>.';
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index 2725c247a3988a60a0dac5f3f12ce680bb50316e..c452042b6335aed796b1be0fd38a878005a40af9 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -28,6 +28,7 @@
  * @author Hoisl <hoisl@gmx.at>
  * @author Marcel Eickhoff <eickhoff.marcel@gmail.com>
  * @author Pascal Schröder <Pascal1802@gmail.com>
+ * @author Hendrik Diel <diel.hendrik@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -59,7 +60,6 @@ $lang['btn_update']            = 'Updaten';
 $lang['btn_delete']            = 'Löschen';
 $lang['btn_back']              = 'Zurück';
 $lang['btn_backlink']          = 'Links hierher';
-$lang['btn_backtomedia']       = 'Zurück zur Dateiauswahl';
 $lang['btn_subscribe']         = 'Aboverwaltung';
 $lang['btn_profile']           = 'Benutzerprofil';
 $lang['btn_reset']             = 'Zurücksetzen';
@@ -94,6 +94,7 @@ $lang['regmissing']            = 'Alle Felder müssen ausgefüllt werden.';
 $lang['reguexists']            = 'Der Benutzername existiert leider schon.';
 $lang['regsuccess']            = 'Der neue Benutzer wurde angelegt und das Passwort per E-Mail versandt.';
 $lang['regsuccess2']           = 'Der neue Benutzer wurde angelegt.';
+$lang['regfail']               = 'Der Benutzer konnte nicht angelegt werden.';
 $lang['regmailfail']           = 'Offenbar ist ein Fehler beim Versenden der Passwort-E-Mail aufgetreten. Bitte wenden Sie sich an den Wiki-Admin.';
 $lang['regbadmail']            = 'Die angegebene E-Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wenden Sie sich bitte an den Wiki-Admin.';
 $lang['regbadpass']            = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.';
@@ -108,6 +109,7 @@ $lang['profdeleteuser']        = 'Benutzerprofil löschen';
 $lang['profdeleted']           = 'Ihr Benutzerprofil wurde im Wiki gelöscht.';
 $lang['profconfdelete']        = 'Ich möchte mein Benutzerprofil löschen.<br/> Diese Aktion ist nicht umkehrbar.';
 $lang['profconfdeletemissing'] = 'Bestätigungs-Checkbox wurde nicht angehakt.';
+$lang['proffail']              = 'Das Benutzerkonto konnte nicht aktualisiert werden.';
 $lang['pwdforget']             = 'Passwort vergessen? Fordere ein neues an';
 $lang['resendna']              = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
 $lang['resendpwd']             = 'Neues Passwort setzen für';
@@ -170,7 +172,6 @@ $lang['js']['media_overwrt']   = 'Existierende Dateien überschreiben';
 $lang['rssfailed']             = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
 $lang['nothingfound']          = 'Nichts gefunden.';
 $lang['mediaselect']           = 'Dateiauswahl';
-$lang['fileupload']            = 'Datei hochladen';
 $lang['uploadsucc']            = 'Datei wurde erfolgreich hochgeladen';
 $lang['uploadfail']            = 'Hochladen fehlgeschlagen. Keine Berechtigung?';
 $lang['uploadwrong']           = 'Hochladen verweigert. Diese Dateiendung ist nicht erlaubt.';
@@ -261,7 +262,6 @@ $lang['qb_sig']                = 'Unterschrift einfügen';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Sonderzeichen';
 $lang['upperns']               = 'zum übergeordneten Namensraum springen';
-$lang['admin_register']        = 'Neuen Benutzer anmelden';
 $lang['metaedit']              = 'Metadaten bearbeiten';
 $lang['metasaveerr']           = 'Die Metadaten konnten nicht gesichert werden';
 $lang['metasaveok']            = 'Metadaten gesichert';
@@ -294,7 +294,6 @@ $lang['subscr_style_every']    = 'E-Mail bei jeder Bearbeitung';
 $lang['subscr_style_digest']   = 'Zusammenfassung der Änderungen für jede veränderte Seite (Alle %.2f Tage)';
 $lang['subscr_style_list']     = 'Liste der geänderten Seiten (Alle %.2f Tage)';
 $lang['authtempfail']          = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wenden Sie sich an den Admin.';
-$lang['authpwdexpire']         = 'Ihr Passwort läuft in %d Tag(en) ab. Sie sollten es frühzeitig ändern.';
 $lang['i_chooselang']          = 'Wählen Sie Ihre Sprache';
 $lang['i_installer']           = 'DokuWiki Installation';
 $lang['i_wikiname']            = 'Wiki-Name';
@@ -354,9 +353,10 @@ $lang['media_perm_read']       = 'Sie besitzen nicht die notwendigen Berechtigun
 $lang['media_perm_upload']     = 'Sie besitzen nicht die notwendigen Berechtigungen um Dateien hochzuladen.';
 $lang['media_update']          = 'Neue Version hochladen';
 $lang['media_restore']         = 'Diese Version wiederherstellen';
+$lang['media_acl_warning']     = 'Diese Liste ist möglicherweise nicht vollständig. Versteckte und durch ACL gesperrte Seiten werden nicht angezeigt.';
 $lang['currentns']             = 'Aktueller Namensraum';
 $lang['searchresult']          = 'Suchergebnisse';
 $lang['plainhtml']             = 'HTML Klartext';
 $lang['wikimarkup']            = 'Wiki Markup';
-$lang['page_nonexist_rev']     = 'DIe Seite exitiert nicht unter %s. Sie wurde aber unter <a herf="%s">%s</a>';
+$lang['page_nonexist_rev']     = 'Die Seite exitiert nicht unter %s. Sie wurde aber unter <a href="%s">%s</a>';
 $lang['unable_to_parse_date']  = 'Parameter "%s" kann nicht geparsed werden.';
diff --git a/inc/lang/de/subscr_list.txt b/inc/lang/de/subscr_list.txt
index 98ec4c2ab4de8a7f83c93fbbe0168ff75ae73fd4..f4318df707eda02544ffb0f62ff6403301e6c3f2 100644
--- a/inc/lang/de/subscr_list.txt
+++ b/inc/lang/de/subscr_list.txt
@@ -7,7 +7,7 @@ Das sind die geänderten Seiten:
 @DIFF@
 --------------------------------------------------------
 
-Um das Abonnement für diese Seite aufzulösen, melde Sie sich im Wiki an
+Um das Abonnement für diese Seite aufzulösen, melden Sie sich im Wiki an
 @DOKUWIKIURL@, besuchen dann
 @SUBSCRIBE@
 und klicken auf die Taste 'Änderungen abbestellen'.
diff --git a/inc/lang/el/jquery.ui.datepicker.js b/inc/lang/el/jquery.ui.datepicker.js
index a852a77d7388ed7a73e77dd0d46403292fa603c5..362e248f8e4688279f8774d7fad9c968b589ca32 100644
--- a/inc/lang/el/jquery.ui.datepicker.js
+++ b/inc/lang/el/jquery.ui.datepicker.js
@@ -16,7 +16,7 @@ datepicker.regional['el'] = {
 	closeText: 'Κλείσιμο',
 	prevText: 'Προηγούμενος',
 	nextText: 'Επόμενος',
-	currentText: 'Τρέχων Μήνας',
+	currentText: 'Σήμερα',
 	monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος',
 	'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'],
 	monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν',
diff --git a/inc/lang/el/lang.php b/inc/lang/el/lang.php
index e5371c9f3c7fb93ba45a5e92fb1285f67d8c754a..0e62dd37b8f88abec1bc907891596ec0682a15bb 100644
--- a/inc/lang/el/lang.php
+++ b/inc/lang/el/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Thanos Massias <tm@thriasio.gr>
  * @author Αθανάσιος Νταής <homunculus@wana.gr>
  * @author Konstantinos Koryllos <koryllos@gmail.com>
@@ -43,7 +43,6 @@ $lang['btn_update']            = 'Ενημέρωση';
 $lang['btn_delete']            = 'Σβήσιμο';
 $lang['btn_back']              = 'Πίσω';
 $lang['btn_backlink']          = 'Σύνδεσμοι προς αυτή τη σελίδα';
-$lang['btn_backtomedia']       = 'Επιστροφή στην επιλογή αρχείων';
 $lang['btn_subscribe']         = 'Εγγραφή σε λήψη ενημερώσεων σελίδας';
 $lang['btn_profile']           = 'Επεξεργασία προφίλ';
 $lang['btn_reset']             = 'Ακύρωση';
@@ -152,7 +151,6 @@ $lang['js']['media_overwrt']   = 'Αντικατάσταση υπάρχοντω
 $lang['rssfailed']             = 'Παρουσιάστηκε κάποιο σφάλμα κατά την ανάγνωση αυτού του feed: ';
 $lang['nothingfound']          = 'Δεν βρέθηκαν σχετικά αποτελέσματα.';
 $lang['mediaselect']           = 'Επιλογή Αρχείων';
-$lang['fileupload']            = 'Φόρτωση αρχείου';
 $lang['uploadsucc']            = 'Επιτυχής φόρτωση';
 $lang['uploadfail']            = 'Η μεταφόρτωση απέτυχε. Πιθανόν αυτό να οφείλεται στις ρυθμίσεις πρόσβασης του αρχείου.';
 $lang['uploadwrong']           = 'Η μεταφόρτωση δεν έγινε δεκτή. Δεν επιτρέπονται αρχεία αυτού του τύπου!';
@@ -237,7 +235,6 @@ $lang['qb_sig']                = 'Προσθήκη Υπογραφής';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Ειδικοί Χαρακτήρες';
 $lang['upperns']               = 'πήγαινε στον μητρικό φάκελο';
-$lang['admin_register']        = 'Προσθήκη νέου χρήστη';
 $lang['metaedit']              = 'Τροποποίηση metadata';
 $lang['metasaveerr']           = 'Η αποθήκευση των metadata απέτυχε';
 $lang['metasaveok']            = 'Επιτυχής αποθήκευση metadata';
@@ -272,7 +269,6 @@ $lang['subscr_style_every']    = 'email σε κάθε αλλαγή';
 $lang['subscr_style_digest']   = 'συνοπτικό email αλλαγών της σελίδας (κάθε %.2f μέρες)';
 $lang['subscr_style_list']     = 'λίστα σελίδων με αλλαγές μετά από το τελευταίο email (κάθε %.2f μέρες)';
 $lang['authtempfail']          = 'Η συνδεση χρηστών είναι απενεργοποιημένη αυτή την στιγμή. Αν αυτό διαρκέσει για πολύ, παρακαλούμε ενημερώστε τον διαχειριστή του wiki.';
-$lang['authpwdexpire']         = 'Ο κωδικός πρόσβασης θα λήξει σε %d ημέρες. Προτείνουμε να τον αλλάξετε σύντομα.';
 $lang['i_chooselang']          = 'Επιλογή γλώσσας';
 $lang['i_installer']           = 'Οδηγός εγκατάστασης DokuWiki';
 $lang['i_wikiname']            = 'Ονομασία wiki';
@@ -288,8 +284,8 @@ $lang['i_confexists']          = '<code>%s</code> υπάρχει ήδη';
 $lang['i_writeerr']            = 'Δεν είναι δυνατή η δημιουργία του <code>%s</code>. Πρέπει να διορθώσετε τα δικαιώματα πρόσβασης αυτού του φακέλου/αρχείου και να δημιουργήσετε το αρχείο χειροκίνητα!';
 $lang['i_badhash']             = 'Μη αναγνωρίσιμο ή τροποποιημένο αρχείο dokuwiki.php (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> - λάθος ή ανύπαρκτη τιμή';
-$lang['i_success']             = 'Η εγκατάσταση ολοκληρώθηκε επιτυχώς. Μπορείτε πλέον να διαγράψετε το αρχείο install.php. Συνεχίστε στο <a href="doku.php">νέο σας DokuWiki</a>.';
-$lang['i_failure']             = 'Εμφανίστηκαν κάποια προβλήματα στη διαδικασία ανανέωσης των αρχείων ρυθμίσεων. Πιθανόν να χρειάζεται να τα τροποποιήσετε χειροκίνητα ώστε να μπορείτε να χρησιμοποιήσετε το <a href="doku.php">νέο σας DokuWiki</a>.';
+$lang['i_success']             = 'Η εγκατάσταση ολοκληρώθηκε επιτυχώς. Μπορείτε πλέον να διαγράψετε το αρχείο install.php. Συνεχίστε στο <a href="doku.php?id=wiki:welcome">νέο σας DokuWiki</a>.';
+$lang['i_failure']             = 'Εμφανίστηκαν κάποια προβλήματα στη διαδικασία ανανέωσης των αρχείων ρυθμίσεων. Πιθανόν να χρειάζεται να τα τροποποιήσετε χειροκίνητα ώστε να μπορείτε να χρησιμοποιήσετε το <a href="doku.php?id=wiki:welcome">νέο σας DokuWiki</a>.';
 $lang['i_policy']              = 'Αρχική πολιτική Λίστας Δικαιωμάτων Πρόσβασης - ACL';
 $lang['i_pol0']                = 'Ανοιχτό Wiki (όλοι μπορούν να διαβάσουν ή να δημιουργήσουν/τροποποιήσουν σελίδες και να μεταφορτώσουν αρχεία)';
 $lang['i_pol1']                = 'Δημόσιο Wiki (όλοι μπορούν να διαβάσουν σελίδες αλλά μόνο οι εγγεγραμμένοι χρήστες μπορούν να δημιουργήσουν/τροποποιήσουν σελίδες και να μεταφορτώσουν αρχεία)';
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index fb455f85fc643779e2f8e0236df3096a092ab48a..9812ab6f58296c4bfae477e1e01fbc127881bc93 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -27,19 +27,18 @@ $lang['btn_top']               = 'Back to top';
 $lang['btn_newer']             = '<< more recent';
 $lang['btn_older']             = 'less recent >>';
 $lang['btn_revs']              = 'Old revisions';
-$lang['btn_recent']            = 'Recent changes';
+$lang['btn_recent']            = 'Recent Changes';
 $lang['btn_upload']            = 'Upload';
 $lang['btn_cancel']            = 'Cancel';
 $lang['btn_index']             = 'Sitemap';
 $lang['btn_secedit']           = 'Edit';
-$lang['btn_login']             = 'Login';
-$lang['btn_logout']            = 'Logout';
+$lang['btn_login']             = 'Log In';
+$lang['btn_logout']            = 'Log Out';
 $lang['btn_admin']             = 'Admin';
 $lang['btn_update']            = 'Update';
 $lang['btn_delete']            = 'Delete';
 $lang['btn_back']              = 'Back';
 $lang['btn_backlink']          = 'Backlinks';
-$lang['btn_backtomedia']       = 'Back to Mediafile Selection';
 $lang['btn_subscribe']         = 'Manage Subscriptions';
 $lang['btn_profile']           = 'Update Profile';
 $lang['btn_reset']             = 'Reset';
@@ -76,6 +75,7 @@ $lang['regmissing']            = 'Sorry, you must fill in all fields.';
 $lang['reguexists']            = 'Sorry, a user with this login already exists.';
 $lang['regsuccess']            = 'The user has been created and the password was sent by email.';
 $lang['regsuccess2']           = 'The user has been created.';
+$lang['regfail']               = 'The user could not be created.';
 $lang['regmailfail']           = 'Looks like there was an error on sending the password mail. Please contact the admin!';
 $lang['regbadmail']            = 'The given email address looks invalid - if you think this is an error, contact the admin';
 $lang['regbadpass']            = 'The two given passwords are not identical, please try again.';
@@ -91,6 +91,7 @@ $lang['profdeleteuser']        = 'Delete Account';
 $lang['profdeleted']           = 'Your user account has been deleted from this wiki';
 $lang['profconfdelete']        = 'I wish to remove my account from this wiki. <br/> This action can not be undone.';
 $lang['profconfdeletemissing'] = 'Confirmation check box not ticked';
+$lang['proffail']              = 'User profile was not updated.';
 
 $lang['pwdforget']             = 'Forgotten your password? Get a new one';
 $lang['resendna']              = 'This wiki does not support password resending.';
@@ -159,7 +160,6 @@ $lang['rssfailed']             = 'An error occurred while fetching this feed: ';
 $lang['nothingfound']          = 'Nothing was found.';
 
 $lang['mediaselect']           = 'Media Files';
-$lang['fileupload']            = 'Media File Upload';
 $lang['uploadsucc']            = 'Upload successful';
 $lang['uploadfail']            = 'Upload failed. Maybe wrong permissions?';
 $lang['uploadwrong']           = 'Upload denied. This file extension is forbidden!';
@@ -256,8 +256,6 @@ $lang['qb_chars']              = 'Special Chars';
 
 $lang['upperns']               = 'jump to parent namespace';
 
-$lang['admin_register']        = 'Add new user';
-
 $lang['metaedit']              = 'Edit Metadata';
 $lang['metasaveerr']           = 'Writing metadata failed';
 $lang['metasaveok']            = 'Metadata saved';
@@ -294,7 +292,6 @@ $lang['subscr_style_list']          = 'list of changed pages since last email (e
 
 /* auth.class language support */
 $lang['authtempfail']          = 'User authentication is temporarily unavailable. If this situation persists, please inform your Wiki Admin.';
-$lang['authpwdexpire']         = 'Your password will expire in %d days, you should change it soon.';
 
 /* installer strings */
 $lang['i_chooselang']          = 'Choose your language';
@@ -363,6 +360,7 @@ $lang['media_perm_read']       = 'Sorry, you don\'t have enough rights to read f
 $lang['media_perm_upload']     = 'Sorry, you don\'t have enough rights to upload files.';
 $lang['media_update']          = 'Upload new version';
 $lang['media_restore']         = 'Restore this version';
+$lang['media_acl_warning']     = 'This list might not be complete due to ACL restrictions and hidden pages.';
 
 $lang['currentns']             = 'Current namespace';
 $lang['searchresult']          = 'Search Result';
diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php
index 0cb84a2de268bdb70e8f067240bcd38dc49f4376..3e0b910598e6a1adc07aeb621ce0c8541cd30e06 100644
--- a/inc/lang/eo/lang.php
+++ b/inc/lang/eo/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Antono Vasiljev <esperanto.minsk ĈE tut.by>
  * @author Felipe Castro <fefcas@yahoo.com.br>
  * @author Felipe Castro <fefcas@uol.com.br>
@@ -17,7 +17,7 @@ $lang['doublequoteopening']    = '“';
 $lang['doublequoteclosing']    = '”';
 $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
-$lang['apostrophe']            = '\'';
+$lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'Redakti la paĝon';
 $lang['btn_source']            = 'Montri fontan tekston';
 $lang['btn_show']              = 'Montri paĝon';
@@ -41,7 +41,6 @@ $lang['btn_update']            = 'Aktualigi';
 $lang['btn_delete']            = 'Forigi';
 $lang['btn_back']              = 'Retroiri';
 $lang['btn_backlink']          = 'Retroligoj';
-$lang['btn_backtomedia']       = 'Retroiri al elekto de dosiero';
 $lang['btn_subscribe']         = 'Aliĝi al paĝaj modifoj';
 $lang['btn_profile']           = 'Aktualigi profilon';
 $lang['btn_reset']             = 'Rekomenci';
@@ -153,7 +152,6 @@ $lang['js']['media_overwrt']   = 'Anstataûi ekzistantajn dosierojn';
 $lang['rssfailed']             = 'Okazis eraro dum ricevado de la novaĵ-fluo: ';
 $lang['nothingfound']          = 'Ankoraŭ nenio troviĝas tie ĉi.';
 $lang['mediaselect']           = 'Elekto de aŭdvidaĵa dosiero';
-$lang['fileupload']            = 'Alŝuto de aŭdvidaĵa dosiero';
 $lang['uploadsucc']            = 'Alŝuto sukcesis';
 $lang['uploadfail']            = 'Alŝuto malsukcesis. Ĉu eble estas problemoj pro permes-atributoj?';
 $lang['uploadwrong']           = 'Rifuzita alŝuto. Tiu ĉi dosiersufikso estas malpermesata!';
@@ -244,7 +242,6 @@ $lang['qb_sig']                = 'Inkluzivi subskribon';
 $lang['qb_smileys']            = 'Ridetuloj';
 $lang['qb_chars']              = 'Specialaj signaĵoj';
 $lang['upperns']               = 'saltu al la parenca nomspaco';
-$lang['admin_register']        = 'Aldoni novan uzanton';
 $lang['metaedit']              = 'Redakti metadatumaron';
 $lang['metasaveerr']           = 'La konservo de metadatumaro malsukcesis';
 $lang['metasaveok']            = 'La metadatumaro konserviĝis';
@@ -277,7 +274,6 @@ $lang['subscr_style_every']    = 'retpoŝtaĵo pro ĉiu ŝanĝo';
 $lang['subscr_style_digest']   = 'resuma retpoŝtaĵo de ŝanĝoj por ĉiu paĝo (je %.2f tagoj)';
 $lang['subscr_style_list']     = 'listo de ŝanĝitaj paĝoj ekde la lasta retpoŝtaĵo (je %.2f tagoj)';
 $lang['authtempfail']          = 'La identigo de via uzantonomo estas intertempe maldisponebla. Se tiu ĉi situacio daŭros, bonvolu informi la adminstranton de la vikio.';
-$lang['authpwdexpire']         = 'Via pasvorto malvalidos post %d tagoj, prefere ŝanĝu ĝin baldaũ.';
 $lang['i_chooselang']          = 'Elektu vian lingvon';
 $lang['i_installer']           = 'Instalilo de DokuWiki';
 $lang['i_wikiname']            = 'Nomo de la vikio';
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index 8f4cb2977640ed3f848a70b067602089bdc45244..97559bd98b4fe81a1c51c9f417ee69308afe5324 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -37,6 +37,12 @@
  * @author Antonio Castilla <antoniocastilla@trazoide.com>
  * @author Jonathan Hernández <me@jhalicea.com>
  * @author pokesakura <pokesakura@gmail.com>
+ * @author Álvaro Iradier <airadier@gmail.com>
+ * @author Alejandro Nunez <nunez.alejandro@gmail.com>
+ * @author Mauricio Segura <maose38@yahoo.es>
+ * @author Domingo Redal <docxml@gmail.com>
+ * @author solohazlo <solohhazlo@gmail.com>
+ * @author Romano <romanocl@outlook.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -68,7 +74,6 @@ $lang['btn_update']            = 'Actualizar';
 $lang['btn_delete']            = 'Borrar';
 $lang['btn_back']              = 'Atrás';
 $lang['btn_backlink']          = 'Enlaces a esta página';
-$lang['btn_backtomedia']       = 'Volver a la selección de archivos multimedia';
 $lang['btn_subscribe']         = 'Suscribirse a cambios de la página';
 $lang['btn_profile']           = 'Actualizar perfil';
 $lang['btn_reset']             = 'Restablecer';
@@ -98,11 +103,12 @@ $lang['badpassconfirm']        = 'Lo siento, la contraseña es errónea';
 $lang['minoredit']             = 'Cambios menores';
 $lang['draftdate']             = 'Borrador guardado automáticamente:';
 $lang['nosecedit']             = 'La página ha cambiado en el lapso, la información de sección estaba anticuada, en su lugar se cargó la página completa.';
-$lang['searchcreatepage']      = "Si no has encontrado lo que buscabas, puedes crear una nueva página con tu consulta utilizando el botón  ''Crea esta página''.";
+$lang['searchcreatepage']      = 'Si no has encontrado lo que buscabas, puedes crear una nueva página con tu consulta utilizando el botón  \'\'Crea esta página\'\'.';
 $lang['regmissing']            = 'Lo siento, tienes que completar todos los campos.';
 $lang['reguexists']            = 'Lo siento, ya existe un usuario con este nombre.';
 $lang['regsuccess']            = 'El usuario ha sido creado y la contraseña se ha enviado por correo.';
 $lang['regsuccess2']           = 'El usuario ha sido creado.';
+$lang['regfail']               = 'No se pudo crear el usuario.';
 $lang['regmailfail']           = 'Parece que ha habido un error al enviar el correo con la contraseña. ¡Por favor, contacta al administrador!';
 $lang['regbadmail']            = 'La dirección de correo no parece válida. Si piensas que esto es un error, contacta al administrador';
 $lang['regbadpass']            = 'Las dos contraseñas no son iguales, por favor inténtalo de nuevo.';
@@ -117,6 +123,7 @@ $lang['profdeleteuser']        = 'Eliminar Cuenta';
 $lang['profdeleted']           = 'Tu cuenta de usuario ha sido eliminada de este wiki';
 $lang['profconfdelete']        = 'Deseo eliminar mi cuenta de este wiki. <br /> Esta acción es irreversible.';
 $lang['profconfdeletemissing'] = 'Casilla de verificación no activada.';
+$lang['proffail']              = 'No se ha actualizado el perfil del usuario.';
 $lang['pwdforget']             = '¿Has olvidado tu contraseña? Consigue una nueva';
 $lang['resendna']              = 'Este wiki no brinda la posibilidad de reenvío de contraseña.';
 $lang['resendpwd']             = 'Establecer nueva contraseña para';
@@ -181,7 +188,6 @@ $lang['js']['media_overwrt']   = 'Sobreescribir ficheros exitentes';
 $lang['rssfailed']             = 'Se ha producido un error mientras se leían los datos de este feed: ';
 $lang['nothingfound']          = 'No se ha encontrado nada.';
 $lang['mediaselect']           = 'Archivos Multimedia';
-$lang['fileupload']            = 'Subida de archivos multimedia';
 $lang['uploadsucc']            = 'El archivo se ha subido satisfactoriamente';
 $lang['uploadfail']            = 'La subida del fichero ha fallado. ¿Permisos equivocados?';
 $lang['uploadwrong']           = 'Subida de fichero denegada. ¡Los ficheros con esta extensión están prohibidos!';
@@ -272,7 +278,6 @@ $lang['qb_sig']                = 'Insertar firma';
 $lang['qb_smileys']            = 'Sonrisas';
 $lang['qb_chars']              = 'Caracteres especiales';
 $lang['upperns']               = 'Saltar al espacio de nombres superior';
-$lang['admin_register']        = 'Añadir nuevo usuario';
 $lang['metaedit']              = 'Editar metadatos';
 $lang['metasaveerr']           = 'La escritura de los metadatos ha fallado';
 $lang['metasaveok']            = 'Los metadatos han sido guardados';
@@ -305,7 +310,6 @@ $lang['subscr_style_every']    = 'enviar correo en cada cambio';
 $lang['subscr_style_digest']   = 'Resumen de correo electrónico de cambios por cada página (cada %.2f días)';
 $lang['subscr_style_list']     = 'lista de páginas modificadas desde el último correo electrónico (cada %.2f días)';
 $lang['authtempfail']          = 'La autenticación de usuarios no está disponible temporalmente. Si esta situación persiste, por favor avisa al administrador del wiki.';
-$lang['authpwdexpire']         = 'Su contraseña caducara en %d días, debería cambiarla lo antes posible';
 $lang['i_chooselang']          = 'Elija su idioma';
 $lang['i_installer']           = 'Instalador de DokuWiki';
 $lang['i_wikiname']            = 'Nombre del wiki';
@@ -365,7 +369,10 @@ $lang['media_perm_read']       = 'Disculpa, no tienes los permisos necesarios pa
 $lang['media_perm_upload']     = 'Disculpa, no tienes los permisos necesarios para cargar ficheros.';
 $lang['media_update']          = 'Actualizar nueva versión';
 $lang['media_restore']         = 'Restaurar esta versión';
+$lang['media_acl_warning']     = 'Puede que esta lista no esté completa debido a restricciones de la ACL y a las páginas ocultas.';
 $lang['currentns']             = 'Espacio de nombres actual';
 $lang['searchresult']          = 'Resultado de la búsqueda';
 $lang['plainhtml']             = 'HTML sencillo';
 $lang['wikimarkup']            = 'Etiquetado Wiki';
+$lang['page_nonexist_rev']     = 'La página no existía en %s. Por tanto fue creada en <a href="%s">%s</a>.';
+$lang['unable_to_parse_date']  = 'Incapaz de evaluar el parámetro "%s".';
diff --git a/inc/lang/et/lang.php b/inc/lang/et/lang.php
index d3c510c438f6b01f98c1b824d1e8d16ad2b3af4f..dbff49dfcba89266ebfb5c0ebb36e233ab159952 100644
--- a/inc/lang/et/lang.php
+++ b/inc/lang/et/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Oliver S6ro <seem.iges@mail.ee>
  * @author Aari Juhanson <aari@vmg.vil.ee>
  * @author Kaiko Kaur <kaiko@kultuur.edu.ee>
@@ -41,7 +41,6 @@ $lang['btn_update']            = 'Uuenda';
 $lang['btn_delete']            = 'Kustuta';
 $lang['btn_back']              = 'Tagasi';
 $lang['btn_backlink']          = 'Tagasilingid';
-$lang['btn_backtomedia']       = 'Tagasi faili valikusse';
 $lang['btn_subscribe']         = 'Jälgi seda lehte (teated meilile)';
 $lang['btn_profile']           = 'Minu info';
 $lang['btn_reset']             = 'Taasta';
@@ -154,7 +153,6 @@ $lang['js']['media_overwrt']   = 'Asenda olemasolevad failid';
 $lang['rssfailed']             = 'Sinu soovitud info ammutamisel tekkis viga: ';
 $lang['nothingfound']          = 'Oops, aga mitte muhvigi ei leitud.';
 $lang['mediaselect']           = 'Hunnik faile';
-$lang['fileupload']            = 'Faili üleslaadimine';
 $lang['uploadsucc']            = 'Üleslaadimine läks ootuspäraselt hästi';
 $lang['uploadfail']            = 'Üleslaadimine läks nässu. Äkki pole Sa selleks lihtsalt piisavalt võimukas tegija?';
 $lang['uploadwrong']           = 'Ei saa Sa midagi üles laadida. Oops, aga seda tüüpi faili sul lihtsalt ei lubata üles laadida';
@@ -239,7 +237,6 @@ $lang['qb_sig']                = 'Lisa allkiri!';
 $lang['qb_smileys']            = 'Emotikonid';
 $lang['qb_chars']              = 'Erisümbolid';
 $lang['upperns']               = 'mine ülemisse nimeruumi';
-$lang['admin_register']        = 'Lisa kasutaja';
 $lang['metaedit']              = 'Muuda lisainfot';
 $lang['metasaveerr']           = 'Lisainfo salvestamine läks untsu.';
 $lang['metasaveok']            = 'Lisainfo salvestatud';
@@ -273,7 +270,6 @@ $lang['subscr_style_every']    = 'igast toimetamisest teavitab ekiri';
 $lang['subscr_style_digest']   = 'kokkuvõte ekirjaga toimetamistest igal leheküljel (iga %.2f päeva järel)';
 $lang['subscr_style_list']     = 'Peale viimast ekirja (iga %.2f päeva järel) toimetaud lehekülgede loend.';
 $lang['authtempfail']          = 'Kasutajate autentimine on ajutiselt rivist väljas. Kui see olukord mõne aja jooksul ei parane, siis teavita sellest serveri haldajat.';
-$lang['authpwdexpire']         = 'Sinu salasõna aegub %päeva pärast, võiksid seda peatselt muuta.';
 $lang['i_chooselang']          = 'Vali keel';
 $lang['i_installer']           = 'DokuWiki paigaldaja';
 $lang['i_wikiname']            = 'Wiki nimi';
diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php
index fcf45b946817dd944b9ea920254dea75247e169e..f66cda04c61ecdfac920a186636a850000b6e247 100644
--- a/inc/lang/eu/lang.php
+++ b/inc/lang/eu/lang.php
@@ -38,7 +38,6 @@ $lang['btn_update']            = 'Eguneratu';
 $lang['btn_delete']            = 'Ezabatu';
 $lang['btn_back']              = 'Atzera';
 $lang['btn_backlink']          = 'Itzulera estekak';
-$lang['btn_backtomedia']       = 'Atzera Multimedia Fitxategiaren Aukeraketara';
 $lang['btn_subscribe']         = 'Harpidetu Orri Aldaketetara';
 $lang['btn_profile']           = 'Eguneratu Profila ';
 $lang['btn_reset']             = 'Aldaketak Desegin';
@@ -143,7 +142,6 @@ $lang['js']['media_overwrt']   = 'Dauden fitxategiak berridatzi';
 $lang['rssfailed']             = 'Errorea gertatu da feed hau irakurtzean:';
 $lang['nothingfound']          = 'Ez da ezer aurkitu.';
 $lang['mediaselect']           = 'Aukeratu Multimedia fitxategia';
-$lang['fileupload']            = 'Igo Multimedia Fitxategia';
 $lang['uploadsucc']            = 'Igoera arrakastatsua';
 $lang['uploadfail']            = 'Igoerak huts egin du. Baimen arazoengatik agian?';
 $lang['uploadwrong']           = 'Fitxategi igoera ukatua. Fitxategi-luzapen hau debekatua dago!';
@@ -229,7 +227,6 @@ $lang['qb_sig']                = 'Gehitu sinadura';
 $lang['qb_smileys']            = 'Irrifartxoak';
 $lang['qb_chars']              = 'Karaktere Bereziak';
 $lang['upperns']               = 'Jauzi izen-espazio gurasora';
-$lang['admin_register']        = 'Erabiltzaile berria gehitu';
 $lang['metaedit']              = 'Metadatua Aldatu';
 $lang['metasaveerr']           = 'Metadatuaren idazketak huts egin du';
 $lang['metasaveok']            = 'Metadatua gordea';
@@ -262,7 +259,6 @@ $lang['subscr_style_every']    = 'e-posta aldaketa bakoitzean';
 $lang['subscr_style_digest']   = 'e-posta laburbildua orri bakoitzeko aldaketentzat (%.2f egunero)';
 $lang['subscr_style_list']     = 'aldatutako orrien zerrenda azken e-postatik (%.2f egunero)';
 $lang['authtempfail']          = 'Erabiltzaile kautotzea denboraldi batez ez dago erabilgarri. Egoerak hala jarraitzen badu, mesedez, eman honen berri Wiki administratzaileari';
-$lang['authpwdexpire']         = 'Zure pasahitza %d egun barru iraungiko da, laster aldatu beharko zenuke.';
 $lang['i_chooselang']          = 'Hautatu zure hizkuntza';
 $lang['i_installer']           = 'DokuWiki instalatzailea';
 $lang['i_wikiname']            = 'Wiki Izena';
diff --git a/inc/lang/fa/admin.txt b/inc/lang/fa/admin.txt
index ce7550977193a42f7d69f4ed3eca49d565f5c650..f8e36ba4940feb9cb050e63c8cc0b59f7eb8f390 100644
--- a/inc/lang/fa/admin.txt
+++ b/inc/lang/fa/admin.txt
@@ -1,3 +1,3 @@
 ====== مدیریت ======
 
-در اینجا لیستی از وظیفه‌های مدیریتی را مشاهده می‌کنید.
\ No newline at end of file
+در اینجا فهرستی از وظیفه‌های مدیریتی را مشاهده می‌کنید.
\ No newline at end of file
diff --git a/inc/lang/fa/adminplugins.txt b/inc/lang/fa/adminplugins.txt
index 3d2bb4a5b589a9dc5fe74f256aecb0d35c033dcf..dab0251be2462a89f6d65b0e4c1930fbc0737505 100644
--- a/inc/lang/fa/adminplugins.txt
+++ b/inc/lang/fa/adminplugins.txt
@@ -1 +1 @@
-===== برنامه های جانبی دیگر =====
\ No newline at end of file
+===== برنامه‌های جانبی دیگر =====
\ No newline at end of file
diff --git a/inc/lang/fa/backlinks.txt b/inc/lang/fa/backlinks.txt
index 6864e22d60d132e7557e620007f3c083b99bff68..774d3d6cc517b496c025085157059321b8902fdd 100644
--- a/inc/lang/fa/backlinks.txt
+++ b/inc/lang/fa/backlinks.txt
@@ -1,3 +1,3 @@
 ====== پیوندهای بازگشتی ======
 
-در این‌جا لیستی از صفحاتی که به این صفحه پیوند داده‌اند را مشاهده می‌کنید.
\ No newline at end of file
+در این‌جا فهرستی از صفحاتی که به این صفحه پیوند داده‌اند را مشاهده می‌کنید.
\ No newline at end of file
diff --git a/inc/lang/fa/denied.txt b/inc/lang/fa/denied.txt
index 4bffa0f3c2f2e91fc65b0456b18abfcd503feb11..190b710ca85f580424dad1670845d456310ab51d 100644
--- a/inc/lang/fa/denied.txt
+++ b/inc/lang/fa/denied.txt
@@ -1,4 +1,4 @@
 ====== دسترسی ممکن نیست ======
 
-شرمنده، شما اجازه‌ی دسترسی ب این صفحه را ندارید.
+شرمنده، شما اجازهٔ دسترسی به این صفحه را ندارید.
 
diff --git a/inc/lang/fa/diff.txt b/inc/lang/fa/diff.txt
index d5354f727f8c967e4930fe40b9d3984aafa3c39e..80e1ce7a1f2ef885f70ed2c93954197fe7fe67b0 100644
--- a/inc/lang/fa/diff.txt
+++ b/inc/lang/fa/diff.txt
@@ -1,3 +1,3 @@
 ====== تفاوت‌ها ======
 
-تفاوت دو نسخه‌ی متفاوت از صفحه را مشاهده می‌کنید.
\ No newline at end of file
+تفاوت دو نسخهٔ متفاوت از صفحه را مشاهده می‌کنید.
\ No newline at end of file
diff --git a/inc/lang/fa/editrev.txt b/inc/lang/fa/editrev.txt
index ca896feebbfb835645c81d55aa6450fab52d614a..eae539414b15ac22699ebd12a5033f46f6e8b32d 100644
--- a/inc/lang/fa/editrev.txt
+++ b/inc/lang/fa/editrev.txt
@@ -1 +1,2 @@
-**شما یک نگارش قدیمی را مشاهده می‌کنید!** اگر این نگارش را ذخیره کنید، شما یک نگارش جدید ایجاد کرده‌اید!
\ No newline at end of file
+**شما یک نگارش قدیمی را مشاهده می‌کنید!** اگر این نگارش را ذخیره کنید، شما یک نگارش جدید ایجاد کرده‌اید!
+----
\ No newline at end of file
diff --git a/inc/lang/fa/jquery.ui.datepicker.js b/inc/lang/fa/jquery.ui.datepicker.js
index 8ffd664111ece1d11d0db44ea53e16c8a4c10c20..71f8a2852045de6135cbf38cf1ee08032dc60b94 100644
--- a/inc/lang/fa/jquery.ui.datepicker.js
+++ b/inc/lang/fa/jquery.ui.datepicker.js
@@ -19,18 +19,18 @@ datepicker.regional['fa'] = {
 	nextText: 'بعدی&#x3E;',
 	currentText: 'امروز',
 	monthNames: [
-		'فروردين',
-		'ارديبهشت',
-		'خرداد',
-		'تير',
-		'مرداد',
-		'شهريور',
-		'مهر',
-		'آبان',
-		'آذر',
-		'دی',
-		'بهمن',
-		'اسفند'
+		'ژانویه',
+		'فوریه',
+		'مارس',
+		'آوریل',
+		'مه',
+		'ژوئن',
+		'ژوئیه',
+		'اوت',
+		'سپتامبر',
+		'اکتبر',
+		'نوامبر',
+		'دسامبر'
 	],
 	monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
 	dayNames: [
diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php
index 25de5c92ee332058ac3c89cb30ac64f2ec27d6cf..c05b8b50161db037be70af32f82159d24f62e630 100644
--- a/inc/lang/fa/lang.php
+++ b/inc/lang/fa/lang.php
@@ -15,6 +15,8 @@
  * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
  * @author Mohammad Sadegh <msdn2013@gmail.com>
  * @author Omid Hezaveh <hezpublic@gmail.com>
+ * @author Mohmmad Razavi <sepent@gmail.com>
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'rtl';
@@ -24,9 +26,9 @@ $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
 $lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'ویرایش این صفحه';
-$lang['btn_source']            = 'نمایش مبدا';
+$lang['btn_source']            = 'نمایش متن صفحه';
 $lang['btn_show']              = 'نمایش صفحه';
-$lang['btn_create']            = 'ساخت این صفحه';
+$lang['btn_create']            = 'ایجاد این صفحه';
 $lang['btn_search']            = 'جستجو';
 $lang['btn_save']              = 'ذخیره';
 $lang['btn_preview']           = 'پیش‌نمایش';
@@ -46,7 +48,6 @@ $lang['btn_update']            = 'به‌روزرسانی';
 $lang['btn_delete']            = 'حذف';
 $lang['btn_back']              = 'عقب';
 $lang['btn_backlink']          = 'پیوندهای به این صفحه';
-$lang['btn_backtomedia']       = 'بازگشت به انتخاب فایل';
 $lang['btn_subscribe']         = 'عضویت در تغییرات صفحه';
 $lang['btn_profile']           = 'به‌روزرسانی پروفایل';
 $lang['btn_reset']             = 'بازنشاندن';
@@ -64,23 +65,24 @@ $lang['btn_mediaManager']      = 'مشاهده در مدیریت رسانه‌ه
 $lang['loggedinas']            = 'به این عنوان وارد شده‌اید:';
 $lang['user']                  = 'نام کاربری';
 $lang['pass']                  = 'گذرواژه‌';
-$lang['newpass']               = 'گذروازه‌ی جدید';
+$lang['newpass']               = 'گذرواژه‌ی جدید';
 $lang['oldpass']               = 'گذرواژه‌ی فعلی را تایید کنید';
 $lang['passchk']               = 'یک بار دیگر';
 $lang['remember']              = 'مرا به خاطر بسپار.';
-$lang['fullname']              = '*نام واقعی شما';
-$lang['email']                 = 'ایمیل شما*';
+$lang['fullname']              = 'نام واقعی شما';
+$lang['email']                 = 'ایمیل شما';
 $lang['profile']               = 'پروفایل کاربر';
-$lang['badlogin']              = 'خطا در ورود به سیستم';
-$lang['badpassconfirm']        = 'متاسفم ، رمز عبور اشتباه است';
+$lang['badlogin']              = 'متاسفم، نام کاربری یا رمز عبور اشتباه است.';
+$lang['badpassconfirm']        = 'متاسفم، رمز عبور اشتباه است';
 $lang['minoredit']             = 'این ویرایش خُرد است';
-$lang['draftdate']             = 'ذخیره خودکار پیش‌نویس';
+$lang['draftdate']             = 'ذخیره خودکار پیش‌نویس در';
 $lang['nosecedit']             = 'این صفحه در این میان تغییر کرده است، اطلاعات بخش قدیمی شده است، در عوض محتوای کل نمایش داده می‌شود.';
 $lang['searchcreatepage']      = 'اگر به نتیجه‌ی مطلوبی نرسیده‌اید، می‌توانید صفحه‌ی مورد نظر را ایجاد کنید.';
 $lang['regmissing']            = 'متاسفم، شما باید همه قسمت‌ها را پر کنید.';
 $lang['reguexists']            = 'نام کاربری‌ای که وارد کردید قبلن استفاده شده است. خواهشمندیم یک نام دیگر انتخاب کنید.';
 $lang['regsuccess']            = 'کاربر ساخته شد و گذرواژه به صورت ایمیل ارسال گردید.';
 $lang['regsuccess2']           = 'حساب ایجاد شد.';
+$lang['regfail']               = 'ایجاد کاربر ممکن نیست.';
 $lang['regmailfail']           = 'مشکلی در ارسال ایمیل پیش آمده است، با مدیر تماس بگیرید!';
 $lang['regbadmail']            = 'نشانی واردشده‌ی ایمیل قابل‌قبول نیست، چرا که دارای ساختار نامعتبری است. خواهشمندیم نشانی‌ای با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.';
 $lang['regbadpass']            = 'گذرواژه‌هایی که وارد کردید یکسان نیستند.';
@@ -95,30 +97,30 @@ $lang['profdeleteuser']        = 'حذف حساب کاربری';
 $lang['profdeleted']           = 'حساب کاربری شما حذف گردیده است.';
 $lang['profconfdelete']        = 'می‌خواهم حساب کاربری من از این ویکی حذف شود. <br/> این عمل قابل برگشت نیست.';
 $lang['profconfdeletemissing'] = 'جعبه‌ی تأیید تیک نخورده است';
-$lang['pwdforget']             = 'گذرواژه‌ی خود را فراموش کرده‌اید؟ جدید دریافت کنید';
+$lang['proffail']              = 'بروزرسانی پروفایل کاربری انجام نشد.';
+$lang['pwdforget']             = 'گذرواژه‌ی خود را فراموش کرده‌اید؟ گذرواژه‌ی جدید دریافت کنید';
 $lang['resendna']              = 'این ویکی ارسال مجدد گذرواژه را پشتیبانی نمی‌کند';
 $lang['resendpwd']             = 'تعیین کلمه عبور جدید برای ';
-$lang['resendpwdmissing']      = 'متاسفم، شما باید تمام قسمت‌ها را پر کنید';
-$lang['resendpwdnouser']       = 'متاسفم، ما نتوانستیم این نام کاربری را در بانک خود پیدا کنیم';
+$lang['resendpwdmissing']      = 'متاسفم، شما باید تمام قسمت‌ها را پر کنید.';
+$lang['resendpwdnouser']       = 'متاسفم، ما نتوانستیم این نام کاربری را در پایگاه دادهٔ خود پیدا کنیم.';
 $lang['resendpwdbadauth']      = 'متاسفم، کد شناسایی معتبر نیست. از صحت لینک تاییدیه اطمینان حاصل کنید.';
-$lang['resendpwdconfirm']      = 'یک ایمیل تاییدیه‌ی آدرس به آدرس مورنظر ارسال شد. قبل از اینکه نامه‌ی دیگری قابل ارسال به این آدرس باشد، باید دستوراتی که در آن نامه آمده است را جهت تایید این مساله که این آدرس متعلق به شماست، اجرا کنید.';
-$lang['resendpwdsuccess']      = 'گذرواژه‌ی جدید شما توسط ایمیل ارسال شد';
+$lang['resendpwdconfirm']      = 'یک لینک تاییدیه آدرس از طریق ایمیل ارسال شد.';
+$lang['resendpwdsuccess']      = 'گذرواژه‌ی جدید شما توسط ایمیل ارسال شد.';
 $lang['license']               = 'به جز مواردی که ذکر می‌شود، مابقی محتویات ویکی تحت مجوز زیر می‌باشند:';
 $lang['licenseok']             = 'توجه: با ویرایش این صفحه، شما مجوز زیر را تایید می‌کنید:';
 $lang['searchmedia']           = 'نام فایل برای جستجو:';
 $lang['searchmedia_in']        = 'جستجو در %s';
-$lang['txt_upload']            = 'فایل را برای ارسال انتخاب کنید:';
+$lang['txt_upload']            = 'فایل را برای آپلود انتخاب کنید:';
 $lang['txt_filename']          = 'ارسال به صورت (اختیاری):';
 $lang['txt_overwrt']           = 'بر روی فایل موجود بنویس';
 $lang['maxuploadsize']         = 'حداکثر %s برای هر فایل مجاز است.';
 $lang['lockedby']              = 'در حال حاضر قفل شده است:';
-$lang['lockexpire']            = 'قفل منقضی شده است:';
+$lang['lockexpire']            = 'قفل منقضی می‌شود در:';
 $lang['js']['willexpire']      = 'حالت قفل شما مدتی است منقضی شده است \n برای جلوگیری از تداخل دکمه‌ی پیش‌نمایش را برای صفر شدن ساعت قفل بزنید.';
-$lang['js']['notsavedyet']     = 'تغییرات ذخیره شده از بین خواهد رفت.
- می‌خواهید ادامه دهید؟';
-$lang['js']['searchmedia']     = 'جستجو برای فایل';
-$lang['js']['keepopen']        = 'پنجره را ر زمان انتخاب باز نگه‌دار';
-$lang['js']['hidedetails']     = 'پتهان کردن جزییات';
+$lang['js']['notsavedyet']     = 'تغییرات ذخیره نشده از بین خواهد رفت.';
+$lang['js']['searchmedia']     = 'جستجو برای فایل‌ها';
+$lang['js']['keepopen']        = 'پنجره را در زمان انتخاب باز نگه‌دار';
+$lang['js']['hidedetails']     = 'پنهان کردن جزئیات';
 $lang['js']['mediatitle']      = 'تنظیمات پیوند';
 $lang['js']['mediadisplay']    = 'نوع پیوند';
 $lang['js']['mediaalign']      = 'هم‌ترازی';
@@ -126,13 +128,13 @@ $lang['js']['mediasize']       = 'اندازه تصویر';
 $lang['js']['mediatarget']     = 'هدف پیوند';
 $lang['js']['mediaclose']      = 'بستن';
 $lang['js']['mediainsert']     = 'درج کردن';
-$lang['js']['mediadisplayimg'] = 'نمایش تصویر';
+$lang['js']['mediadisplayimg'] = 'نمایش تصویر.';
 $lang['js']['mediadisplaylnk'] = 'فقط پیوند را نمایش بده.';
 $lang['js']['mediasmall']      = 'نگارش کوچک';
 $lang['js']['mediamedium']     = 'نگارش متوسط';
 $lang['js']['medialarge']      = 'نگارش بزرگ';
 $lang['js']['mediaoriginal']   = 'نگارش اصلی';
-$lang['js']['medialnk']        = 'پیوند به صفحه‌ی جزییات';
+$lang['js']['medialnk']        = 'پیوند به صفحه‌ی جزئیات';
 $lang['js']['mediadirect']     = 'پیوند مستقیم به اصلی';
 $lang['js']['medianolnk']      = 'بدون پیوند';
 $lang['js']['medianolink']     = 'تصویر را پیوند نکن';
@@ -150,39 +152,38 @@ $lang['js']['media_diff']      = 'تفاوت ها را ببینید: ';
 $lang['js']['media_diff_both'] = 'پهلو به پهلو';
 $lang['js']['media_diff_opacity'] = 'درخشش از';
 $lang['js']['media_diff_portions'] = 'کش رفتن';
-$lang['js']['media_select']    = 'انتخاب فایل -یا فایلها- ...';
+$lang['js']['media_select']    = 'انتخاب فایل‌ها...';
 $lang['js']['media_upload_btn'] = 'آپلود';
 $lang['js']['media_done_btn']  = 'انجام شد';
-$lang['js']['media_drop']      = 'فایل ها را در اینجا قرار دهید تا آپلود شود';
+$lang['js']['media_drop']      = 'فایل‌ها را در اینجا قرار دهید تا آپلود شود';
 $lang['js']['media_cancel']    = 'حذف';
-$lang['js']['media_overwrt']   = 'جاینوشت فایل های موجود';
-$lang['rssfailed']             = 'بروز خطا در هنگام واکشی';
-$lang['nothingfound']          = 'چیزی پیدا نشد';
+$lang['js']['media_overwrt']   = 'جاینوشت فایل‌های موجود';
+$lang['rssfailed']             = 'بروز خطا در هنگام واکشی این فید:';
+$lang['nothingfound']          = 'چیزی پیدا نشد.';
 $lang['mediaselect']           = 'فایل‌ها';
-$lang['fileupload']            = 'ارسال پرونده';
 $lang['uploadsucc']            = 'ارسال با موفقیت انجام شد';
-$lang['uploadfail']            = 'خطا در ارسال';
-$lang['uploadwrong']           = 'ارسال متوقف شد. این توسعه‌ی فایل ممنوع می‌باشد.';
-$lang['uploadexist']           = 'این فابل وجود دارد. عملی انجام نشد.';
-$lang['uploadbadcontent']      = 'محتوای فایل ارسال شده با توسعه‌ی %s متناقض است.';
+$lang['uploadfail']            = 'خطا در ارسال. شاید دسترسی‌ها نادرست است؟';
+$lang['uploadwrong']           = 'ارسال متوقف شد. این فرمت فایل ممنوع می‌باشد.';
+$lang['uploadexist']           = 'این فایل وجود دارد. عملی انجام نشد.';
+$lang['uploadbadcontent']      = 'محتوای فایل آپلود شده با فرمت %s یکسان نیست.';
 $lang['uploadspam']            = 'فایل ارسال شده توسط لیست سیاه اسپم‌ها مسدود شده است.';
 $lang['uploadxss']             = 'این صفحه حاوی اسکریپت یا کد اچ‌تی‌ام‌ال است که ممکن است به نادرست توسط مرورگر وب تفسیر شود.';
 $lang['uploadsize']            = 'فایل ارسال شده سنگین است. (بیشینه، %s)';
 $lang['deletesucc']            = 'فایل «%s» حذف شد.';
 $lang['deletefail']            = '«%s» حذف نمی‌شود، دسترسی‌ها را بررسی کنید.';
 $lang['mediainuse']            = 'فایل «%s» حذف نمی‌شود، چون هنوز در حال استفاده است.';
-$lang['namespaces']            = 'فضای‌نام';
+$lang['namespaces']            = 'فضای‌نام‌ها';
 $lang['mediafiles']            = 'فایل‌های موجود در';
 $lang['accessdenied']          = 'شما اجازه‌ی مشاهده‌ی این صفحه را ندارید.';
 $lang['mediausage']            = 'برای ارجاع دادن به فایل از نگارش زیر استفاده کنید.';
 $lang['mediaview']             = 'مشاهده‌ی فایل اصلی';
 $lang['mediaroot']             = 'ریشه';
-$lang['mediaupload']           = 'ارسال فایل به فضای‌نام کنونی. برای ایجاد زیرفضای‌نام‌ها، نام‌های آن‌ها را به عنوان پیشوندهایی که با دونقطه «:» جدا شده‌اند به نام فایل، در قسمت «ارسال به صورت» اضافه کنید.';
-$lang['mediaextchange']        = 'توسعه‌ی فایل از %s به %s تغییر داده شد.';
+$lang['mediaupload']           = 'ارسال فایل به فضای‌نام کنونی. برای ایجاد زیرفضای‌نام‌ها، پس از انتخاب فایل‌ها در قسمت «ارسال به صورت» به نام فایل نام‌های فضای‌نام‌ها را به عنوان پیشوندهایی که با دونقطه «:» جدا شده‌اند، اضافه کنید. همچنین فایل‌ها می‌توانند با کشیدن و ول کردن انتخاب شوند.';
+$lang['mediaextchange']        = 'فرمت فایل از %s به %s تغییر داده شد.';
 $lang['reference']             = 'ارجاع‌های';
 $lang['ref_inuse']             = 'این فایل نمی‌تواند حذف شود، زیرا هم‌چنان در این صفحه استفاده شده است:';
 $lang['ref_hidden']            = 'تعدادی مرجع در صفحاتی که شما دسترسی خواندن ندارید وجود دارد.';
-$lang['hits']                  = 'بازدید';
+$lang['hits']                  = 'بازدیدها';
 $lang['quickhits']             = 'جور کردن نام صفحات';
 $lang['toc']                   = 'فهرست مندرجات';
 $lang['current']               = 'فعلی';
@@ -250,7 +251,6 @@ $lang['qb_sig']                = 'افزودن امضا';
 $lang['qb_smileys']            = 'Ø´Ú©Ù„Ú©';
 $lang['qb_chars']              = 'حروف ویژه';
 $lang['upperns']               = 'پرش به فضای‌نام بالا';
-$lang['admin_register']        = 'یک حساب جدید بسازید';
 $lang['metaedit']              = 'ویرایش داده‌های متا';
 $lang['metasaveerr']           = 'نوشتن داده‌نما با مشکل مواجه شد';
 $lang['metasaveok']            = 'داده‌نما ذخیره شد';
@@ -283,7 +283,6 @@ $lang['subscr_style_every']    = 'ارسال رای‌نامه در تمامی 
 $lang['subscr_style_digest']   = 'ایمیل خلاصه‌ی تغییرات هر روز (هر %.2f روز)';
 $lang['subscr_style_list']     = 'فهرست صفحات تغییریافته از آخرین ایمیل (هر %.2f روز)';
 $lang['authtempfail']          = 'معتبرسازی کابران موقتن مسدود می‌باشد. اگر این حالت پایدار بود، مدیر ویکی را باخبر سازید.';
-$lang['authpwdexpire']         = 'کلمه عبور شما در %d روز منقضی خواهد شد ، شما باید آن را زود تغییر دهید';
 $lang['i_chooselang']          = 'انتخاب زبان';
 $lang['i_installer']           = 'نصب کننده‌ی Dokuwiki';
 $lang['i_wikiname']            = 'نام ویکی';
@@ -343,7 +342,10 @@ $lang['media_perm_read']       = 'متاسفانه شما حق خواندن ای
 $lang['media_perm_upload']     = 'متاسفانه شما حق آپلود این فایل‌ها را ندارید.';
 $lang['media_update']          = 'آپلود نسخه‌ی جدید';
 $lang['media_restore']         = 'بازیابی این نسخه';
+$lang['media_acl_warning']     = 'این لیست ممکن است به خاطر محدودیتهای دسترسیهای ACL و صفحات پنهان کامل نباشد.';
 $lang['currentns']             = 'فضای نام جاری';
 $lang['searchresult']          = 'نتیجه‌ی جستجو';
 $lang['plainhtml']             = 'HTML ساده';
 $lang['wikimarkup']            = 'نشانه‌گذاری ویکی';
+$lang['page_nonexist_rev']     = 'صفحه %s وجود نداشت. این صفحه معاقباً در<a href="%s">%s</a> ایجاد شد.';
+$lang['unable_to_parse_date']  = 'امکان تجزیه و تحلیل پارامتر «%s» وجود ندارد.';
diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php
index 9bf4aad197db183fa4632be354ff775abfbf876e..de2ca13dacb67f30ce49dae294f81578cd75c363 100644
--- a/inc/lang/fi/lang.php
+++ b/inc/lang/fi/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Petteri <petteri@gmail.com>
  * @author Matti Pöllä <mpo@iki.fi>
  * @author Otto Vainio <otto@valjakko.net>
@@ -17,7 +17,7 @@ $lang['doublequoteopening']    = '”';
 $lang['doublequoteclosing']    = '”';
 $lang['singlequoteopening']    = '’';
 $lang['singlequoteclosing']    = '’';
-$lang['apostrophe']            = '\'';
+$lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'Muokkaa tätä sivua';
 $lang['btn_source']            = 'Näytä sivun lähdekoodi';
 $lang['btn_show']              = 'Näytä sivu';
@@ -41,7 +41,6 @@ $lang['btn_update']            = 'Päivitä';
 $lang['btn_delete']            = 'Poista';
 $lang['btn_back']              = 'Takaisin';
 $lang['btn_backlink']          = 'Paluulinkit';
-$lang['btn_backtomedia']       = 'Takaisin mediatiedostojen valintaan';
 $lang['btn_subscribe']         = 'Tilaa muutokset';
 $lang['btn_profile']           = 'Päivitä profiili';
 $lang['btn_reset']             = 'Tyhjennä';
@@ -154,7 +153,6 @@ $lang['js']['media_overwrt']   = 'Ylikirjoita olemassa olevat tiedostot';
 $lang['rssfailed']             = 'Virhe tapahtui noudettaessa tätä syötettä: ';
 $lang['nothingfound']          = 'Mitään ei löytynyt.';
 $lang['mediaselect']           = 'Mediatiedoston valinta';
-$lang['fileupload']            = 'Mediatiedoston lähetys';
 $lang['uploadsucc']            = 'Tiedoston lähetys onnistui';
 $lang['uploadfail']            = 'Tiedoston lähetys epäonnistui. Syynä ehkä väärät oikeudet?';
 $lang['uploadwrong']           = 'Tiedoston lähetys evätty. Tämä tiedostopääte on kielletty';
@@ -243,7 +241,6 @@ $lang['qb_sig']                = 'Lisää allekirjoitus';
 $lang['qb_smileys']            = 'Hymiöt';
 $lang['qb_chars']              = 'Erikoismerkit';
 $lang['upperns']               = 'Hyppää edelliseen nimiavaruuteen';
-$lang['admin_register']        = 'Lisää uusi käyttäjä';
 $lang['metaedit']              = 'Muokkaa metadataa';
 $lang['metasaveerr']           = 'Metadatan kirjoittaminen epäonnistui';
 $lang['metasaveok']            = 'Metadata tallennettu';
@@ -276,7 +273,6 @@ $lang['subscr_style_every']    = 'Sähköposti joka muutoksesta';
 $lang['subscr_style_digest']   = 'yhteenveto-sähköposti joka sivusta (joka %.2f. päivä)';
 $lang['subscr_style_list']     = 'lista muuttuneista sivuista edellisen sähköpostin jälkeen (joka %.2f. päivä)';
 $lang['authtempfail']          = 'Käyttäjien autentikointi ei tällä hetkellä onnistu. Jos ongelma jatkuu, ota yhteyttä wikin ylläpitäjään.';
-$lang['authpwdexpire']         = 'Salasanasi vanhenee %d pv:n päästä, vaihda salasanasi pikaisesti.';
 $lang['i_chooselang']          = 'Valitse kieli';
 $lang['i_installer']           = 'DokuWikin asentaja';
 $lang['i_wikiname']            = 'Wikin nimi';
diff --git a/inc/lang/fo/lang.php b/inc/lang/fo/lang.php
index 0aee76e01b089cc8b4aeda1ee6aaf61b61e44901..d1d7096c9982f078ec51873cc59b520b6eacc157 100644
--- a/inc/lang/fo/lang.php
+++ b/inc/lang/fo/lang.php
@@ -8,11 +8,11 @@
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
-$lang['doublequoteopening']    = 'Vanligt gásareygað byrjan';
-$lang['doublequoteclosing']    = 'Vanligt gásareygað endi';
-$lang['singlequoteopening']    = 'Einstakt gásareygað byrjan';
-$lang['singlequoteclosing']    = 'Einstakt gásareygað endi';
-$lang['apostrophe']            = 'Apostroff';
+$lang['doublequoteopening']    = '&quot;';
+$lang['doublequoteclosing']    = '&quot;';
+$lang['singlequoteopening']    = '\'';
+$lang['singlequoteclosing']    = '\'';
+$lang['apostrophe']            = '\'';
 $lang['btn_edit']              = 'Rætta hetta skjal';
 $lang['btn_source']            = 'Vís keldu';
 $lang['btn_show']              = 'Vís skjal';
@@ -36,7 +36,6 @@ $lang['btn_update']            = 'Dagfør';
 $lang['btn_delete']            = 'Strika';
 $lang['btn_back']              = 'Aftur';
 $lang['btn_backlink']          = 'Ávísingar afturúr';
-$lang['btn_backtomedia']       = 'Aftur til val av miðlafílu';
 $lang['btn_subscribe']         = 'Tilmelda broytingar';
 $lang['btn_profile']           = 'Dagføra vangamynd';
 $lang['btn_reset']             = 'Nullstilla';
@@ -105,7 +104,6 @@ $lang['js']['del_confirm']     = 'Strika post(ar)?';
 $lang['rssfailed']             = 'Eitt brek koma fyri tá roynt var at fáa: ';
 $lang['nothingfound']          = 'Leiting gav onki úrslit.';
 $lang['mediaselect']           = 'Vel miðlafílu';
-$lang['fileupload']            = 'Legg miðla fílu upp';
 $lang['uploadsucc']            = 'Upp legg av fílu var væl eydna';
 $lang['uploadfail']            = 'Brek við upp legg av fílu. Tað er møguliga trupuleikar við rættindunum';
 $lang['uploadwrong']           = 'Upp legg av fílu víst burtur. Fíluslag er ikki loyvt';
@@ -154,7 +152,6 @@ $lang['qb_media']              = 'Leggja myndir og aðrar fílur afturat';
 $lang['qb_sig']                = 'Set inn undirskrift';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Sertekn';
-$lang['admin_register']        = 'Upprætta nýggjan brúkara';
 $lang['metaedit']              = 'Rætta metadáta';
 $lang['metasaveerr']           = 'Brek við skriving av metadáta';
 $lang['metasaveok']            = 'Metadáta goymt';
diff --git a/inc/lang/fr/jquery.ui.datepicker.js b/inc/lang/fr/jquery.ui.datepicker.js
index 2f5ff3cbefabee53fd5e287adc515c7fcdc1e42e..6b6e0b35fc76f40d900dd45fef476bd1a7df1c6c 100644
--- a/inc/lang/fr/jquery.ui.datepicker.js
+++ b/inc/lang/fr/jquery.ui.datepicker.js
@@ -21,7 +21,7 @@ datepicker.regional['fr'] = {
 	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',
+	monthNamesShort: ['janv.', 'févr.', 'mars', 'avr.', '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.'],
diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php
index 9deff1220c3886f3295c581c804d3e020f6e7e31..c737862fcd7fe08136a2f3f9f2da404faf41ffc4 100644
--- a/inc/lang/fr/lang.php
+++ b/inc/lang/fr/lang.php
@@ -36,6 +36,8 @@
  * @author Schplurtz le Déboulonné <schplurtz@laposte.net>
  * @author YoBoY <yoboy@ubuntu-fr.org>
  * @author james <j.mccann@celcat.com>
+ * @author Pietroni <pietroni@informatique.univ-paris-diderot.fr>
+ * @author Floriang <antispam@floriang.eu>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -67,8 +69,7 @@ $lang['btn_update']            = 'Mettre à jour';
 $lang['btn_delete']            = 'Effacer';
 $lang['btn_back']              = 'Retour';
 $lang['btn_backlink']          = 'Liens de retour';
-$lang['btn_backtomedia']       = 'Retour à la sélection du fichier média';
-$lang['btn_subscribe']         = 'Gérer souscriptions';
+$lang['btn_subscribe']         = 'Gérer les abonnements';
 $lang['btn_profile']           = 'Mettre à jour le profil';
 $lang['btn_reset']             = 'Réinitialiser';
 $lang['btn_resendpwd']         = 'Définir un nouveau mot de passe';
@@ -102,6 +103,7 @@ $lang['regmissing']            = 'Désolé, vous devez remplir tous les champs.'
 $lang['reguexists']            = 'Désolé, ce nom d\'utilisateur est déjà pris.';
 $lang['regsuccess']            = 'L\'utilisateur a été créé. Le mot de passe a été expédié par courriel.';
 $lang['regsuccess2']           = 'L\'utilisateur a été créé.';
+$lang['regfail']               = 'L\'utilisateur n\'a pu être crée.';
 $lang['regmailfail']           = 'On dirait qu\'il y a eu une erreur lors de l\'envoi du mot de passe de messagerie. Veuillez contacter l\'administrateur !';
 $lang['regbadmail']            = 'L\'adresse de courriel semble incorrecte. Si vous pensez que c\'est une erreur, contactez l\'administrateur.';
 $lang['regbadpass']            = 'Les deux mots de passe fournis sont différents, veuillez recommencez.';
@@ -116,6 +118,7 @@ $lang['profdeleteuser']        = 'Supprimer le compte';
 $lang['profdeleted']           = 'Votre compte utilisateur a été supprimé de ce wiki';
 $lang['profconfdelete']        = 'Je veux supprimer mon compte sur ce wiki. </br> Cette action est irréversible.';
 $lang['profconfdeletemissing'] = 'La case de confirmation n\'est pas cochée';
+$lang['proffail']              = 'Le profil utilisateur n\'a pas été mis à jour.';
 $lang['pwdforget']             = 'Mot de passe oublié ? Obtenez-en un nouveau';
 $lang['resendna']              = 'Ce wiki ne permet pas le renvoi de mot de passe.';
 $lang['resendpwd']             = 'Définir un nouveau mot de passe pour';
@@ -178,7 +181,6 @@ $lang['js']['media_overwrt']   = 'Écraser les fichiers existants';
 $lang['rssfailed']             = 'Une erreur s\'est produite en récupérant ce flux : ';
 $lang['nothingfound']          = 'Pas de réponse.';
 $lang['mediaselect']           = 'Sélection de fichiers';
-$lang['fileupload']            = 'Envoi de fichier';
 $lang['uploadsucc']            = 'Envoi réussi';
 $lang['uploadfail']            = 'L\'envoi a échoué. Les autorisations sont-elles correctes ?';
 $lang['uploadwrong']           = 'Envoi refusé. Cette extension de fichier est interdite !';
@@ -196,7 +198,7 @@ $lang['accessdenied']          = 'Vous n\'êtes pas autorisé à voir cette page
 $lang['mediausage']            = 'Utilisez la syntaxe suivante pour faire référence à ce fichier :';
 $lang['mediaview']             = 'Afficher le fichier original';
 $lang['mediaroot']             = 'racine';
-$lang['mediaupload']           = 'Envoyez un fichier dans la catégorie actuelle. Pour créer des sous-catégories, préfixez en le nom du fichier séparées par un double-point, après avoir choisis le(s) fichier(s). Le(s) fichier(s) peuvent également être envoyé(s) par glisser-déposer (drag & drop)';
+$lang['mediaupload']           = 'Envoyez un fichier dans la catégorie actuelle. Pour créer des sous-catégories, préfixez en le nom du fichier séparées par un double-point, après avoir choisis le(s) fichier(s). Le(s) fichier(s) peuvent également être envoyé(s) par glisser-déposer (drag &amp; drop)';
 $lang['mediaextchange']        = 'Extension du fichier modifiée de .%s en .%s !';
 $lang['reference']             = 'Références pour';
 $lang['ref_inuse']             = 'Le fichier ne peut être effacé car il est toujours utilisé par les pages suivantes :';
@@ -228,7 +230,7 @@ $lang['restored']              = 'ancienne révision (%s) restaurée';
 $lang['external_edit']         = 'modification externe';
 $lang['summary']               = 'Résumé';
 $lang['noflash']               = 'L\'<a href="http://www.adobe.com/products/flashplayer/">extension Adobe Flash</a> est nécessaire pour afficher ce contenu.';
-$lang['download']              = 'Télécharger un extrait';
+$lang['download']              = 'Télécharger cet extrait';
 $lang['tools']                 = 'Outils';
 $lang['user_tools']            = 'Outils pour utilisateurs';
 $lang['site_tools']            = 'Outils du site';
@@ -269,7 +271,6 @@ $lang['qb_sig']                = 'Insérer une signature';
 $lang['qb_smileys']            = 'Émoticones';
 $lang['qb_chars']              = 'Caractères spéciaux';
 $lang['upperns']               = 'Aller à la catégorie parente';
-$lang['admin_register']        = 'Ajouter un nouvel utilisateur';
 $lang['metaedit']              = 'Modifier les métadonnées';
 $lang['metasaveerr']           = 'Erreur lors de l\'enregistrement des métadonnées';
 $lang['metasaveok']            = 'Métadonnées enregistrées';
@@ -285,24 +286,23 @@ $lang['img_camera']            = 'Appareil photo:';
 $lang['img_keywords']          = 'Mots-clés:';
 $lang['img_width']             = 'Largeur:';
 $lang['img_height']            = 'Hauteur:';
-$lang['subscr_subscribe_success'] = '%s a été ajouté à la liste de souscription de %s';
-$lang['subscr_subscribe_error'] = 'Erreur à l\'ajout de %s à la liste de souscription de %s';
-$lang['subscr_subscribe_noaddress'] = 'Il n\'y a pas d\'adresse associée à votre identifiant, vous ne pouvez pas être ajouté à la liste de souscription';
-$lang['subscr_unsubscribe_success'] = '%s a été supprimé de la liste de souscription de %s';
-$lang['subscr_unsubscribe_error'] = 'Erreur au retrait de %s de la liste de souscription de %s';
-$lang['subscr_already_subscribed'] = '%s est déjà souscrit à %s';
-$lang['subscr_not_subscribed'] = '%s n\'est pas souscrit à %s';
-$lang['subscr_m_not_subscribed'] = 'Vous n\'avez pas souscrit pour l\'instant à la page actuelle ou à la catégorie';
-$lang['subscr_m_new_header']   = 'Ajouter une souscription';
-$lang['subscr_m_current_header'] = 'Souscriptions actives';
-$lang['subscr_m_unsubscribe']  = 'Annuler la souscription';
-$lang['subscr_m_subscribe']    = 'Souscrire';
+$lang['subscr_subscribe_success'] = '%s a été ajouté à la liste des abonnés de %s';
+$lang['subscr_subscribe_error'] = 'Erreur à l\'ajout de %s à la liste des abonnés de %s';
+$lang['subscr_subscribe_noaddress'] = 'Il n\'y a pas d\'adresse associée à votre identifiant, vous ne pouvez pas être ajouté à la liste des abonnés.';
+$lang['subscr_unsubscribe_success'] = '%s a été supprimé de la liste des abonnés de %s';
+$lang['subscr_unsubscribe_error'] = 'Erreur au retrait de %s de la liste des abonnés de %s';
+$lang['subscr_already_subscribed'] = '%s est déjà abonné à %s';
+$lang['subscr_not_subscribed'] = '%s n\'est pas abonné à %s';
+$lang['subscr_m_not_subscribed'] = 'Vous n\'êtes pour l\'instant pas abonné à la page actuelle ou à la catégorie';
+$lang['subscr_m_new_header']   = 'Ajouter un abonnement';
+$lang['subscr_m_current_header'] = 'Abonnements actifs';
+$lang['subscr_m_unsubscribe']  = 'Annuler l\'abonnement';
+$lang['subscr_m_subscribe']    = 'S\'abonner';
 $lang['subscr_m_receive']      = 'Recevoir';
 $lang['subscr_style_every']    = 'Recevoir un courriel à chaque modification';
 $lang['subscr_style_digest']   = 'Courriel, tous les %.2f jours, résumant les modifications de chaque page';
 $lang['subscr_style_list']     = 'Liste des pages modifiées depuis le dernier courriel (tous les %.2f jours)';
 $lang['authtempfail']          = 'L\'authentification est temporairement indisponible. Si cela perdure, merci d\'en informer l\'administrateur du wiki.';
-$lang['authpwdexpire']         = 'Votre mot de passe expirera dans %d jours, vous devriez le changer bientôt.';
 $lang['i_chooselang']          = 'Choisissez votre langue';
 $lang['i_installer']           = 'Installateur DokuWiki';
 $lang['i_wikiname']            = 'Nom du wiki';
@@ -319,7 +319,7 @@ $lang['i_writeerr']            = 'Impossible de créer <code>%s</code>. Vous dev
 $lang['i_badhash']             = 'dokuwiki.php non reconnu ou modifié (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> - valeur interdite ou vide';
 $lang['i_success']             = 'L\'installation s\'est terminée avec succès. Vous pouvez maintenant supprimer le fichier « install.php ». Continuer avec <a href="doku.php?id=wiki:welcome">votre nouveau DokuWiki</a>.';
-$lang['i_failure']             = 'Des erreurs sont survenues lors de l\'écriture des fichiers de configuration. Il vous faudra les corriger manuellement avant de pouvoir utiliser <a href="doku.php">votre nouveau DokuWiki</a>.';
+$lang['i_failure']             = 'Des erreurs sont survenues lors de l\'écriture des fichiers de configuration. Il vous faudra les corriger manuellement avant de pouvoir utiliser <a href="doku.php?id=wiki:welcome">votre nouveau DokuWiki</a>.';
 $lang['i_policy']              = 'Politique de contrôle d\'accès initiale';
 $lang['i_pol0']                = 'Wiki ouvert (lecture, écriture, envoi de fichiers pour tout le monde)';
 $lang['i_pol1']                = 'Wiki public (lecture pour tout le monde, écriture et envoi de fichiers pour les utilisateurs enregistrés)';
@@ -362,6 +362,7 @@ $lang['media_perm_read']       = 'Désolé, vous n\'avez pas l\'autorisation de
 $lang['media_perm_upload']     = 'Désolé, vous n\'avez pas l\'autorisation d\'envoyer des fichiers.';
 $lang['media_update']          = 'Envoyer une nouvelle version';
 $lang['media_restore']         = 'Restaurer cette version';
+$lang['media_acl_warning']     = 'En raison des restrictions dans les ACL et de pages cachées, cette liste peut ne pas être complète.';
 $lang['currentns']             = 'Catégorie courante';
 $lang['searchresult']          = 'Résultat de la recherche';
 $lang['plainhtml']             = 'HTML brut';
diff --git a/inc/lang/fr/subscr_digest.txt b/inc/lang/fr/subscr_digest.txt
index 7ec75ca76462a505fdefff218b537b6cd29fea5e..8c21e57879cf8ff572560f0f339853b2aff54884 100644
--- a/inc/lang/fr/subscr_digest.txt
+++ b/inc/lang/fr/subscr_digest.txt
@@ -14,6 +14,6 @@ Pour annuler les notifications de page, connectez-vous au wiki à l'adresse
 @SUBSCRIBE@
 et désabonnez-vous de la page ou de la catégorie.
 
---
+-- 
 Ce courriel a été généré par DokuWiki depuis
 @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/fr/subscr_form.txt b/inc/lang/fr/subscr_form.txt
index d68c05e6a05185689a15650fbaaa7dee873216a6..f14832e07b5a363e6863bbff5a47661cec87cba6 100644
--- a/inc/lang/fr/subscr_form.txt
+++ b/inc/lang/fr/subscr_form.txt
@@ -1,3 +1,3 @@
 ====== Gestion des souscriptions ======
 
-Cette page vous permet de gérer vos souscriptions pour suivre les modifications sur la page et sur la catégorie courante.
\ No newline at end of file
+Cette page vous permet de gérer vos abonnements pour suivre les modifications sur la page et sur la catégorie courante.
\ No newline at end of file
diff --git a/inc/lang/fr/subscr_list.txt b/inc/lang/fr/subscr_list.txt
index d8c6b68e4b59ecd5ad87d33e60ec3440db3dccb7..38d76d8cce61fe11618c00c1e80a805d8fd7c5bd 100644
--- a/inc/lang/fr/subscr_list.txt
+++ b/inc/lang/fr/subscr_list.txt
@@ -11,6 +11,6 @@ Pour annuler les notifications de page, connectez-vous au wiki à l'adresse
 @SUBSCRIBE@
 et désabonnez-vous de la page ou de la catégorie.
 
---
+-- 
 Ce courriel a été généré par Dokuwiki :
 @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/fr/subscr_single.txt b/inc/lang/fr/subscr_single.txt
index 236d45e8f5dc09415ff96e1f907d8bed3f7e429f..13f2998d39c1230998a6c8a22cd7dc21633d51c7 100644
--- a/inc/lang/fr/subscr_single.txt
+++ b/inc/lang/fr/subscr_single.txt
@@ -17,6 +17,6 @@ Pour annuler les notifications de page, connectez-vous au wiki à l'adresse
 @SUBSCRIBE@
 et désabonnez-vous de la page ou de la catégorie.
 
---
+-- 
 Ce courriel a été généré par Dokuwiki depuis
 @DOKUWIKIURL@
\ No newline at end of file
diff --git a/inc/lang/gl/lang.php b/inc/lang/gl/lang.php
index 82cbbbfab194c8c0f7310be49ff40d55909e063a..9e3d4f2b2668ac3fdccc1219d1a409cb81482a62 100644
--- a/inc/lang/gl/lang.php
+++ b/inc/lang/gl/lang.php
@@ -37,7 +37,6 @@ $lang['btn_update']            = 'Actualizar';
 $lang['btn_delete']            = 'Borrar';
 $lang['btn_back']              = 'Atrás';
 $lang['btn_backlink']          = 'Ligazóns con isto';
-$lang['btn_backtomedia']       = 'Volver á Selección de Arquivos-Media';
 $lang['btn_subscribe']         = 'Avísame dos trocos na páxina';
 $lang['btn_profile']           = 'Actualizar Perfil';
 $lang['btn_reset']             = 'Reiniciar';
@@ -141,7 +140,6 @@ $lang['js']['media_overwrt']   = 'Sobreescribir os arquivos existentes';
 $lang['rssfailed']             = 'Houbo un erro ao tentar obter esta corrente RSS: ';
 $lang['nothingfound']          = 'Non se atopou nada.';
 $lang['mediaselect']           = 'Arquivos-Media';
-$lang['fileupload']            = 'Subida de Arquivos-Media';
 $lang['uploadsucc']            = 'Subida correcta';
 $lang['uploadfail']            = 'Erra na subida. Pode que sexa un problema de permisos?';
 $lang['uploadwrong']           = 'Subida denegada. Esta extensión de arquivo non está permitida!';
@@ -227,7 +225,6 @@ $lang['qb_sig']                = 'Inserir Sinatura';
 $lang['qb_smileys']            = 'Risoños';
 $lang['qb_chars']              = 'Caracteres Especiais';
 $lang['upperns']               = 'choutar ao nome de espazo pai';
-$lang['admin_register']        = 'Engadir novo usuario';
 $lang['metaedit']              = 'Editar Metadatos';
 $lang['metasaveerr']           = 'Non se puideron escribir os metadatos';
 $lang['metasaveok']            = 'Metadatos gardados';
@@ -260,7 +257,6 @@ $lang['subscr_m_subscribe']    = 'Subscribir';
 $lang['subscr_m_receive']      = 'Recibir';
 $lang['subscr_style_every']    = 'correo-e en cada troco';
 $lang['authtempfail']          = 'A autenticación de usuario non está dispoñible de xeito temporal. De persistir esta situación, por favor, informa ao Administrador do teu Wiki.';
-$lang['authpwdexpire']         = 'A túa contrasinal expirará en %d días, deberías cambiala pronto.';
 $lang['i_chooselang']          = 'Escolle o teu idioma';
 $lang['i_installer']           = 'Instalador do DokuWiki';
 $lang['i_wikiname']            = 'Nome do Wiki';
@@ -278,9 +274,9 @@ $lang['i_writeerr']            = 'Non se puido crear <code>%s</code>. Terás de
 $lang['i_badhash']             = 'dokuwiki.php irrecoñecíbel ou modificado (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> - ilegal ou valor baleiro';
 $lang['i_success']             = 'A configuración rematou correctamente. Agora podes eliminar o arquivo install.php. Continúa deica o
-                        <a href="doku.php">teu novo DokuWiki</a>.';
+                        <a href="doku.php?id=wiki:welcome">teu novo DokuWiki</a>.';
 $lang['i_failure']             = 'Houbo algúns erros ao tentar escribir os arquivos de configuración. Pode que precises solucionalos de xeito manual antes
-                         de poderes empregar <a href="doku.php">o teu novo DokuWiki</a>.';
+                         de poderes empregar <a href="doku.php?id=wiki:welcome">o teu novo DokuWiki</a>.';
 $lang['i_policy']              = 'Regras iniciais da ACL';
 $lang['i_pol0']                = 'Wiki Aberto (lectura, escritura, subida de arquivos para todas as persoas)';
 $lang['i_pol1']                = 'Wiki Público (lectura para todas as persoas, escritura e subida de arquivos para usuarios rexistrados)';
diff --git a/inc/lang/he/lang.php b/inc/lang/he/lang.php
index 5e2ecbdff2e5ec183795b74c961f34713577a28c..7926d87e631b5249eb95c2f71ee48760c790582d 100644
--- a/inc/lang/he/lang.php
+++ b/inc/lang/he/lang.php
@@ -13,6 +13,9 @@
  * @author alex <ralexay@gmail.com>
  * @author matt carroll <matt.carroll@gmail.com>
  * @author tomer <tomercarolldergicz@gmail.com>
+ * @author itsho <itsho.itsho@gmail.com>
+ * @author Menashe Tomer <menashesite@gmail.com>
+ * @author sagi <sagiyosef@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'rtl';
@@ -44,7 +47,6 @@ $lang['btn_update']            = 'עדכון';
 $lang['btn_delete']            = 'מחיקה';
 $lang['btn_back']              = 'חזרה';
 $lang['btn_backlink']          = 'קישורים לכאן';
-$lang['btn_backtomedia']       = 'חזרה לבחירת קובץ מדיה';
 $lang['btn_subscribe']         = 'מעקב אחרי שינוים';
 $lang['btn_profile']           = 'עדכון הפרופיל';
 $lang['btn_reset']             = 'איפוס';
@@ -57,6 +59,8 @@ $lang['btn_register']          = 'הרשמה';
 $lang['btn_apply']             = 'ליישם';
 $lang['btn_media']             = 'מנהל המדיה';
 $lang['btn_deleteuser']        = 'להסיר את החשבון שלי';
+$lang['btn_img_backto']        = 'חזרה אל %s';
+$lang['btn_mediaManager']      = 'צפה במנהל מדיה';
 $lang['loggedinas']            = 'נכנסת בשם:';
 $lang['user']                  = 'שם משתמש';
 $lang['pass']                  = 'ססמה';
@@ -77,6 +81,7 @@ $lang['regmissing']            = 'עליך למלא את כל השדות, עמך
 $lang['reguexists']            = 'משתמש בשם זה כבר נרשם, עמך הסליחה.';
 $lang['regsuccess']            = 'ההרשמה הצליחה, המשתמש נרשם והודעה נשלחה בדוא״ל.';
 $lang['regsuccess2']           = 'ההרשמה הצליחה, המשתמש נוצר.';
+$lang['regfail']               = 'אין אפשרות ליצור את המשתמש';
 $lang['regmailfail']           = 'שליחת הודעת הדוא״ל כשלה, נא ליצור קשר עם מנהל האתר!';
 $lang['regbadmail']            = 'יתכן כי כתובת הדוא״ל אינה תקפה, אם לא כך הדבר ליצור קשר עם מנהל האתר';
 $lang['regbadpass']            = 'שתי הססמאות אינן זהות זו לזו, נא לנסות שוב.';
@@ -91,6 +96,7 @@ $lang['profdeleteuser']        = 'הסר חשבון';
 $lang['profdeleted']           = 'חשבון המשתמש שלך נמחק מויקי זה';
 $lang['profconfdelete']        = 'ברצוני להסיר את החשבון שלי מוויקי זה. <br/> לא ניתן לבטל פעולה זו.';
 $lang['profconfdeletemissing'] = 'תיבת אישור אינו מסומן';
+$lang['proffail']              = 'פרופיל המשתמש לא עודכן';
 $lang['pwdforget']             = 'שכחת את הססמה שלך? ניתן לקבל חדשה';
 $lang['resendna']              = 'הוויקי הזה אינו תומך בחידוש ססמה';
 $lang['resendpwd']             = 'הגדר סיסמא חדשה בעבור';
@@ -106,7 +112,7 @@ $lang['searchmedia_in']        = 'חיפוש תחת %s';
 $lang['txt_upload']            = 'בחירת קובץ להעלות:';
 $lang['txt_filename']          = 'העלאה בשם (נתון לבחירה):';
 $lang['txt_overwrt']           = 'שכתוב על קובץ קיים';
-$lang['maxuploadsize']         = 'העלה מקסימום. s% לכל קובץ.';
+$lang['maxuploadsize']         = 'העלה מקסימום. %s לכל קובץ.';
 $lang['lockedby']              = 'נעול על ידי:';
 $lang['lockexpire']            = 'הנעילה פגה:';
 $lang['js']['willexpire']      = 'הנעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי לאפס את מד משך הנעילה.';
@@ -154,7 +160,6 @@ $lang['js']['media_overwrt']   = 'שכתב קבצים קיימים';
 $lang['rssfailed']             = 'אירע כשל בעת קבלת הזנה זו:';
 $lang['nothingfound']          = 'לא נמצאו תוצאות.';
 $lang['mediaselect']           = 'קובצי מדיה';
-$lang['fileupload']            = 'העלאת קובצי מדיה';
 $lang['uploadsucc']            = 'ההעלאה הושלמה בהצלחה';
 $lang['uploadfail']            = 'אירעה שגיאה בעת העלאת הקובץ. היתכן שתקלה זו נוצרה עקב הרשאות שגיות?';
 $lang['uploadwrong']           = 'ההעלאה לא אושרה. קבצים בסיומת זו אסורים!';
@@ -188,6 +193,11 @@ $lang['difflink']              = 'קישור לתצוגה השוואה זו';
 $lang['diff_type']             = 'הצגת הבדלים:';
 $lang['diff_inline']           = 'באותה השורה';
 $lang['diff_side']             = 'זה לצד זה';
+$lang['diffprevrev']           = 'הגירסה הקודמת';
+$lang['diffnextrev']           = 'הגירסה הבאה';
+$lang['difflastrev']           = 'הגירסה האחרונה';
+$lang['diffbothprevrev']       = 'גירסה קודמת בשני הצדדים';
+$lang['diffbothnextrev']       = 'הגירסה הבאה בשני הצדדים';
 $lang['line']                  = 'שורה';
 $lang['breadcrumb']            = 'ביקורים אחרונים:';
 $lang['youarehere']            = 'זהו מיקומך:';
@@ -240,11 +250,9 @@ $lang['qb_sig']                = 'הוספת חתימה';
 $lang['qb_smileys']            = 'חייכנים';
 $lang['qb_chars']              = 'תווים מיוחדים';
 $lang['upperns']               = 'מעבר למרחב השם שברמה שמעל הנוכחית';
-$lang['admin_register']        = 'הוספת משתמש חדש';
 $lang['metaedit']              = 'עריכת נתוני העל';
 $lang['metasaveerr']           = 'אירע כשל בשמירת נתוני העל';
 $lang['metasaveok']            = 'נתוני העל נשמרו';
-$lang['btn_img_backto']            = 'חזרה אל %s';
 $lang['img_title']             = 'שם:';
 $lang['img_caption']           = 'כותרת:';
 $lang['img_date']              = 'תאריך:';
@@ -257,7 +265,6 @@ $lang['img_camera']            = 'מצלמה:';
 $lang['img_keywords']          = 'מילות מפתח:';
 $lang['img_width']             = 'רוחב:';
 $lang['img_height']            = 'גובה:';
-$lang['btn_mediaManager']           = 'צפה במנהל מדיה';
 $lang['subscr_subscribe_success'] = '%s נוסף לרשימת המינויים לדף %s';
 $lang['subscr_subscribe_error'] = 'אירעה שגיאה בהוספת %s לרשימת המינויים לדף %s';
 $lang['subscr_subscribe_noaddress'] = 'אין כתובת המשויכת עם הכניסה שלך, נא ניתן להוסיף אותך לרשימת המינויים';
@@ -275,7 +282,6 @@ $lang['subscr_style_every']    = 'דוא״ל עם כל שינוי';
 $lang['subscr_style_digest']   = 'הודעת דוא״ל המציגה את כל השינויים בכל עמוד (בכל %.2f ימים)';
 $lang['subscr_style_list']     = 'רשימת השינויים בדפים מאז הודעת הדוא״ל האחרונה (בכל %.2f ימים)';
 $lang['authtempfail']          = 'אימות משתמשים אינו זמין כרגע. אם מצב זה נמשך נא ליידע את מנהל הוויקי.';
-$lang['authpwdexpire']         = 'הסיסמה שלך תפוג ב% d ימים, אתה צריך לשנות את זה בקרוב.';
 $lang['i_chooselang']          = 'נא לבחור שפה';
 $lang['i_installer']           = 'תכנית ההתקנה של DokuWiki';
 $lang['i_wikiname']            = 'שם הוויקי';
@@ -285,8 +291,9 @@ $lang['i_problems']            = 'תכנית ההתקנה זיהתה מספר ב
 $lang['i_modified']            = 'משיקולי אבטחה סקריפט זה יעבוד אך ורק עם התקנת DokuWiki חדשה שלא עברה כל שינוי.
                          עליך לחלץ שנית את הקבצים מהחבילה שהורדה או להיעזר בדף
                          <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
-$lang['i_funcna']              = 'פונקציית ה-PHP&rlm; <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?';
+$lang['i_funcna']              = 'פונקציית ה-PHP&#8207; <code>%s</code> אינה זמינה. יתכן כי מארח האתר חסם אותה מסיבה כלשהי?';
 $lang['i_phpver']              = 'גרסת PHP שלך <code>%s</code> נמוכה מ <code>%s</code> הצורך. אתה צריך לשדרג PHP שלך להתקין.';
+$lang['i_mbfuncoverload']      = 'יש לבטל את mbstring.func_overload בphp.ini בכדי להריץ את DokuWiki';
 $lang['i_permfail']            = '<code>%s</code> אינה ניתנת לכתיבה על ידי DokuWiki. עליך לשנות הרשאות תיקייה זו!';
 $lang['i_confexists']          = '<code>%s</code> כבר קיים';
 $lang['i_writeerr']            = 'אין אפשרות ליצור את <code>%s</code>. נא לבדוק את הרשאות הקובץ/תיקייה וליצור את הקובץ ידנית.';
@@ -324,5 +331,21 @@ $lang['media_list_rows']       = 'שורות';
 $lang['media_sort_name']       = 'שם';
 $lang['media_sort_date']       = 'תאריך';
 $lang['media_namespaces']      = 'בחר מרחב שמות';
-$lang['media_files']           = 'קבצים ב s%';
-$lang['media_upload']          = 'להעלות s%';
+$lang['media_files']           = 'קבצים ב %s';
+$lang['media_upload']          = 'להעלות %s';
+$lang['media_search']          = 'חיפוש ב%s';
+$lang['media_view']            = '%s';
+$lang['media_viewold']         = '%s ב %s';
+$lang['media_edit']            = 'ערוך %s';
+$lang['media_history']         = 'היסטוריה של %s';
+$lang['media_meta_edited']     = 'metadata נערך';
+$lang['media_perm_read']       = 'מצטערים, אין לך הרשאות לקרוא קבצים.';
+$lang['media_perm_upload']     = 'מצטערים, אין לך הרשאות להעלות קבצים.';
+$lang['media_update']          = 'העלה גירסה חדשה';
+$lang['media_restore']         = 'שחזר גירסה זו';
+$lang['media_acl_warning']     = 'רשימה זו עלולה להיות חסרה עכב חוסר בהרשאות או דפים מוסתרים';
+$lang['currentns']             = 'שם מרחב נוכחי';
+$lang['searchresult']          = 'תוצאות חיפוש';
+$lang['plainhtml']             = 'HTML פשוט';
+$lang['page_nonexist_rev']     = 'העמוד לא קיים ב%s. העמוד נוצר במקום זאת ב<a href="%s">%s</a>.';
+$lang['unable_to_parse_date']  = 'לא ניתן לפענח פרמטר "%s".';
diff --git a/inc/lang/he/mailtext.txt b/inc/lang/he/mailtext.txt
index 222ee1b6d06e1463d22d2bd61aaaa5ef3ca881f9..5ef4ec7e25e6deb0ac5b77d8fd4b6425c277afa6 100644
--- a/inc/lang/he/mailtext.txt
+++ b/inc/lang/he/mailtext.txt
@@ -2,7 +2,7 @@
 
 תאריך        : @DATE@
 דפדפן     : @BROWSER@
-כתובת ה־IP&rlm;  : @IPADDRESS@
+כתובת ה־IP&#8207;  : @IPADDRESS@
 שם המארח    : @HOSTNAME@
 המהדורה הישנה: @OLDPAGE@
 המהדורה החדשה: @NEWPAGE@
@@ -11,7 +11,7 @@
 
 @DIFF@
 
--- 
+--
 
 דף זה נוצר ע״י ה־DokuWiki הזמין בכתובת
 @DOKUWIKIURL@
diff --git a/inc/lang/he/registermail.txt b/inc/lang/he/registermail.txt
index 3edca3fa0326c41ceb8bb0931f8da6934991e469..d478d1c20cd44b9f69294a4ee2fdac6dbf52bfa3 100644
--- a/inc/lang/he/registermail.txt
+++ b/inc/lang/he/registermail.txt
@@ -6,9 +6,9 @@
 
 תאריך      : @DATE@
 דפדפן      : @BROWSER@
-כתובת IP&rlm;  : @IPADDRESS@
+כתובת IP&#8207;  : @IPADDRESS@
 שם המארח   : @HOSTNAME@
 
--- 
+--
 הודעת דוא״ל זו נוצרה על ידי ה־DokuWiki הזמין בכתובת
 @DOKUWIKIURL@
diff --git a/inc/lang/he/resetpwd.txt b/inc/lang/he/resetpwd.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bd7b5ace419e0ca139ac08dca251e2b8e7c21fac
--- /dev/null
+++ b/inc/lang/he/resetpwd.txt
@@ -0,0 +1,3 @@
+====== קבע סיסמה חדשה ======
+
+אנא הכנס סיסמה חדשה לחשבון שלך בויקי זה.
\ No newline at end of file
diff --git a/inc/lang/hi/lang.php b/inc/lang/hi/lang.php
index 71795191c8b28cdc03148fa27e219832c1fc1fa2..79bc0a1abdce5f7ac7085007fed83012817cf74e 100644
--- a/inc/lang/hi/lang.php
+++ b/inc/lang/hi/lang.php
@@ -37,7 +37,6 @@ $lang['btn_update']            = 'अद्यतन करना';
 $lang['btn_delete']            = 'मिटाना';
 $lang['btn_back']              = 'पीछे';
 $lang['btn_backlink']          = 'पिछली कड़ियाँ';
-$lang['btn_backtomedia']       = 'मीडिया फाइल चयन पर पीछे जायें';
 $lang['btn_subscribe']         = 'सदस्यता प्रबंधन';
 $lang['btn_profile']           = 'परिचय संपादित करें';
 $lang['btn_resendpwd']         = 'नया पासवर्ड सेट करें';
@@ -102,7 +101,6 @@ $lang['qb_link']               = 'आंतरिक कड़ी';
 $lang['qb_extlink']            = 'बाह्य कड़ी';
 $lang['qb_hr']                 = 'खड़ी रेखा';
 $lang['qb_sig']                = 'हस्ताक्षर डालें';
-$lang['admin_register']        = 'नया उपयोगकर्ता जोड़ें';
 $lang['btn_img_backto']            = 'वापस जाना %s';
 $lang['img_title']             = 'शीर्षक:';
 $lang['img_caption']           = 'सहशीर्षक:';
diff --git a/inc/lang/hr/lang.php b/inc/lang/hr/lang.php
index c3cf6d8221621e0f9ce86a80985252beb15947f6..40e0c59c360226841a6f1320f7535b3d07e9fe87 100644
--- a/inc/lang/hr/lang.php
+++ b/inc/lang/hr/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Tomo Krajina <aaa@puzz.info>
  * @author Branko Rihtman <theney@gmail.com>
  * @author Dražen Odobašić <dodobasic@gmail.com>
@@ -15,7 +15,7 @@ $lang['doublequoteopening']    = '“';
 $lang['doublequoteclosing']    = '”';
 $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
-$lang['apostrophe']            = '\'';
+$lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'Izmijeni stranicu';
 $lang['btn_source']            = 'Prikaži kod stranice';
 $lang['btn_show']              = 'Prikaži dokument';
@@ -35,11 +35,10 @@ $lang['btn_secedit']           = 'Uredi';
 $lang['btn_login']             = 'Prijavi se';
 $lang['btn_logout']            = 'Odjavi se';
 $lang['btn_admin']             = 'Administriranje';
-$lang['btn_update']            = 'Dopuni';
+$lang['btn_update']            = 'Nadogradi';
 $lang['btn_delete']            = 'Obriši';
 $lang['btn_back']              = 'Nazad';
 $lang['btn_backlink']          = 'Povratni linkovi';
-$lang['btn_backtomedia']       = 'Natrag na odabir datoteka';
 $lang['btn_subscribe']         = 'Uređivanje pretplata';
 $lang['btn_profile']           = 'Dopuni profil';
 $lang['btn_reset']             = 'Poništi';
@@ -64,7 +63,7 @@ $lang['remember']              = 'Zapamti me';
 $lang['fullname']              = 'Ime i prezime';
 $lang['email']                 = 'E-pošta';
 $lang['profile']               = 'Korisnički profil';
-$lang['badlogin']              = 'Ne ispravno korisničko ime ili lozinka.';
+$lang['badlogin']              = 'Neispravno korisničko ime ili lozinka.';
 $lang['badpassconfirm']        = 'Nažalost, lozinka nije ispravna';
 $lang['minoredit']             = 'Manje izmjene';
 $lang['draftdate']             = 'Nacrt promjena automatski spremljen u';
@@ -74,6 +73,7 @@ $lang['regmissing']            = 'Morate popuniti sva polja.';
 $lang['reguexists']            = 'Korisnik s tim korisničkim imenom već postoji.';
 $lang['regsuccess']            = 'Korisnik je uspješno stvoren i poslana je lozinka emailom.';
 $lang['regsuccess2']           = 'Korisnik je uspješno stvoren.';
+$lang['regfail']               = 'Korisnik ne može biti kreiran.';
 $lang['regmailfail']           = 'Pojavila se greška prilikom slanja lozinke emailom. Kontaktirajte administratora!';
 $lang['regbadmail']            = 'Email adresa nije ispravna, ukoliko ovo smatrate greškom, kontaktirajte administratora.';
 $lang['regbadpass']            = 'Unesene lozinke nisu jednake, pokušajte ponovno.';
@@ -88,6 +88,7 @@ $lang['profdeleteuser']        = 'Obriši korisnika';
 $lang['profdeleted']           = 'Vaš korisnik je obrisan s ovog wiki-a';
 $lang['profconfdelete']        = 'Želim ukloniti mojeg korisnika s ovog wiki-a. <br/> Ova akcija se ne može poništiti.';
 $lang['profconfdeletemissing'] = 'Kvačica za potvrdu nije označena';
+$lang['proffail']              = 'Profil korisnika nije izmijenjen.';
 $lang['pwdforget']             = 'Izgubili ste lozinku? Zatražite novu';
 $lang['resendna']              = 'Ovaj wiki ne podržava ponovno slanje lozinke e-poštom.';
 $lang['resendpwd']             = 'Postavi novu lozinku za';
@@ -151,7 +152,6 @@ $lang['js']['media_overwrt']   = 'Prepiši preko postojeće datoteke';
 $lang['rssfailed']             = 'Došlo je do greške prilikom preuzimanja feed-a: ';
 $lang['nothingfound']          = 'Traženi dokumetni nisu pronađeni.';
 $lang['mediaselect']           = 'Datoteke';
-$lang['fileupload']            = 'Učitavanje datoteka';
 $lang['uploadsucc']            = 'Učitavanje uspješno';
 $lang['uploadfail']            = 'Neuspješno učitavanje. Možda dozvole na poslužitelju nisu ispravne?';
 $lang['uploadwrong']           = 'Učitavanje nije dopušteno. Nastavak datoteke je zabranjen!';
@@ -242,7 +242,6 @@ $lang['qb_sig']                = 'Ubaci potpis';
 $lang['qb_smileys']            = 'Smiješkići';
 $lang['qb_chars']              = 'Posebni znakovi';
 $lang['upperns']               = 'Skoči u nadređeni imenski prostor';
-$lang['admin_register']        = 'Dodaj novog korisnika';
 $lang['metaedit']              = 'Uredi metapodatake';
 $lang['metasaveerr']           = 'Neuspješno zapisivanje metapodataka';
 $lang['metasaveok']            = 'Spremljeni metapdaci';
@@ -275,7 +274,6 @@ $lang['subscr_style_every']    = 'e-pošta za svaku promjenu';
 $lang['subscr_style_digest']   = 'e-pošta s kratakim prikazom promjena za svaku stranicu (svaka %.2f dana)';
 $lang['subscr_style_list']     = 'listu promijenjenih stranica od zadnje primljene e-pošte (svaka %.2f dana)';
 $lang['authtempfail']          = 'Autentifikacija korisnika je privremeno nedostupna. Molimo Vas da kontaktirate administratora.';
-$lang['authpwdexpire']         = 'Vaša lozinka će isteći za %d dana, trebate ju promijeniti.';
 $lang['i_chooselang']          = 'Izaberite vaš jezik';
 $lang['i_installer']           = 'DokuWiki postavljanje';
 $lang['i_wikiname']            = 'Naziv Wikija';
@@ -336,6 +334,7 @@ $lang['media_perm_read']       = 'Nažalost, nemate prava za čitanje datoteka.'
 $lang['media_perm_upload']     = 'Nažalost, nemate prava za učitavanje datoteka.';
 $lang['media_update']          = 'Učitaj novu verziju';
 $lang['media_restore']         = 'Vrati ovu verziju';
+$lang['media_acl_warning']     = 'Ova lista moguće da nije kompletna zbog ACL ograničenja i skrivenih stranica.';
 $lang['currentns']             = 'Tekući imenički prostor';
 $lang['searchresult']          = 'Rezultati pretraživanja';
 $lang['plainhtml']             = 'ÄŒisti HTML';
diff --git a/inc/lang/hu/admin.txt b/inc/lang/hu/admin.txt
index 03d29243c796bc97d620ffdb4b496580c543c4c6..51b13eb56cc851cf18419189cf39cbb79c3f7d51 100644
--- a/inc/lang/hu/admin.txt
+++ b/inc/lang/hu/admin.txt
@@ -1,3 +1,3 @@
-===== Adminisztrálás =====
+===== Adminisztráció =====
 
-Itt találod a DokuWiki adminisztrálási lehetőségeit.
+Itt találod a DokuWiki adminisztrációs lehetőségeit.
diff --git a/inc/lang/hu/lang.php b/inc/lang/hu/lang.php
index bdc78f68dec1790abacf2ab180cfa87b42d7244f..83b45b6d2c55ce12c69f87b73672434791e24856 100644
--- a/inc/lang/hu/lang.php
+++ b/inc/lang/hu/lang.php
@@ -45,7 +45,6 @@ $lang['btn_update']            = 'Frissítés';
 $lang['btn_delete']            = 'Törlés';
 $lang['btn_back']              = 'Vissza';
 $lang['btn_backlink']          = 'Hivatkozások';
-$lang['btn_backtomedia']       = 'Vissza a médiafájlok kezeléséhez';
 $lang['btn_subscribe']         = 'Feliratkozás az oldalváltozásokra';
 $lang['btn_profile']           = 'Személyes beállítások';
 $lang['btn_reset']             = 'Alaphelyzet';
@@ -75,11 +74,12 @@ $lang['badpassconfirm']        = 'Hibás jelszó';
 $lang['minoredit']             = 'Apróbb változások';
 $lang['draftdate']             = 'Piszkozat elmentve:';
 $lang['nosecedit']             = 'Időközben megváltozott az oldal, emiatt a szakasz nem friss. Töltsd újra az egész oldalt!';
-$lang['searchcreatepage']      = "Ha nem találtad meg amit kerestél, akkor létrehozhatsz egy új oldalt a keresésed alapján ''Az oldal szerkesztése'' gombbal.";
+$lang['searchcreatepage']      = 'Ha nem találtad meg amit kerestél, akkor létrehozhatsz egy új oldalt a keresésed alapján \'\'Az oldal szerkesztése\'\' gombbal.';
 $lang['regmissing']            = 'Sajnáljuk, az összes mezőt ki kell töltened.';
 $lang['reguexists']            = 'Sajnáljuk, ilyen azonosítójú felhasználónk már van.';
 $lang['regsuccess']            = 'A felhasználói azonosítót létrehoztuk. A jelszót postáztuk.';
 $lang['regsuccess2']           = 'A felhasználói azonosítót létrehoztuk.';
+$lang['regfail']               = 'A felhasználó létrehozása sikertelen.';
 $lang['regmailfail']           = 'Úgy tűnik hiba történt a jelszó postázása során. Kérjük lépj kapcsolatba az Adminisztrátorokkal!';
 $lang['regbadmail']            = 'A megadott e-mail cím érvénytelennek tűnik. Ha úgy gondolod ez hiba, lépj kapcsolatba az Adminisztrátorokkal!';
 $lang['regbadpass']            = 'A két megadott jelszó nem egyezik, próbáld újra!';
@@ -94,6 +94,7 @@ $lang['profdeleteuser']        = 'Felhasználói fiók törlése';
 $lang['profdeleted']           = 'Felhasználói fiókodat eltávolítottuk erről a wiki-ről.';
 $lang['profconfdelete']        = 'Szeretném eltávolítani a felhasználói fiókomat erről a wikiről. <br/> Ez a cselekvés nem visszavonható.';
 $lang['profconfdeletemissing'] = 'A megerősítő négyzet nincs bepipálva';
+$lang['proffail']              = 'A profil frissítése sikertelen.';
 $lang['pwdforget']             = 'Elfelejtetted a jelszavad? Itt kérhetsz újat';
 $lang['resendna']              = 'Ez a wiki nem támogatja a jelszó újraküldést.';
 $lang['resendpwd']             = 'Új jelszó beállítása a következőhöz:';
@@ -157,7 +158,6 @@ $lang['js']['media_overwrt']   = 'Meglévő fájlok felülírása';
 $lang['rssfailed']             = 'Hiba történt a hírfolyam betöltésekor: ';
 $lang['nothingfound']          = 'Ãœres mappa.';
 $lang['mediaselect']           = 'Médiafájl kiválasztása';
-$lang['fileupload']            = 'Médiafájl feltöltése';
 $lang['uploadsucc']            = 'Sikeres feltöltés';
 $lang['uploadfail']            = 'A feltöltés nem sikerült. Talán rosszak a jogosultságok?';
 $lang['uploadwrong']           = 'A feltöltés megtagadva. Ez a fájlkiterjesztés tiltott.';
@@ -248,7 +248,6 @@ $lang['qb_sig']                = 'Aláírás beszúrása';
 $lang['qb_smileys']            = 'Smiley-k';
 $lang['qb_chars']              = 'Speciális karakterek';
 $lang['upperns']               = 'ugrás a tartalmazó névtérhez';
-$lang['admin_register']        = 'Új felhasználó';
 $lang['metaedit']              = 'Metaadatok szerkesztése';
 $lang['metasaveerr']           = 'A metaadatok írása nem sikerült';
 $lang['metasaveok']            = 'Metaadatok elmentve';
@@ -281,7 +280,6 @@ $lang['subscr_style_every']    = 'e-mailt minden változásról';
 $lang['subscr_style_digest']   = 'összefoglaló e-mailt oldalanként (minden %.2f nap)';
 $lang['subscr_style_list']     = 'egy listát a módosított oldalakról a legutóbbi e-mail óta (minden %.2f nap)';
 $lang['authtempfail']          = 'A felhasználó azonosítás átmenetileg nem működik. Ha sokáig így lenne, légy szíves értesítsd az Adminisztrátorokat!';
-$lang['authpwdexpire']         = 'A jelszavad %d nap múlva lejár, hamarosan meg kell változtatnod.';
 $lang['i_chooselang']          = 'Válassz nyelvet';
 $lang['i_installer']           = 'DokuWiki Beállító Varázsló';
 $lang['i_wikiname']            = 'A Wiki neve';
@@ -292,6 +290,7 @@ $lang['i_modified']            = 'Biztonsági okokból ez a Varázsló csak új
 Csomagold ki újra a fájlokat a letöltött csomagból, vagy nézd meg a teljes <a href="http://dokuwiki.org/install">Dokuwiki telepítési útmutatót</a>.';
 $lang['i_funcna']              = 'A <code>%s</code> PHP funkció nem elérhető. Esetleg a tárhelyszolgáltató letiltotta biztonsági okok miatt?';
 $lang['i_phpver']              = 'A PHP <code>%s</code> verziója alacsonyabb, mint ami szükséges lenne: <code>%s</code>. Frissítsd a PHP-det újabb verzióra!';
+$lang['i_mbfuncoverload']      = 'A DokuWiki futtatásához az mbstring.func_overload opciót ki kell kapcsolni a php.ini-ben.';
 $lang['i_permfail']            = 'A DokiWiki nem tudja írni a <code>%s</code> könyvtárat. Be kell állítanod ehhez a könyvtárhoz a megfelelő jogosultságokat!';
 $lang['i_confexists']          = '<code>%s</code> már létezik.';
 $lang['i_writeerr']            = 'Nem tudom ezt létrehozni: <code>%s</code>. Ellenőrizd a könyvtár/fájl jogosultságokat, és hozd létre az állományt kézzel.';
@@ -341,7 +340,10 @@ $lang['media_perm_read']       = 'Sajnáljuk, nincs jogod a fájlok olvasásáho
 $lang['media_perm_upload']     = 'Sajnáljuk, nincs jogod a feltöltéshez.';
 $lang['media_update']          = 'Új verzió feltöltése';
 $lang['media_restore']         = 'Ezen verzió visszaállítása';
+$lang['media_acl_warning']     = 'Ez a lista hiányos lehet a hozzáférési listák (ACL) korlátozásai és a rejtett oldalak miatt.';
 $lang['currentns']             = 'Aktuális névtér';
 $lang['searchresult']          = 'Keresés eredménye';
 $lang['plainhtml']             = 'Sima HTML';
 $lang['wikimarkup']            = 'Wiki-jelölőnyelv';
+$lang['page_nonexist_rev']     = 'A(z) %s oldal nem létezik. Később lett létrehozva a(z) <a href="%s">%s</a> helyen.';
+$lang['unable_to_parse_date']  = 'A "%s" paraméter feldolgozása sikertelen.';
diff --git a/inc/lang/ia/lang.php b/inc/lang/ia/lang.php
index a533883b6142b703856fe8c900b016f2f22bb23a..3585d716d4a2d9fe378c8f889f80781e2965effc 100644
--- a/inc/lang/ia/lang.php
+++ b/inc/lang/ia/lang.php
@@ -41,7 +41,6 @@ $lang['btn_update']            = 'Actualisar';
 $lang['btn_delete']            = 'Deler';
 $lang['btn_back']              = 'Retornar';
 $lang['btn_backlink']          = 'Retroligamines';
-$lang['btn_backtomedia']       = 'Retornar al selection de files multimedia';
 $lang['btn_subscribe']         = 'Gerer subscriptiones';
 $lang['btn_profile']           = 'Actualisar profilo';
 $lang['btn_reset']             = 'Reinitialisar';
@@ -99,7 +98,6 @@ $lang['js']['notsavedyet']     = 'Le modificationes non salveguardate essera per
 $lang['rssfailed']             = 'Un error occurreva durante le obtention de iste syndication:';
 $lang['nothingfound']          = 'Nihil ha essite trovate.';
 $lang['mediaselect']           = 'Files multimedia';
-$lang['fileupload']            = 'Incargar file multimedia';
 $lang['uploadsucc']            = 'Incargamento succedite';
 $lang['uploadfail']            = 'Incargamento fallite. Pote esser que le permissiones es incorrecte.';
 $lang['uploadwrong']           = 'Incargamento refusate. Iste typo de file es prohibite!';
@@ -199,7 +197,6 @@ $lang['qb_sig']                = 'Inserer signatura';
 $lang['qb_smileys']            = 'Emoticones     ';
 $lang['qb_chars']              = 'Characteres special';
 $lang['upperns']               = 'Saltar al spatio de nomines superior';
-$lang['admin_register']        = 'Adder nove usator';
 $lang['metaedit']              = 'Modificar metadatos';
 $lang['metasaveerr']           = 'Scriptura de metadatos fallite';
 $lang['metasaveok']            = 'Metadatos salveguardate';
diff --git a/inc/lang/id-ni/lang.php b/inc/lang/id-ni/lang.php
index 1ff714f3ed97f99a560df65e66e9df1c0af6d55f..9bd495c66cf92b9f0fb0be695bfd65bdf4f71bee 100644
--- a/inc/lang/id-ni/lang.php
+++ b/inc/lang/id-ni/lang.php
@@ -35,7 +35,6 @@ $lang['btn_update']            = 'Bohouni';
 $lang['btn_delete']            = 'Heta';
 $lang['btn_back']              = 'Fulifuri';
 $lang['btn_backlink']          = 'Link fangawuli';
-$lang['btn_backtomedia']       = 'Angawuli ba filianö Mediafile';
 $lang['btn_profile']           = 'Famohouni pörofile';
 $lang['btn_reset']             = 'Fawu\'a';
 $lang['btn_draft']             = 'Fawu\'a wanura';
diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php
index dc4ca00e0ef10efe2df1cdfeadd9e7aee3eafa7b..4321e2cc908c3ddf228b03f45e0effc37d3f0a37 100644
--- a/inc/lang/id/lang.php
+++ b/inc/lang/id/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author mubaidillah <mubaidillah@gmail.com>
  * @author Irwan Butar Butar <irwansah.putra@gmail.com>
  * @author Yustinus Waruwu <juswaruwu@gmail.com>
@@ -12,10 +12,10 @@
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
-$lang['doublequoteopening']    = '"';
-$lang['doublequoteclosing']    = '"';
-$lang['singlequoteopening']    = '\'';
-$lang['singlequoteclosing']    = '\'';
+$lang['doublequoteopening']    = '“';
+$lang['doublequoteclosing']    = '”';
+$lang['singlequoteopening']    = '‘';
+$lang['singlequoteclosing']    = '’';
 $lang['apostrophe']            = '\'';
 $lang['btn_edit']              = 'Edit halaman ini';
 $lang['btn_source']            = 'Lihat sumber halaman';
@@ -23,7 +23,6 @@ $lang['btn_show']              = 'Tampilkan halaman';
 $lang['btn_create']            = 'Buat halaman baru';
 $lang['btn_search']            = 'Cari';
 $lang['btn_save']              = 'Simpan';
-$lang['btn_preview']           = 'Preview';
 $lang['btn_top']               = 'kembali ke atas';
 $lang['btn_newer']             = '<< lebih lanjut';
 $lang['btn_older']             = 'sebelumnya >>';
@@ -32,7 +31,6 @@ $lang['btn_recent']            = 'Perubahan terbaru';
 $lang['btn_upload']            = 'Upload';
 $lang['btn_cancel']            = 'Batal';
 $lang['btn_index']             = 'Indeks';
-$lang['btn_secedit']           = 'Edit';
 $lang['btn_login']             = 'Login';
 $lang['btn_logout']            = 'Keluar';
 $lang['btn_admin']             = 'Admin';
@@ -40,12 +38,9 @@ $lang['btn_update']            = 'Ubah';
 $lang['btn_delete']            = 'Hapus';
 $lang['btn_back']              = 'Kembali';
 $lang['btn_backlink']          = 'Backlinks';
-$lang['btn_backtomedia']       = 'Kembali ke Pilihan Mediafile';
 $lang['btn_subscribe']         = 'Ikuti Perubahan';
 $lang['btn_profile']           = 'Ubah Profil';
-$lang['btn_reset']             = 'Reset';
 $lang['btn_resendpwd']         = 'Atur password baru';
-$lang['btn_draft']             = 'Edit draft';
 $lang['btn_recover']           = 'Cadangkan draf';
 $lang['btn_draftdel']          = 'Hapus draft';
 $lang['btn_revert']            = 'Kembalikan';
@@ -151,7 +146,6 @@ $lang['js']['media_overwrt']   = 'Timpa berkas yang ada';
 $lang['rssfailed']             = 'Error terjadi saat mengambil feed: ';
 $lang['nothingfound']          = 'Tidak menemukan samasekali.';
 $lang['mediaselect']           = 'Pilihan Mediafile';
-$lang['fileupload']            = 'Mediafile Upload';
 $lang['uploadsucc']            = 'Upload sukses';
 $lang['uploadfail']            = 'Upload gagal. Apakah hak ijinnya salah?';
 $lang['uploadwrong']           = 'Upload ditolak. Ekstensi file ini tidak diperbolehkan!';
@@ -159,7 +153,7 @@ $lang['uploadexist']           = 'File telah ada. Tidak mengerjakan apa-apa.';
 $lang['uploadbadcontent']      = 'Isi file yang diupload tidak cocok dengan ekstensi file %s.';
 $lang['uploadspam']            = 'File yang diupload diblok oleh spam blacklist.';
 $lang['uploadxss']             = 'File yang diupload diblok karena kemungkinan isi yang berbahaya.';
-$lang['uploadsize']            = 'File yang diupload terlalu besar. (max.%)';
+$lang['uploadsize']            = 'File yang diupload terlalu besar. (max. %s)';
 $lang['deletesucc']            = 'File "%s" telah dihapus.';
 $lang['deletefail']            = '"%s" tidak dapat dihapus - cek hak aksesnya.';
 $lang['mediainuse']            = 'File "%s" belum dihapus - file ini sedang digunakan.';
@@ -174,7 +168,6 @@ $lang['mediaextchange']        = 'Ektensi file berubah dari .%s ke .%s';
 $lang['reference']             = 'Referensi untuk';
 $lang['ref_inuse']             = 'File tidak dapat dihapus karena sedang digunakan oleh halaman:';
 $lang['ref_hidden']            = 'Beberapa referensi ada didalam halaman yang tidak diijinkan untuk Anda baca.';
-$lang['hits']                  = 'Hits';
 $lang['quickhits']             = 'Matching pagenames';
 $lang['toc']                   = 'Daftar isi';
 $lang['current']               = 'sekarang';
@@ -197,7 +190,6 @@ $lang['deleted']               = 'terhapus';
 $lang['created']               = 'dibuat';
 $lang['restored']              = 'revisi lama ditampilkan kembali (%s)';
 $lang['external_edit']         = 'Perubahan eksternal';
-$lang['summary']               = 'Edit summary';
 $lang['noflash']               = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> diperlukan untuk menampilkan konten ini.';
 $lang['download']              = 'Unduh Cuplikan';
 $lang['tools']                 = 'Alat';
@@ -220,27 +212,17 @@ $lang['qb_italic']             = 'Miring';
 $lang['qb_underl']             = 'Garis Bawah';
 $lang['qb_code']               = 'Kode';
 $lang['qb_strike']             = 'Text Tercoret';
-$lang['qb_h1']                 = 'Level 1 Headline';
-$lang['qb_h2']                 = 'Level 2 Headline';
-$lang['qb_h3']                 = 'Level 3 Headline';
-$lang['qb_h4']                 = 'Level 4 Headline';
-$lang['qb_h5']                 = 'Level 5 Headline';
 $lang['qb_hs']                 = 'Pilih Judul';
 $lang['qb_hplus']              = 'Judul Lebih Atas';
 $lang['qb_hminus']             = 'Judul Lebih Bawah';
 $lang['qb_hequal']             = 'Tingkat Judul yang Sama';
-$lang['qb_link']               = 'Link Internal';
-$lang['qb_extlink']            = 'Link External';
 $lang['qb_hr']                 = 'Garis Horisontal';
 $lang['qb_ol']                 = 'Item Berurutan';
 $lang['qb_ul']                 = 'Item Tidak Berurutan';
 $lang['qb_media']              = 'Tambahkan gambar atau file lain';
 $lang['qb_sig']                = 'Sisipkan tanda tangan';
-$lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Karakter Khusus';
 $lang['upperns']               = 'lompat ke namespace induk';
-$lang['admin_register']        = 'Tambah user baru';
-$lang['metaedit']              = 'Edit Metadata';
 $lang['metasaveerr']           = 'Gagal menulis metadata';
 $lang['metasaveok']            = 'Metadata tersimpan';
 $lang['img_title']             = 'Judul:';
diff --git a/inc/lang/is/lang.php b/inc/lang/is/lang.php
index de1a01ed5b1080c88a233fe9ec78ef9cadfd8c11..0af4c57a69b468d3a51f1182f770b34f4987994a 100644
--- a/inc/lang/is/lang.php
+++ b/inc/lang/is/lang.php
@@ -42,7 +42,6 @@ $lang['btn_update']            = 'Uppfæra';
 $lang['btn_delete']            = 'Eyða';
 $lang['btn_back']              = 'Til baka';
 $lang['btn_backlink']          = 'Hvað tengist hingað';
-$lang['btn_backtomedia']       = 'Aftur til miðlaskrá';
 $lang['btn_subscribe']         = 'Vakta';
 $lang['btn_profile']           = 'Uppfæra notanda';
 $lang['btn_reset']             = 'Endurstilla';
@@ -96,7 +95,6 @@ $lang['lockedby']              = 'Læstur af:';
 $lang['lockexpire']            = 'Læsing rennur út eftir:';
 $lang['nothingfound']          = 'Ekkert fannst';
 $lang['mediaselect']           = 'Miðlaskrá';
-$lang['fileupload']            = 'Hlaða inn miðlaskrá';
 $lang['uploadsucc']            = 'Innhlaðning tókst';
 $lang['uploadfail']            = 'Villa í innhlaðningu';
 $lang['uploadwrong']           = 'Innhleðslu neitað. Skrár með þessari endingu eru ekki leyfðar.';
@@ -166,7 +164,6 @@ $lang['qb_media']              = 'Bæta inn myndum og öðrum skrám';
 $lang['qb_sig']                = 'Undirskrift þín auk tímasetningu';
 $lang['qb_smileys']            = 'Broskallar';
 $lang['qb_chars']              = 'Sértækir stafir';
-$lang['admin_register']        = 'Setja nýjan notenda inn';
 $lang['metaedit']              = 'Breyta lýsigögnum';
 $lang['metasaveerr']           = 'Vistun lýsigagna mistókst';
 $lang['metasaveok']            = 'Lýsigögn vistuð';
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index c6b99d5b501301b7f564eabc1c78f54f55359e56..33a990aa9c9058857d3d0f86b6e729577b5927db 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -21,6 +21,7 @@
  * @author Francesco <francesco.cavalli@hotmail.com>
  * @author Fabio <fabioslurp@yahoo.it>
  * @author Torpedo <dgtorpedo@gmail.com>
+ * @author Maurizio <mcannavo@katamail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -52,7 +53,6 @@ $lang['btn_update']            = 'Aggiorna';
 $lang['btn_delete']            = 'Elimina';
 $lang['btn_back']              = 'Indietro';
 $lang['btn_backlink']          = 'Puntano qui';
-$lang['btn_backtomedia']       = 'Torna alla selezione file';
 $lang['btn_subscribe']         = 'Sottoscrivi modifiche';
 $lang['btn_profile']           = 'Aggiorna profilo';
 $lang['btn_reset']             = 'Annulla';
@@ -87,6 +87,7 @@ $lang['regmissing']            = 'Devi riempire tutti i campi.';
 $lang['reguexists']            = 'Il nome utente inserito esiste già.';
 $lang['regsuccess']            = 'L\'utente è stato creato. La password è stata spedita via email.';
 $lang['regsuccess2']           = 'L\'utente è stato creato.';
+$lang['regfail']               = 'L\'utente non può essere creato.';
 $lang['regmailfail']           = 'Sembra che ci sia stato un errore nell\'invio della email. Contatta l\'amministratore!';
 $lang['regbadmail']            = 'L\'indirizzo email fornito sembra essere non valido - se pensi che ci sia un errore contatta l\'amministratore';
 $lang['regbadpass']            = 'Le due password inserite non coincidono, prova di nuovo.';
@@ -101,6 +102,7 @@ $lang['profdeleteuser']        = 'Elimina account';
 $lang['profdeleted']           = 'Il tuo account utente è stato rimosso da questa wiki';
 $lang['profconfdelete']        = 'Voglio rimuovere il mio account da questa wiki. <br/> Questa operazione non può essere annullata.';
 $lang['profconfdeletemissing'] = 'La check box di conferma non è selezionata';
+$lang['proffail']              = 'Il profilo utente non è stato aggiornato.';
 $lang['pwdforget']             = 'Hai dimenticato la password? Richiedine una nuova';
 $lang['resendna']              = 'Questo wiki non supporta l\'invio di nuove password.';
 $lang['resendpwd']             = 'Imposta nuova password per';
@@ -164,7 +166,6 @@ $lang['js']['media_overwrt']   = 'Sovrascrivi i file esistenti';
 $lang['rssfailed']             = 'Si è verificato un errore cercando questo feed: ';
 $lang['nothingfound']          = 'Nessun risultato trovato.';
 $lang['mediaselect']           = 'Selezione dei file';
-$lang['fileupload']            = 'File caricato';
 $lang['uploadsucc']            = 'Invio riuscito';
 $lang['uploadfail']            = 'Invio fallito. È possibile che si tratti di un problema di permessi.';
 $lang['uploadwrong']           = 'Invio rifiutato. Questa estensione di file non è ammessa';
@@ -255,7 +256,6 @@ $lang['qb_sig']                = 'Inserisci la firma';
 $lang['qb_smileys']            = 'Smiley';
 $lang['qb_chars']              = 'Caratteri speciali';
 $lang['upperns']               = 'vai alla categoria principale';
-$lang['admin_register']        = 'Aggiungi un nuovo utente';
 $lang['metaedit']              = 'Modifica metadati';
 $lang['metasaveerr']           = 'Scrittura metadati fallita';
 $lang['metasaveok']            = 'Metadati salvati';
@@ -288,7 +288,6 @@ $lang['subscr_style_every']    = 'email per ogni modifica';
 $lang['subscr_style_digest']   = 'email di riassunto dei cambiamenti per ogni pagina (ogni %.2f giorni)';
 $lang['subscr_style_list']     = 'lista delle pagine cambiate dall\'ultima email (ogni %.2f giorni)';
 $lang['authtempfail']          = 'L\'autenticazione è temporaneamente non disponibile. Se questa situazione persiste, informa l\'amministratore di questo wiki.';
-$lang['authpwdexpire']         = 'La tua password scadrà in %d giorni, dovresti cambiarla quanto prima.';
 $lang['i_chooselang']          = 'Scegli la lingua';
 $lang['i_installer']           = 'Installazione di DokuWiki';
 $lang['i_wikiname']            = 'Nome Wiki';
@@ -350,7 +349,10 @@ $lang['media_perm_read']       = 'Spiacente, non hai abbastanza privilegi per le
 $lang['media_perm_upload']     = 'Spiacente, non hai abbastanza privilegi per caricare files.';
 $lang['media_update']          = 'Carica nuova versione';
 $lang['media_restore']         = 'Ripristina questa versione';
+$lang['media_acl_warning']     = 'Questa lista potrebbe non essere completa a causa di restrizioni ACL e pagine nascoste.';
 $lang['currentns']             = 'Namespace corrente';
 $lang['searchresult']          = 'Risultati della ricerca';
 $lang['plainhtml']             = 'HTML';
+$lang['wikimarkup']            = 'Marcatura wiki';
 $lang['page_nonexist_rev']     = 'Pagina non esistente a %s. E\' stata creata successivamente a <a href="%s">%s</a>.';
+$lang['unable_to_parse_date']  = 'Impossibile eseguire l\'analisi al parametro "%s".';
diff --git a/inc/lang/ja/index.txt b/inc/lang/ja/index.txt
index b0447899da792019a7c311cab5e11c6787973a3b..eb168d146ac43ba1e5af6e558c3b75abf5e41d21 100644
--- a/inc/lang/ja/index.txt
+++ b/inc/lang/ja/index.txt
@@ -1,4 +1,4 @@
 ====== サイトマップ ======
 
-[[doku>namespaces|名前空間]] に基づく、全ての文書の索引です。
+全ての閲覧可能ページを[[doku>ja:namespaces|名前空間]]順に並べたサイトマップです。
 
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index 3a5f169e7673e02f4441449294715120ae61a2da..38df66d1f7367f835816b80595a5ce998217c4b5 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -43,7 +43,6 @@ $lang['btn_update']            = 'æ›´æ–°';
 $lang['btn_delete']            = '削除';
 $lang['btn_back']              = '戻る';
 $lang['btn_backlink']          = 'バックリンク';
-$lang['btn_backtomedia']       = 'メディアファイル選択に戻る';
 $lang['btn_subscribe']         = '変更履歴配信の登録';
 $lang['btn_profile']           = 'ユーザー情報の更新';
 $lang['btn_reset']             = 'リセット';
@@ -78,6 +77,7 @@ $lang['regmissing']            = '全ての項目を入力してください。'
 $lang['reguexists']            = 'このユーザー名は既に存在しています。';
 $lang['regsuccess']            = '新しいユーザーが作成されました。パスワードは登録したメールアドレス宛てに送付されます。';
 $lang['regsuccess2']           = '新しいユーザーが作成されました。';
+$lang['regfail']               = 'ユーザーを作成できませんでした。';
 $lang['regmailfail']           = 'パスワードのメール送信に失敗しました。お手数ですが管理者まで連絡をお願いします。';
 $lang['regbadmail']            = 'メールアドレスが有効ではありません。';
 $lang['regbadpass']            = '確認用のパスワードが正しくありません。';
@@ -92,6 +92,7 @@ $lang['profdeleteuser']        = 'アカウントの削除';
 $lang['profdeleted']           = 'このwikiからあなたのユーザーアカウントは削除済です。';
 $lang['profconfdelete']        = 'このwikiから自分のアカウント抹消を希望します。<br/> この操作は取消すことができません。';
 $lang['profconfdeletemissing'] = '確認のチェックボックスがチェックされていません。';
+$lang['proffail']              = 'ユーザー情報は更新されませんでした。';
 $lang['pwdforget']             = 'パスワードをお忘れですか?パスワード再発行';
 $lang['resendna']              = 'パスワードの再発行は出来ません。';
 $lang['resendpwd']             = '新しいパスワードをセット';
@@ -154,7 +155,6 @@ $lang['js']['media_overwrt']   = '既存のファイルを上書きする';
 $lang['rssfailed']             = 'RSSの取得に失敗しました:';
 $lang['nothingfound']          = '該当文書はありませんでした。';
 $lang['mediaselect']           = 'メディアファイル';
-$lang['fileupload']            = 'メディアファイルをアップロード';
 $lang['uploadsucc']            = 'アップロード完了';
 $lang['uploadfail']            = 'アップロードに失敗しました。権限がありません。';
 $lang['uploadwrong']           = 'アップロードは拒否されました。この拡張子は許可されていません。';
@@ -245,7 +245,6 @@ $lang['qb_sig']                = '署名の挿入';
 $lang['qb_smileys']            = 'スマイリー';
 $lang['qb_chars']              = '特殊文字';
 $lang['upperns']               = '上の階層の名前空間へ';
-$lang['admin_register']        = '新規ユーザー作成';
 $lang['metaedit']              = 'メタデータ編集';
 $lang['metasaveerr']           = 'メタデータの書き込みに失敗しました';
 $lang['metasaveok']            = 'メタデータは保存されました';
@@ -278,7 +277,6 @@ $lang['subscr_style_every']    = '全ての変更にメールを送信';
 $lang['subscr_style_digest']   = 'それぞれのページへの変更の要約をメールする(%.2f 日毎)';
 $lang['subscr_style_list']     = '前回のメールから変更されたページをリスト(%.2f 日毎)';
 $lang['authtempfail']          = 'ユーザー認証が一時的に使用できなくなっています。この状態が続いているようであれば、Wikiの管理者に連絡して下さい。';
-$lang['authpwdexpire']         = 'あなたのパスワードは、あと%d日で有効期限が切れます。パスワードを変更してください。';
 $lang['i_chooselang']          = '使用言語を選択してください';
 $lang['i_installer']           = 'DokuWiki インストーラー';
 $lang['i_wikiname']            = 'Wiki名';
@@ -332,7 +330,7 @@ $lang['media_files']           = '%s 内のファイル';
 $lang['media_upload']          = '%s にアップロード';
 $lang['media_search']          = '%s 内で検索';
 $lang['media_view']            = '%s';
-$lang['media_viewold']         = '%s at %s';
+$lang['media_viewold']         = '%2$s に %1$s';
 $lang['media_edit']            = '%s を編集';
 $lang['media_history']         = '%s の履歴';
 $lang['media_meta_edited']     = 'メタデータが編集されました';
@@ -340,6 +338,7 @@ $lang['media_perm_read']       = 'ファイルを閲覧する権限がありま
 $lang['media_perm_upload']     = 'ファイルをアップロードする権限がありません。';
 $lang['media_update']          = '新しいバージョンをアップロード';
 $lang['media_restore']         = 'このバージョンを復元';
+$lang['media_acl_warning']     = 'ACL制限や非表示ページは表示されないので、このリストは完全でない場合があります。';
 $lang['currentns']             = '現在の名前空間';
 $lang['searchresult']          = '検索結果';
 $lang['plainhtml']             = 'プレーンHTML';
diff --git a/inc/lang/ja/register.txt b/inc/lang/ja/register.txt
index b242d1e88470bbadb9116e743a7aae3da5851dd8..0cd278699c5feb924c23fc41f1a33c9c0f0dc32f 100644
--- a/inc/lang/ja/register.txt
+++ b/inc/lang/ja/register.txt
@@ -1,4 +1,4 @@
 ====== 新規ユーザー登録 ======
 
-このWikiのユーザー登録を行うためには、以下の情報を全て入力して下さい。 もし以下の項目にパスワードが存在しない場合、パスワードはメールにて送信されますので、 必ず**有効な**メールアドレスを入力してください。 また、ログイン名は [[doku>pagename|pagename]] に準拠していなければなりません。
+このWikiのユーザー登録を行うためには、以下の情報を全て入力して下さい。 もし以下の項目にパスワードが存在しない場合、パスワードはメールにて送信されますので、 必ず**有効なメールアドレス**を入力してください。 また、ログイン名は[[doku>ja:pagename|ページ名]]に準拠していなければなりません。
 
diff --git a/inc/lang/ka/jquery.ui.datepicker.js b/inc/lang/ka/jquery.ui.datepicker.js
new file mode 100644
index 0000000000000000000000000000000000000000..69103542ba78d07817bbd4145ebc1e51482e216d
--- /dev/null
+++ b/inc/lang/ka/jquery.ui.datepicker.js
@@ -0,0 +1,35 @@
+/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
+(function( factory ) {
+	if ( typeof define === "function" && define.amd ) {
+
+		// AMD. Register as an anonymous module.
+		define([ "../datepicker" ], factory );
+	} else {
+
+		// Browser globals
+		factory( jQuery.datepicker );
+	}
+}(function( datepicker ) {
+
+datepicker.regional['ka'] = {
+	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['ka']);
+
+return datepicker.regional['ka'];
+
+}));
diff --git a/inc/lang/ka/lang.php b/inc/lang/ka/lang.php
index 28ca11e454d949ee8a99d0e7107911d65c5ae245..72594efe3a8f10cd1a3a04d85ed986937f8a5c87 100644
--- a/inc/lang/ka/lang.php
+++ b/inc/lang/ka/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Luka Lejava <luka.lejava@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
@@ -35,8 +35,6 @@ $lang['btn_update']            = 'განახლება';
 $lang['btn_delete']            = 'წაშლა';
 $lang['btn_back']              = 'უკან';
 $lang['btn_backlink']          = 'გადმომისამართებული ბმულები';
-$lang['btn_backtomedia']       = 'მედიაფაილების არჩევა';
-$lang['btn_subscribe']         = 'Manage Subscriptions';
 $lang['btn_profile']           = 'პროფილის განახლება';
 $lang['btn_reset']             = 'წაშლა';
 $lang['btn_resendpwd']         = 'ახალი პაროლის დაყენება';
@@ -48,7 +46,7 @@ $lang['btn_register']          = 'რეგისტრაცია';
 $lang['btn_apply']             = 'ცადე';
 $lang['btn_media']             = 'მედია ფაილების მართვა';
 $lang['btn_deleteuser']        = 'ჩემი ექაუნთის წაშლა';
-$lang['btn_img_backto']        = 'უკან %';
+$lang['btn_img_backto']        = 'უკან %s';
 $lang['btn_mediaManager']      = 'მედია ფაილების მმართველში გახსნა';
 $lang['loggedinas']            = 'შესული ხართ როგორც:';
 $lang['user']                  = 'ლოგინი';
@@ -94,11 +92,11 @@ $lang['resendpwdsuccess']      = 'ახალი პაროლი გამ
 $lang['license']               = 'ვიკი ლიცენზირებულია: ';
 $lang['licenseok']             = 'ამ გვერდის რედაქტირებით თვენ ეთანხმებით ლიცენზიას:';
 $lang['searchmedia']           = 'საძებო სახელი:';
-$lang['searchmedia_in']        = 'ძებნა %-ში';
+$lang['searchmedia_in']        = 'ძებნა %s-ში';
 $lang['txt_upload']            = 'აირჩიეთ ასატვირთი ფაილი:';
 $lang['txt_filename']          = 'ატვირთვა როგორც (არჩევითი):';
 $lang['txt_overwrt']           = 'გადაწერა ზემოდან';
-$lang['maxuploadsize']         = 'მაქსიმალური ზომა %';
+$lang['maxuploadsize']         = 'მაქსიმალური ზომა %s';
 $lang['lockedby']              = 'დაბლოკილია:';
 $lang['lockexpire']            = 'განიბლოკება:';
 $lang['js']['willexpire']      = 'გვერდი განიბლოკება 1 წუთში';
@@ -108,7 +106,6 @@ $lang['js']['keepopen']        = 'დატოვეთ ღია';
 $lang['js']['hidedetails']     = 'დეტალების დამალვა';
 $lang['js']['mediatitle']      = 'ინსტრუმენტები';
 $lang['js']['mediadisplay']    = 'ბმულის ტიპი';
-$lang['js']['mediaalign']      = 'Alignment';
 $lang['js']['mediasize']       = 'სურათის ზომა';
 $lang['js']['mediatarget']     = 'მიზნის ბმული';
 $lang['js']['mediaclose']      = 'დახურვა';
@@ -126,7 +123,6 @@ $lang['js']['medianolink']     = 'არ დალინკოთ სურა
 $lang['js']['medialeft']       = 'მარცხვნივ განათავსეთ სურათი';
 $lang['js']['mediaright']      = 'მარჯვნივ განათავსეთ სურათი';
 $lang['js']['mediacenter']     = 'შუაში განათავსეთ სურათი';
-$lang['js']['medianoalign']    = 'Use no align.';
 $lang['js']['nosmblinks']      = 'ეს ფუქნცია მუშაობს მხოლოდ  Internet Explorer-ზე';
 $lang['js']['linkwiz']         = 'ბმული';
 $lang['js']['linkto']          = 'ბმული';
@@ -134,9 +130,6 @@ $lang['js']['del_confirm']     = 'დარწმუნებული ხარ
 $lang['js']['restore_confirm'] = 'დარწმუნებული ხართ რომ აღდგენა გინდათ?';
 $lang['js']['media_diff']      = 'განსხვავებების ჩვენება';
 $lang['js']['media_diff_both'] = 'გვერდიგვერდ';
-$lang['js']['media_diff_opacity'] = 'Shine-through';
-$lang['js']['media_diff_portions'] = 'Swipe
-';
 $lang['js']['media_select']    = 'არჩეული ფაილები';
 $lang['js']['media_upload_btn'] = 'ატვირთვა';
 $lang['js']['media_done_btn']  = 'მზადაა';
@@ -146,54 +139,40 @@ $lang['js']['media_overwrt']   = 'გადაწერა ზემოდან
 $lang['rssfailed']             = 'დაფიქსირდა შეცდომა:';
 $lang['nothingfound']          = 'ნაპოვნი არ არის';
 $lang['mediaselect']           = 'მედია ფაილები';
-$lang['fileupload']            = 'მედია ფაილების ატვირთვა';
 $lang['uploadsucc']            = 'ატვირთვა დასრულებულია';
 $lang['uploadfail']            = 'შეფერხება ატვირთვისას';
 $lang['uploadwrong']           = 'ატვირთვა შეუძლებელია';
 $lang['uploadexist']           = 'ფაილი უკვე არსებობს';
-$lang['uploadbadcontent']      = 'ატვირთული ფაილები არ ემთხვევა ';
+$lang['uploadbadcontent']      = 'ატვირთული ფაილები არ ემთხვევა %s';
 $lang['uploadspam']            = 'ატვირთვა დაბლოკილია სპამბლოკერის მიერ';
 $lang['uploadxss']             = 'ატვირთვა დაბლოკილია';
-$lang['uploadsize']            = 'ასატვირთი ფაილი ზედმეტად დიდია';
-$lang['deletesucc']            = '% ფაილები წაიშალა';
-$lang['deletefail']            = '% ვერ მოიძებნა';
-$lang['mediainuse']            = 'ფაილის % ვერ წაიშალა, რადგან გამოყენებაშია';
-$lang['namespaces']            = 'Namespaces';
+$lang['uploadsize']            = 'ასატვირთი ფაილი ზედმეტად დიდია %s';
+$lang['deletesucc']            = '%s ფაილები წაიშალა';
+$lang['deletefail']            = '%s ვერ მოიძებნა';
+$lang['mediainuse']            = 'ფაილის %s ვერ წაიშალა, რადგან გამოყენებაშია';
 $lang['mediafiles']            = 'არსებული ფაილები';
 $lang['accessdenied']          = 'თქვენ არ შეგიძლიათ გვერდის ნახვა';
-$lang['mediausage']            = 'Use the following syntax to reference this file:';
 $lang['mediaview']             = 'ორიგინალი ფაილის ჩვენება';
 $lang['mediaroot']             = 'root';
-$lang['mediaupload']           = 'Upload a file to the current namespace here. To create subnamespaces, prepend them to your filename separated by colons after you selected the files. Files can also be selected by drag and drop.';
-$lang['mediaextchange']        = 'Filextension changed from .%s to .%s!';
-$lang['reference']             = 'References for';
 $lang['ref_inuse']             = 'ფაილი წაშლა შეუძლებელია, გამოიყენება აქ:';
 $lang['ref_hidden']            = 'ზოგიერთი ბლოკის წაკითხვის უფლება არ გაქვთ';
-$lang['hits']                  = 'Hits';
 $lang['quickhits']             = 'მსგავსი სახელები';
-$lang['toc']                   = 'Table of Contents';
 $lang['current']               = 'ახლანდელი';
 $lang['yours']                 = 'თვენი ვერსია';
 $lang['diff']                  = 'ვერსიების განსხვავება';
 $lang['diff2']                 = 'განსხვავებები';
-$lang['difflink']              = 'Link to this comparison view';
 $lang['diff_type']             = 'განსხვავებების ჩვენება';
-$lang['diff_inline']           = 'Inline';
 $lang['diff_side']             = 'გვერდიგვერდ';
 $lang['diffprevrev']           = 'წინა ვერსია';
 $lang['diffnextrev']           = 'შემდეგი ვერსია';
 $lang['difflastrev']           = 'ბოლო ვერსია';
-$lang['diffbothprevrev']       = 'Both sides previous revision';
-$lang['diffbothnextrev']       = 'Both sides next revision';
 $lang['line']                  = 'ზოლი';
-$lang['breadcrumb']            = 'Trace:';
 $lang['youarehere']            = 'თვენ ხართ აქ:';
 $lang['lastmod']               = 'ბოლოს მოდიფიცირებული:';
 $lang['deleted']               = 'წაშლილია';
 $lang['created']               = 'შექმნილია';
-$lang['restored']              = 'ძველი ვერსია აღდგენილია %';
+$lang['restored']              = 'ძველი ვერსია აღდგენილია (%s)';
 $lang['external_edit']         = 'რედაქტირება';
-$lang['summary']               = 'Edit summary';
 $lang['noflash']               = '<a href="http://www.adobe.com/products/flashplayer/">საჭიროა Adobe Flash Plugin</a>';
 $lang['download']              = 'Snippet-ის გადმოწერა';
 $lang['tools']                 = 'ინსტრუმენტები';
@@ -211,11 +190,6 @@ $lang['changes_type']          = 'ცვლილებები';
 $lang['pages_changes']         = 'გვერდები';
 $lang['media_changes']         = 'მედია ფაილები';
 $lang['both_changes']          = 'გვერდები და მედია ფაილები';
-$lang['qb_bold']               = 'Bold Text';
-$lang['qb_italic']             = 'Italic Text';
-$lang['qb_underl']             = 'Underlined Text';
-$lang['qb_code']               = 'Monospaced Text';
-$lang['qb_strike']             = 'Strike-through Text';
 $lang['qb_h1']                 = 'Level 1 სათაური';
 $lang['qb_h2']                 = 'Level 2 სათაური';
 $lang['qb_h3']                 = 'Level 3 სათაური';
@@ -226,66 +200,28 @@ $lang['qb_hs']                 = 'სათაურის არჩევა';
 $lang['qb_hplus']              = 'Higher სათაური';
 $lang['qb_hminus']             = 'Lower სათაური';
 $lang['qb_hequal']             = 'Same Level სათაური';
-$lang['qb_link']               = 'Internal Link';
-$lang['qb_extlink']            = 'External Link';
-$lang['qb_hr']                 = 'Horizontal Rule';
 $lang['qb_ol']                 = 'შეკვეთილი ბოლო მასალა';
-$lang['qb_ul']                 = 'Unordered List Item';
 $lang['qb_media']              = 'ნახატების და სხვა ფაიელბის დამატება';
 $lang['qb_sig']                = 'ხელმოწერა';
 $lang['qb_smileys']            = 'სმაილები';
-$lang['qb_chars']              = 'Special Chars';
-$lang['upperns']               = 'jump to parent namespace';
-$lang['admin_register']        = 'ახალი მომხმარებლის დამატება';
-$lang['metaedit']              = 'Edit Metadata';
-$lang['metasaveerr']           = 'Writing metadata failed';
-$lang['metasaveok']            = 'Metadata saved';
 $lang['img_title']             = 'სათაური:';
-$lang['img_caption']           = 'Caption:';
 $lang['img_date']              = 'თარიღი:';
 $lang['img_fname']             = 'ფაილის სახელი:';
 $lang['img_fsize']             = 'ზომა:';
 $lang['img_artist']            = 'ფოტოგრაფი:';
-$lang['img_copyr']             = 'Copyright:';
 $lang['img_format']            = 'ფორმატი:';
 $lang['img_camera']            = 'კამერა:';
-$lang['img_keywords']          = 'Keywords:';
 $lang['img_width']             = 'სიგანე:';
 $lang['img_height']            = 'სიმაღლე:';
-$lang['subscr_subscribe_success'] = 'Added %s to subscription list for %s';
-$lang['subscr_subscribe_error'] = 'Error adding %s to subscription list for %s';
-$lang['subscr_subscribe_noaddress'] = 'There is no address associated with your login, you cannot be added to the subscription list';
-$lang['subscr_unsubscribe_success'] = 'Removed %s from subscription list for %s';
-$lang['subscr_unsubscribe_error'] = 'Error removing %s from subscription list for %s';
-$lang['subscr_already_subscribed'] = '%s is already subscribed to %s';
-$lang['subscr_not_subscribed'] = '%s is not subscribed to %s';
-$lang['subscr_m_not_subscribed'] = 'You are currently not subscribed to the current page or namespace.';
-$lang['subscr_m_new_header']   = 'Add subscription';
-$lang['subscr_m_current_header'] = 'Current subscriptions';
-$lang['subscr_m_unsubscribe']  = 'Unsubscribe';
-$lang['subscr_m_subscribe']    = 'Subscribe';
 $lang['subscr_m_receive']      = 'მიღება';
 $lang['subscr_style_every']    = 'ფოსტა ყოველ ცვლილებაზე';
 $lang['subscr_style_digest']   = 'ფოსტა ყოველი გვერდის შეცვლაზე ';
 $lang['subscr_style_list']     = 'ფოსტა ყოველი გვერდის შეცვლაზე ';
-$lang['authtempfail']          = 'User authentication is temporarily unavailable. If this situation persists, please inform your Wiki Admin.';
-$lang['authpwdexpire']         = 'თქვენს პაროლს ვადა გაუვა %d დღეში, მალე შეცვლა მოგიწევთ.';
 $lang['i_chooselang']          = 'ენსი არჩევა';
 $lang['i_installer']           = 'DokuWiki დამყენებელი';
 $lang['i_wikiname']            = 'Wiki სახელი';
-$lang['i_enableacl']           = 'Enable ACL (recommended)';
 $lang['i_superuser']           = 'ადმინი';
 $lang['i_problems']            = 'შეასწორეთ შეცდომები';
-$lang['i_modified']            = 'For security reasons this script will only work with a new and unmodified Dokuwiki installation. You should either re-extract the files from the downloaded package or consult the complete <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
-$lang['i_funcna']              = 'PHP function <code>%s</code> is not available. Maybe your hosting provider disabled it for some reason?';
-$lang['i_phpver']              = 'Your PHP version <code>%s</code> is lower than the needed <code>%s</code>. You need to upgrade your PHP install.';
-$lang['i_permfail']            = '<code>%s</code> is not writable by DokuWiki. You need to fix the permission settings of this directory!';
-$lang['i_confexists']          = '<code>%s</code> already exists';
-$lang['i_writeerr']            = 'Unable to create <code>%s</code>. You will need to check directory/file permissions and create the file manually.';
-$lang['i_badhash']             = 'unrecognised or modified dokuwiki.php (hash=<code>%s</code>)';
-$lang['i_badval']              = '<code>%s</code> - illegal or empty value';
-$lang['i_failure']             = 'Some errors occurred while writing the configuration files. You may need to fix them manually before you can use <a href="doku.php?id=wiki:welcome">your new DokuWiki</a>.';
-$lang['i_policy']              = 'Initial ACL policy';
 $lang['i_pol0']                = 'ღია ვიკი (წაკითხვა, დაწერა და ატვირთვა შეუძლია ნებისმიერს)';
 $lang['i_pol1']                = 'თავისუფალი ვიკი (წაკითხვა შეუძლია ყველას, დაწერა და ატვირთვა - რეგისტრირებულს)';
 $lang['i_pol2']                = 'დახურული ვიკი (წაკითხვა, დაწერა და ატვირთვა შეუძლიათ მხოლოდ რეგისტრირებულებს)';
@@ -295,7 +231,6 @@ $lang['i_license']             = 'აირჩიეთ ლიცენზია
 $lang['i_license_none']        = 'არ აჩვენოთ ლიცენზიის ინფორმაცია';
 $lang['i_pop_field']           = 'დაგვეხმარეთ DokuWiki-ს აგუმჯობესებაში';
 $lang['i_pop_label']           = 'თვეში ერთელ ინფორმაციის DokuWiki-ის ადმინისტრაციისთვის გაგზავნა';
-$lang['recent_global']         = 'You\'re currently watching the changes inside the <b>%s</b> namespace. You can also <a href="%s">view the recent changes of the whole wiki</a>.';
 $lang['years']                 = '%d წლის უკან';
 $lang['months']                = '%d თვის უკან';
 $lang['weeks']                 = '%d კვირის უკან';
@@ -310,17 +245,12 @@ $lang['media_file']            = 'ფაილი';
 $lang['media_viewtab']         = 'ჩვენება';
 $lang['media_edittab']         = 'რედაქტირება';
 $lang['media_historytab']      = 'ისტორია';
-$lang['media_list_thumbs']     = 'Thumbnails';
-$lang['media_list_rows']       = 'Rows';
 $lang['media_sort_name']       = 'სახელი';
 $lang['media_sort_date']       = 'თარიღი';
-$lang['media_namespaces']      = 'Choose namespace';
 $lang['media_files']           = 'ფაილები %s';
 $lang['media_upload']          = 'ატვირთვა %s';
 $lang['media_search']          = 'ძებნა %s';
 $lang['media_view']            = '%s';
-$lang['media_viewold']         = '%s at %s';
 $lang['media_edit']            = 'რედაქტირება %s';
 $lang['media_history']         = 'ისტორია %s';
-$lang['media_meta_edited']     = 'metadata edited';
 $lang['media_perm_read']       = 'თვენ არ გაქვთ უფლება წაიკითხოთ ეს მასალა';
diff --git a/inc/lang/kk/lang.php b/inc/lang/kk/lang.php
index 74afa24e5d4611e3a5bd91b0a8bf49a23010fcfc..cb224d9a0ee4ea4ddeb5b8b35592107540901295 100644
--- a/inc/lang/kk/lang.php
+++ b/inc/lang/kk/lang.php
@@ -6,8 +6,8 @@
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
-$lang['doublequoteopening']    = '"';
-$lang['doublequoteclosing']    = '"';
+$lang['doublequoteopening']    = '&quot;';
+$lang['doublequoteclosing']    = '&quot;';
 $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
 $lang['apostrophe']            = '\'';
@@ -34,7 +34,6 @@ $lang['btn_update']            = 'Жаңарту';
 $lang['btn_delete']            = 'Жою';
 $lang['btn_back']              = 'Артқа';
 $lang['btn_backlink']          = 'Кері сілтемелері';
-$lang['btn_backtomedia']       = 'Медиафайлды таңдауға қайту';
 $lang['btn_subscribe']         = 'Жазылуларды басқару';
 $lang['btn_profile']           = 'Профильді жаңарту';
 $lang['btn_reset']             = 'Түсіру';
diff --git a/inc/lang/km/lang.php b/inc/lang/km/lang.php
index 749fa419cf18a38ca10829f73d4500eec49d1073..52e0e6a3d8db53bb0cd31fdf2dbfd0102013f831 100644
--- a/inc/lang/km/lang.php
+++ b/inc/lang/km/lang.php
@@ -34,7 +34,6 @@ $lang['btn_update'] = 'កែឡើង';
 $lang['btn_delete'] = 'លុបចោល';
 $lang['btn_back']   = 'ត្រឡប់';
 $lang['btn_backlink']    = 'ខ្សែចំណងក្រោយ';
-$lang['btn_backtomedia'] = 'ទៅប្រព័នឯកសាវិញ';
 $lang['btn_subscribe']   = 'ដាក់ដំណឹងផ្លស់ប្តូរ';
 $lang['btn_profile']     = 'កែប្រវត្តិរូប';
 $lang['btn_reset']       = 'កមណត់ឡើងរិញ';
@@ -62,7 +61,7 @@ $lang['reguexists'] = 'សុំអាទោស​ នាមប្រើនេ
 $lang['regsuccess'] = 'អ្នកប្រើបានបង្កើតហើយ និងពាក្សសម្ងាតក៏បានផ្ញើទៀត។';
 $lang['regsuccess2']= 'អ្នកប្រើបានបង្កើតហើយ។';
 $lang['regmailfail']= 'មើលទៅដុចជាមានកំហុសក្នុង....សុំទាកទងអ្នកក្របក្រង';
-$lang['regbadmail'] = 'អ៊ីមេលអ្នកសាសេមិនត្រូវបញ្ជរ&mdash;បើអ្នកកិតថានេះជាកំហុសបដិបត្តិ សុំទាកទងអ្នកក្របគ្រោង។';
+$lang['regbadmail'] = 'អ៊ីមេលអ្នកសាសេមិនត្រូវបញ្ជរ—បើអ្នកកិតថានេះជាកំហុសបដិបត្តិ សុំទាកទងអ្នកក្របគ្រោង។';
 $lang['regbadpass'] = 'គូពាក្សសម្ងាតមិនដូចគ្នាទេ សមសាកទៀត។';
 $lang['regpwmail']  = 'ពាក្សសម្ងាតអ្នក';
 $lang['reghere']    = 'អ្នកឥតមានបញ្ជីនាមបម្រើទេ?  សុំចល់ចុះឈ្មោះធ្វើគណនីសម្របប្រើប្រស';
@@ -92,7 +91,6 @@ $lang['rssfailed']   = 'មានកំហុសពេលទៅ​ប្រម
 $lang['nothingfound']= 'រកមិនឃើញអ្វីទេ។';
 
 $lang['mediaselect'] = 'ឯកសារមីឌៀ';
-$lang['fileupload']  = 'រុញឯកសារមីឌៀឡើង';
 $lang['uploadsucc']  = 'រុញចូលមានជ័យ';
 $lang['uploadfail']  = 'រុញឡើងបរាជ័យ។ ប្រហែលខុសសិទ្ឋានុញ្ញាត?';
 $lang['uploadwrong'] = 'រុញឡើងត្រូវ​បាន​បដិសេធ។ ឯកសារ';
@@ -101,8 +99,8 @@ $lang['uploadbadcontent'] = 'ធាតុចំរុញឡើងមិនត្
 $lang['uploadspam']  = 'ចំរុញឡើង បង្ខាំង ដៅយ  ';
 $lang['uploadxss']   = 'ចំរុញឡើង បង្ខាំង  ';
 $lang['deletesucc']  = 'ឯកសារ «%s» បានលុបហើយ។';
-$lang['deletefail']  = '«%s» មិនអាចលុបទេ&mdashមើល';
-$lang['mediainuse']  = 'ឯកសារ «%s» ឥតទានលុបទេ&mdashមានគេកំភងទេជាប់ប្រើ។';
+$lang['deletefail']  = '«%s» មិនអាចលុបទេ—មើល';
+$lang['mediainuse']  = 'ឯកសារ «%s» ឥតទានលុបទេ—មានគេកំភងទេជាប់ប្រើ។';
 $lang['namespaces']  = 'នាមដ្ឋាន';
 $lang['mediafiles']  = 'ឯកសារទំនេនៅក្នុង';
 
@@ -160,7 +158,6 @@ $lang['qb_smileys'] = 'សញ្ញាអារម្មណ៍';
 $lang['qb_chars']   = 'អក្ខរៈពិសេស';
 
 $lang['js']['del_confirm']= 'លុប';
-$lang['admin_register']= 'តែមអ្នកប្រើ';//'Add new user';
 
 $lang['metaedit']    = 'កែទិន្នន័យអរូប';//'Edit Metadata';
 $lang['metasaveerr'] = 'ពំអាចកត់រទិន្នន័យអរូប';//'Writing metadata failed';
@@ -188,12 +185,9 @@ $lang['i_enableacl']  = 'បើកប្រើ (អនុសាស)';
 $lang['i_superuser']  = 'អ្នកកំពូល';
 $lang['i_problems']   = 'កម្មវិធី​ដំឡើងបានប៉ះឧបសគ្គ។ អ្នកមិនអាចបន្តទៅទៀត ដល់អ្នកជួសជុលវា។';
 $lang['i_modified']   = '';
-$lang['i_funcna']     = '<code>%s</code> ';
 $lang['i_permfail']   = '<code>%s</code> មិនអាចសាស';
 $lang['i_confexists'] = '<code>%s</code> មានហាយ';
 $lang['i_writeerr']   = 'មិនអាចបណ្កើ<code>%s</code>។ អ្នកត្រវការពិនិត្យអធិក្រឹតិរបស់ថតនឹងឯកសារ។';
-$lang['i_badhash']    = '(hash=<code>%s</code>)';
-$lang['i_badval']     = '<code>%s</code>&mdash;';
 $lang['i_success']    = '';
 $lang['i_failure']    = 'ពលសាសារ';
 $lang['i_policy']     = 'បញ្ជីអនុញ្ញតផ្ដើម';
diff --git a/inc/lang/ko/admin.txt b/inc/lang/ko/admin.txt
index 2f81e89618ac34c7ae0faf6c899a1c0cae2d9926..408da1f8f7754660227569d9841ce56107e78237 100644
--- a/inc/lang/ko/admin.txt
+++ b/inc/lang/ko/admin.txt
@@ -1,3 +1,3 @@
 ====== 관리 ======
 
-도쿠위키에서 사용할 수 있는 관리 작업 목록을 아래에서 찾을 수 있습니다.
\ No newline at end of file
+도쿠위키에서 사용할 수 있는 관리 작업 목록은 아래와 같습니다.
\ No newline at end of file
diff --git a/inc/lang/ko/backlinks.txt b/inc/lang/ko/backlinks.txt
index 6a6ad48a4d7f200a68991a4a8d82e27208c25616..457974d860c6b04c5540680007a0bd030676dc94 100644
--- a/inc/lang/ko/backlinks.txt
+++ b/inc/lang/ko/backlinks.txt
@@ -1,3 +1,3 @@
-====== 백링크 ======
+====== 역링크 ======
 
 현재 문서를 가리키는 링크가 있는 문서 목록입니다.
\ No newline at end of file
diff --git a/inc/lang/ko/denied.txt b/inc/lang/ko/denied.txt
index a4b94be655825927bc1c578df8773c30a2613e40..bf82fbd3105c2daa1af1702efef19c623f205722 100644
--- a/inc/lang/ko/denied.txt
+++ b/inc/lang/ko/denied.txt
@@ -1,4 +1,3 @@
 ====== 권한 거절 ======
 
-죄송하지만 계속할 수 있는 권한이 없습니다.
-
+죄송하지만 계속할 수 있는 권한이 없습니다.
\ No newline at end of file
diff --git a/inc/lang/ko/draft.txt b/inc/lang/ko/draft.txt
index 7e700f72558fe4ca9a38b992a98071c031f8268e..bb6dc8c00f791f4bedc28ffdf73ce616bbce4556 100644
--- a/inc/lang/ko/draft.txt
+++ b/inc/lang/ko/draft.txt
@@ -2,4 +2,4 @@
 
 이 문서의 마지막 편집 세션은 올바르게 끝나지 않았습니다. 도쿠위키는 작업 도중 자동으로 저장된 초안을 사용해 편집을 계속 할 수 있습니다. 마지막 세션 동안 저장된 초안을 아래에서 볼 수 있습니다.
 
-비정상적으로 끝난 편집 세션을 **되돌릴**지 여부를 결정하고, 자동으로 저장되었던 초안을 **삭제**하거나 편집 과정을 **취소**하세요.
\ No newline at end of file
+비정상적으로 끝난 편집 세션을 **복구**할지 여부를 결정하고, 자동으로 저장되었던 초안을 **삭제**하거나 편집 과정을 **취소**하세요.
\ No newline at end of file
diff --git a/inc/lang/ko/edit.txt b/inc/lang/ko/edit.txt
index 8da90266ce1c649e9eedcc3f90b0555709d2be6e..70b24ac7b0e7c9c0ae2b13958e9132064f6bff1a 100644
--- a/inc/lang/ko/edit.txt
+++ b/inc/lang/ko/edit.txt
@@ -1 +1 @@
-문서를 편집하고 ''저장''을 누르세요. 위키 구문은 [[wiki:syntax]]를 참고하세요. 문서를 **더 좋게 만들 자신이 있을 때**에만 편집하세요. 연습을 하고 싶다면 먼저 [[playground:playground|연습장]]에 가서 연습하세요.
\ No newline at end of file
+문서를 편집하고 ''저장''을 누르세요. 위키 구문은 [[wiki:syntax]]를 참조하세요. 문서를 **더 좋게 만들 자신이 있을 때**에만 편집하세요. 연습을 하고 싶다면 먼저 [[playground:playground|연습장]]에 가서 연습하세요.
\ No newline at end of file
diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php
index 877c43de3b86b79904dcbecc37ac2734038ce87d..9eefdf5774be8e758967b2ce68394365577b3241 100644
--- a/inc/lang/ko/lang.php
+++ b/inc/lang/ko/lang.php
@@ -13,6 +13,8 @@
  * @author Gerrit Uitslag <klapinklapin@gmail.com>
  * @author Garam <rowain8@gmail.com>
  * @author Young gon Cha <garmede@gmail.com>
+ * @author hyeonsoft <hyeonsoft@live.co.kr>
+ * @author Erial <erial2@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -29,8 +31,8 @@ $lang['btn_search']            = '검색';
 $lang['btn_save']              = '저장';
 $lang['btn_preview']           = '미리 보기';
 $lang['btn_top']               = '맨 위로';
-$lang['btn_newer']             = '<< 최근';
-$lang['btn_older']             = '이전 >>';
+$lang['btn_newer']             = '<< 더 최근';
+$lang['btn_older']             = '덜 최근 >>';
 $lang['btn_revs']              = '이전 판';
 $lang['btn_recent']            = '최근 바뀜';
 $lang['btn_upload']            = '올리기';
@@ -40,17 +42,16 @@ $lang['btn_secedit']           = '편집';
 $lang['btn_login']             = '로그인';
 $lang['btn_logout']            = '로그아웃';
 $lang['btn_admin']             = '관리';
-$lang['btn_update']            = '바꾸기';
+$lang['btn_update']            = '업데이트';
 $lang['btn_delete']            = '삭제';
 $lang['btn_back']              = '뒤로';
-$lang['btn_backlink']          = '백링크';
-$lang['btn_backtomedia']       = '미디어 파일 선택으로 돌아가기';
+$lang['btn_backlink']          = '역링크';
 $lang['btn_subscribe']         = '구독 관리';
-$lang['btn_profile']           = '프로필 바꾸기';
+$lang['btn_profile']           = '프로필 업데이트';
 $lang['btn_reset']             = '재설정';
 $lang['btn_resendpwd']         = '새 비밀번호 설정';
 $lang['btn_draft']             = '초안 편집';
-$lang['btn_recover']           = '초안 되돌리기';
+$lang['btn_recover']           = '초안 복구';
 $lang['btn_draftdel']          = '초안 삭제';
 $lang['btn_revert']            = '되돌리기';
 $lang['btn_register']          = '등록';
@@ -77,8 +78,9 @@ $lang['nosecedit']             = '한 동안 문서가 바뀌었으며, 문단 
 $lang['searchcreatepage']      = '만약 원하는 문서를 찾지 못했다면, \'\'문서 만들기\'\'나 \'\'문서 편집\'\'을 사용해 검색어와 같은 이름의 문서를 만들거나 편집할 수 있습니다.';
 $lang['regmissing']            = '죄송하지만 모든 필드를 채워야 합니다.';
 $lang['reguexists']            = '죄송하지만 같은 이름을 사용하는 사용자가 있습니다.';
-$lang['regsuccess']            = '사용자를 만들었으며 비밀번호는 이메일로 보냈습니다.';
-$lang['regsuccess2']           = '사용자를 만들었습니다.';
+$lang['regsuccess']            = '사용자 계정을 만들었으며 비밀번호는 이메일로 보냈습니다.';
+$lang['regsuccess2']           = '사용자 계정을 만들었습니다.';
+$lang['regfail']               = '사용자 계정을 만들 수 없었습니다.';
 $lang['regmailfail']           = '비밀번호를 이메일로 보내는 동안 오류가 발생했습니다. 관리자에게 문의해주세요!';
 $lang['regbadmail']            = '주어진 이메일 주소가 잘못되었습니다 - 오류라고 생각하면 관리자에게 문의해주세요';
 $lang['regbadpass']            = '두 주어진 비밀번호가 같지 않습니다. 다시 입력하세요.';
@@ -88,11 +90,12 @@ $lang['profna']                = '이 위키는 프로필 수정을 할 수 없
 $lang['profnochange']          = '바뀐 내용이 없습니다.';
 $lang['profnoempty']           = '빈 이름이나 이메일 주소는 허용하지 않습니다.';
 $lang['profchanged']           = '프로필이 성공적으로 바뀌었습니다.';
-$lang['profnodelete']          = '이 위키는 사용자 삭제를 지원하지 않습니다';
+$lang['profnodelete']          = '이 위키는 사용자 계정 삭제를 지원하지 않습니다';
 $lang['profdeleteuser']        = '계정 삭제';
 $lang['profdeleted']           = '당신의 사용자 계정이 이 위키에서 삭제되었습니다';
 $lang['profconfdelete']        = '이 위키에서 내 계정을 제거하고 싶습니다. <br/> 이 행동은 되돌릴 수 없습니다.';
 $lang['profconfdeletemissing'] = '선택하지 않은 확인 상자를 확인';
+$lang['proffail']              = '사용자 프로필이 업데이트되지 않았습니다.';
 $lang['pwdforget']             = '비밀번호를 잊으셨나요? 비밀번호를 재설정하세요';
 $lang['resendna']              = '이 위키는 비밀번호 재설정을 지원하지 않습니다.';
 $lang['resendpwd']             = '다음으로 새 비밀번호 보내기';
@@ -108,7 +111,7 @@ $lang['searchmedia_in']        = '%s에서 검색';
 $lang['txt_upload']            = '올릴 파일 선택:';
 $lang['txt_filename']          = '올릴 파일 이름 (선택 사항):';
 $lang['txt_overwrt']           = '기존 파일에 덮어쓰기';
-$lang['maxuploadsize']         = '최대 올리기 용량. 파일당 %s입니다.';
+$lang['maxuploadsize']         = '최대 올리기 용량. 파일당 %s.';
 $lang['lockedby']              = '현재 잠겨진 사용자:';
 $lang['lockexpire']            = '잠금 해제 시간:';
 $lang['js']['willexpire']      = '잠시 후 편집 잠금이 해제됩니다.\n편집 충돌을 피하려면 미리 보기를 눌러 잠금 시간을 다시 설정하세요.';
@@ -155,7 +158,6 @@ $lang['js']['media_overwrt']   = '기존 파일에 덮어쓰기';
 $lang['rssfailed']             = '이 피드를 가져오는 동안 오류가 발생했습니다:';
 $lang['nothingfound']          = '아무 것도 없습니다.';
 $lang['mediaselect']           = '미디어 파일';
-$lang['fileupload']            = '미디어 파일 올리기';
 $lang['uploadsucc']            = '올리기 성공';
 $lang['uploadfail']            = '올리기가 실패되었습니다. 잘못된 권한 때문일지도 모릅니다.';
 $lang['uploadwrong']           = '올리기가 거부되었습니다. 금지된 파일 확장자입니다!';
@@ -170,14 +172,14 @@ $lang['mediainuse']            = '"%s" 파일을 삭제할 수 없습니다 - 
 $lang['namespaces']            = '이름공간';
 $lang['mediafiles']            = '사용할 수 있는 파일 목록';
 $lang['accessdenied']          = '이 문서를 볼 권한이 없습니다.';
-$lang['mediausage']            = '이 파일을 참고하려면 다음 문법을 사용하세요:';
+$lang['mediausage']            = '이 파일을 참조하려면 다음 문법을 사용하세요:';
 $lang['mediaview']             = '원본 파일 보기';
 $lang['mediaroot']             = '루트';
 $lang['mediaupload']           = '파일을 현재 이름공간으로 올립니다. 하위 이름공간으로 만들려면 선택한 파일 이름 앞에 쌍점(:)으로 구분되는 이름을 붙이면 됩니다. 파일을 드래그 앤 드롭해 선택할 수 있습니다.';
 $lang['mediaextchange']        = '파일 확장자가 .%s에서 .%s(으)로 바뀌었습니다!';
 $lang['reference']             = '다음을 참조';
 $lang['ref_inuse']             = '다음 문서에서 아직 사용 중이므로 파일을 삭제할 수 없습니다:';
-$lang['ref_hidden']            = '문서의 일부 참고는 읽을 수 있는 권한이 없습니다';
+$lang['ref_hidden']            = '문서의 일부 참조는 읽을 수 있는 권한이 없습니다';
 $lang['hits']                  = '조회 수';
 $lang['quickhits']             = '일치하는 문서 이름';
 $lang['toc']                   = '목차';
@@ -204,7 +206,7 @@ $lang['created']               = '만듦';
 $lang['restored']              = '이전 판으로 되돌림 (%s)';
 $lang['external_edit']         = '바깥 편집';
 $lang['summary']               = '편집 요약';
-$lang['noflash']               = '이 내용을 표시하기 위해서 <a href="http://www.adobe.com/products/flashplayer/">Adobe 플래시 플러그인</a>이 필요합니다.';
+$lang['noflash']               = '이 내용을 표시하기 위해서 <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash 플러그인</a>이 필요합니다.';
 $lang['download']              = '조각 다운로드';
 $lang['tools']                 = '도구';
 $lang['user_tools']            = '사용자 도구';
@@ -246,7 +248,6 @@ $lang['qb_sig']                = '서명 넣기';
 $lang['qb_smileys']            = '이모티콘';
 $lang['qb_chars']              = '특수 문자';
 $lang['upperns']               = '상위 이름공간으로 이동';
-$lang['admin_register']        = '새 사용자 추가';
 $lang['metaedit']              = '메타데이터 편집';
 $lang['metasaveerr']           = '메타데이터 쓰기 실패';
 $lang['metasaveok']            = '메타데이터 저장됨';
@@ -279,7 +280,6 @@ $lang['subscr_style_every']    = '모든 바뀜을 이메일로 받기';
 $lang['subscr_style_digest']   = '각 문서의 바뀜을 요약 (매 %.2f일 마다)';
 $lang['subscr_style_list']     = '마지막 이메일 이후 바뀐 문서의 목록 (매 %.2f일 마다)';
 $lang['authtempfail']          = '사용자 인증을 일시적으로 사용할 수 없습니다. 만약 계속해서 문제가 발생한다면 위키 관리자에게 문의하시기 바랍니다.';
-$lang['authpwdexpire']         = '비밀번호를 바꾼지 %d일이 지났으며, 비밀번호를 곧 바꿔야 합니다.';
 $lang['i_chooselang']          = '사용할 언어를 선택하세요';
 $lang['i_installer']           = '도쿠위키 설치 관리자';
 $lang['i_wikiname']            = '위키 이름';
@@ -287,7 +287,7 @@ $lang['i_enableacl']           = 'ACL 활성화 (권장)';
 $lang['i_superuser']           = '슈퍼 사용자';
 $lang['i_problems']            = '설치 관리자가 아래에 나와 있는 몇 가지 문제를 찾았습니다. 문제를 해결하지 전까지 설치를 계속할 수 없습니다.';
 $lang['i_modified']            = '보안 상의 이유로 이 스크립트는 수정되지 않은 새 도쿠위키 설치에서만 동작됩니다.
-다운로드한 압축 패키지를 다시 설치하거나 <a href="http://dokuwiki.org/ko:install">도쿠위키 설치 과정</a>을 참고해서 설치하세요.';
+                                  다운로드한 압축 패키지를 다시 설치하거나 <a href="http://dokuwiki.org/ko:install">도쿠위키 설치 과정</a>을 참조해서 설치하세요.';
 $lang['i_funcna']              = '<code>%s</code> PHP 함수를 사용할 수 없습니다. 호스트 제공자가 어떤 이유에서인지 막아 놓았을지 모릅니다.';
 $lang['i_phpver']              = 'PHP <code>%s</code> 버전은 필요한 <code>%s</code> 버전보다 오래되었습니다. PHP를 업그레이드할 필요가 있습니다.';
 $lang['i_mbfuncoverload']      = '도쿠위키를 실행하려면 mbstring.func_overload를 php.ini에서 비활성화해야 합니다.';
@@ -297,9 +297,9 @@ $lang['i_writeerr']            = '<code>%s</code>(을)를 만들 수 없습니
 $lang['i_badhash']             = 'dokuwiki.php를 인식할 수 없거나 원본 파일이 아닙니다 (해시=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> - 잘못되었거나 빈 값입니다';
 $lang['i_success']             = '환경 설정이 성공적으로 끝났습니다. 지금 install.php를 지워도 상관없습니다.
-<a href="doku.php?id=wiki:welcome">새 도쿠위키</a>로 들어가세요.';
+                                 <a href="doku.php?id=wiki:welcome">새 도쿠위키</a>로 들어가세요.';
 $lang['i_failure']             = '환경 설정 파일에 쓰는 도중에 오류가 발생했습니다.
-<a href="doku.php?id=wiki:welcome">새 도쿠위키</a>를 사용하기 전에 수동으로 문제를 해결해야 합니다.';
+                                  <a href="doku.php?id=wiki:welcome">새 도쿠위키</a>를 사용하기 전에 수동으로 문제를 해결해야 합니다.';
 $lang['i_policy']              = '초기 ACL 정책';
 $lang['i_pol0']                = '열린 위키 (누구나 읽기, 쓰기, 올리기가 가능합니다)';
 $lang['i_pol1']                = '공개 위키 (누구나 읽을 수 있지만, 등록된 사용자만 쓰기와 올리기가 가능합니다)';
@@ -334,7 +334,7 @@ $lang['media_files']           = '%s에 있는 파일';
 $lang['media_upload']          = '%s에 올리기';
 $lang['media_search']          = '%s에서 검색';
 $lang['media_view']            = '%s';
-$lang['media_viewold']         = '%s (%s에 있음)';
+$lang['media_viewold']         = '%2$s에 있는 %1$s';
 $lang['media_edit']            = '%s 편집';
 $lang['media_history']         = '%s의 역사';
 $lang['media_meta_edited']     = '메타데이터 편집됨';
@@ -342,6 +342,7 @@ $lang['media_perm_read']       = '죄송하지만 파일을 읽을 권한이 없
 $lang['media_perm_upload']     = '죄송하지만 파일을 올릴 권한이 없습니다.';
 $lang['media_update']          = '새 판 올리기';
 $lang['media_restore']         = '이 판으로 되돌리기';
+$lang['media_acl_warning']     = '이 목록은 ACL로 제한되어 있고 숨겨진 문서이기 때문에 완전하지 않을 수 있습니다.';
 $lang['currentns']             = '현재 이름공간';
 $lang['searchresult']          = '검색 결과';
 $lang['plainhtml']             = '일반 HTML';
diff --git a/inc/lang/ko/searchpage.txt b/inc/lang/ko/searchpage.txt
index 6aa1c89af8f2e8985f8cd2311abfc7489d1e8213..bb834277fa0cf6d6595a861ad9422c2f92d1b0d5 100644
--- a/inc/lang/ko/searchpage.txt
+++ b/inc/lang/ko/searchpage.txt
@@ -2,4 +2,4 @@
 
 아래에서 검색 결과를 찾을 수 있습니다. @CREATEPAGEINFO@
 
-===== ê²°ê³¼ =====
+===== ê²°ê³¼ =====
\ No newline at end of file
diff --git a/inc/lang/ko/updateprofile.txt b/inc/lang/ko/updateprofile.txt
index 055272e9d527dba4f2c9cca042c6c500543cdec1..0ddea30b0e37a7cc651b2318d91b9e32b2aba2f7 100644
--- a/inc/lang/ko/updateprofile.txt
+++ b/inc/lang/ko/updateprofile.txt
@@ -1,3 +1,3 @@
-====== 계정 프로필 바꾸기 ======
+====== 계정 프로필 업데이트 ======
 
 바꾸고 싶은 항목을 입력하세요. 사용자 이름은 바꿀 수 없습니다.
\ No newline at end of file
diff --git a/inc/lang/ku/admin.txt b/inc/lang/ku/admin.txt
deleted file mode 100644
index cfd21b21790353b863bff2ce565f645347b5b051..0000000000000000000000000000000000000000
--- a/inc/lang/ku/admin.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Administration ======
-
-Below you can find a list of administrative tasks available in DokuWiki.
-
diff --git a/inc/lang/ku/denied.txt b/inc/lang/ku/denied.txt
deleted file mode 100644
index 34cb8456a6cc18ba211acd4e57de24539ad79b65..0000000000000000000000000000000000000000
--- a/inc/lang/ku/denied.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Permission Denied ======
-
-Sorry, you don't have enough rights to continue.
-
diff --git a/inc/lang/ku/editrev.txt b/inc/lang/ku/editrev.txt
deleted file mode 100644
index e6995713bd2d3d7e1960747bc671f1a3c06eb0e0..0000000000000000000000000000000000000000
--- a/inc/lang/ku/editrev.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-**You've loaded an old revision of the document!** If you save it, you will create a new version with this data.
-----
\ No newline at end of file
diff --git a/inc/lang/ku/lang.php b/inc/lang/ku/lang.php
index a3c91eee8584af45f8b29fcbb14a6e63531f1043..460b5e8a304b87102e70da37d22961dd4c002560 100644
--- a/inc/lang/ku/lang.php
+++ b/inc/lang/ku/lang.php
@@ -31,113 +31,16 @@ $lang['btn_update'] = 'Rojanekirin';
 $lang['btn_delete'] = 'Jê bibe';
 $lang['btn_back']   = 'PaÅŸ';
 $lang['btn_backlink']    = 'Girêdanên paş';
-$lang['btn_backtomedia'] = 'Back to Mediafile Selection';
-$lang['btn_subscribe']   = 'Subscribe Changes';
-$lang['btn_register'] = 'Register';
 
-$lang['loggedinas'] = 'Logged in as:';
-$lang['user']       = 'Username';
-$lang['pass']       = 'Password';
-$lang['passchk']    = 'once again';
-$lang['remember']   = 'Remember me';
-$lang['fullname']   = 'Full name';
-$lang['email']      = 'E-Mail';
-$lang['badlogin']   = 'Sorry, username or password was wrong.';
-
-$lang['regmissing'] = 'Sorry, you must fill in all fields.';
-$lang['reguexists'] = 'Sorry, a user with this login already exists.';
-$lang['regsuccess'] = 'The user has been created and the password was sent by email.';
-$lang['regsuccess2']= 'The user has been created.';
-$lang['regmailfail']= 'Looks like there was an error on sending the password mail. Please contact the admin!';
-$lang['regbadmail'] = 'The given email address looks invalid - if you think this is an error, contact the admin';
-$lang['regbadpass'] = 'The two given passwords are not identically, please try again.';
-$lang['regpwmail']  = 'Your DokuWiki password';
-$lang['reghere']    = 'You don\'t have an account yet? Just get one';
-
-$lang['txt_upload']   = 'Select file to upload';
-$lang['txt_filename'] = 'Enter wikiname (optional)';
-$lang['txt_overwrt']  = 'Overwrite existing file';
-$lang['lockedby']     = 'Currently locked by';
-$lang['lockexpire']   = 'Lock expires at';
-$lang['js']['willexpire']   = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
-
-$lang['js']['notsavedyet'] = 'Unsaved changes will be lost.\nReally continue?';
-
-$lang['rssfailed']   = 'An error occured while fetching this feed: ';
 $lang['nothingfound']= 'Tiştek nehat dîtin.';
-
-$lang['mediaselect'] = 'Mediafile Selection';
-$lang['fileupload']  = 'Mediafile Upload';
-$lang['uploadsucc']  = 'Upload successful';
-$lang['uploadfail']  = 'Upload failed. Maybe wrong permissions?';
-$lang['uploadwrong'] = 'Upload denied. This file extension is forbidden!';
-$lang['uploadexist'] = 'File already exists. Nothing done.';
-$lang['deletesucc']  = 'The file "%s" has been deleted.';
-$lang['deletefail']  = '"%s" couldn\'t be deleted - check permissions.';
-$lang['mediainuse']  = 'The file "%s" hasn\'t been deleted - it is still in use.';
-$lang['namespaces']  = 'Namespace';
-$lang['mediafiles']  = 'Available files in';
-
 $lang['reference']   = 'Referansa';
-$lang['ref_inuse']   = 'The file can\'t be deleted, because it\'s still used by the following pages:';
-$lang['ref_hidden']  = 'Some references  are on pages you don\'t have permission to read';
-
-$lang['hits']       = 'Hits';
-$lang['quickhits']  = 'Matching pagenames';
 $lang['toc']        = 'Tabloya Navêrokê';
-$lang['current']    = 'current';
-$lang['yours']      = 'Your Version';
-$lang['diff']       = 'show differences to current version';
 $lang['line']       = 'Rêz';
 $lang['breadcrumb'] = 'Åžop:';
 $lang['lastmod']    = 'Guherandina dawî:';
-$lang['by']         = 'by';
 $lang['deleted']    = 'hat jê birin';
 $lang['created']    = 'hat afirandin';
-$lang['restored']   = 'old revision restored (%s)';
 $lang['summary']    = 'Kurteya guhartinê';
-
-$lang['mail_newpage'] = 'page added:';
-$lang['mail_changed'] = 'page changed:';
-
-$lang['js']['nosmblinks'] = 'Linking to Windows shares only works in Microsoft Internet Explorer.\nYou still can copy and paste the link.';
-
-$lang['qb_bold']    = 'Bold Text';
-$lang['qb_italic']  = 'Italic Text';
-$lang['qb_underl']  = 'Underlined Text';
-$lang['qb_code']    = 'Code Text';
-$lang['qb_strike']  = 'Strike-through Text';
-$lang['qb_h1']      = 'Level 1 Headline';
-$lang['qb_h2']      = 'Level 2 Headline';
-$lang['qb_h3']      = 'Level 3 Headline';
-$lang['qb_h4']      = 'Level 4 Headline';
-$lang['qb_h5']      = 'Level 5 Headline';
-$lang['qb_link']    = 'Internal Link';
-$lang['qb_extlink'] = 'External Link';
-$lang['qb_hr']      = 'Horizontal Rule';
-$lang['qb_ol']      = 'Ordered List Item';
-$lang['qb_ul']      = 'Unordered List Item';
-$lang['qb_media']   = 'Add Images and other files';
-$lang['qb_sig']     = 'Insert Signature';
-
-$lang['js']['del_confirm']= 'Delete this entry?';
-
-$lang['admin_register']= 'Add new user...';
-
-$lang['metaedit']    = 'Edit Metadata';
-$lang['metasaveerr'] = 'Writing metadata failed';
-$lang['metasaveok']  = 'Metadata saved';
-$lang['btn_img_backto']  = 'Back to %s';
-$lang['img_title']   = 'Title:';
-$lang['img_caption'] = 'Caption:';
-$lang['img_date']    = 'Date:';
-$lang['img_fname']   = 'Filename:';
-$lang['img_fsize']   = 'Size:';
-$lang['img_artist']  = 'Photographer:';
-$lang['img_copyr']   = 'Copyright:';
-$lang['img_format']  = 'Format:';
-$lang['img_camera']  = 'Camera:';
-$lang['img_keywords']= 'Keywords:';
 $lang['searchcreatepage']      = "Heke tiştek nehatibe dîtin, tu dikarî dest bi nivîsandina rûpelekê nû bikî. Ji bo vê, ''Vê rûpelê biguherîne'' bitikîne.";
 
 //Setup VIM: ex: et ts=2 :
diff --git a/inc/lang/ku/locked.txt b/inc/lang/ku/locked.txt
deleted file mode 100644
index af6347a962a7364c9aad79dd28f88a003de326bd..0000000000000000000000000000000000000000
--- a/inc/lang/ku/locked.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-====== Page locked ======
-
-This page is currently locked for editing by another user. You have to wait until this user finishes editing or the lock expires.
diff --git a/inc/lang/ku/login.txt b/inc/lang/ku/login.txt
deleted file mode 100644
index 2004ea1985fd289991cc44ae7aa4eb81ea8d23bb..0000000000000000000000000000000000000000
--- a/inc/lang/ku/login.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Login ======
-
-You are currently not logged in! Enter your authentication credentials below to log in. You need to have cookies enabled to log in.
-
diff --git a/inc/lang/ku/mailtext.txt b/inc/lang/ku/mailtext.txt
deleted file mode 100644
index 44a3f6553604d5de12b30ad006b272e87bd29c76..0000000000000000000000000000000000000000
--- a/inc/lang/ku/mailtext.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-A page in your DokuWiki was added or changed. Here are the details:
-
-Date        : @DATE@
-Browser     : @BROWSER@
-IP-Address  : @IPADDRESS@
-Hostname    : @HOSTNAME@
-Old Revision: @OLDPAGE@
-New Revision: @NEWPAGE@
-Edit Summary: @SUMMARY@
-User        : @USER@
-
-@DIFF@
-
-
--- 
-This mail was generated by DokuWiki at
-@DOKUWIKIURL@
diff --git a/inc/lang/ku/norev.txt b/inc/lang/ku/norev.txt
deleted file mode 100644
index 0b21bf3f06bacd312b1ca92e09470453b876aaa7..0000000000000000000000000000000000000000
--- a/inc/lang/ku/norev.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== No such revision ======
-
-The specified revision doesn't exist. Use the ''Old revisions'' button for a list of old revisions of this document.
-
diff --git a/inc/lang/ku/password.txt b/inc/lang/ku/password.txt
deleted file mode 100644
index 6d5cbe678cd813a4e5652cd2fa044b0feaa90728..0000000000000000000000000000000000000000
--- a/inc/lang/ku/password.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Hi @FULLNAME@!
-
-Here is your userdata for @TITLE@ at @DOKUWIKIURL@
-
-Login    : @LOGIN@
-Password : @PASSWORD@
-
--- 
-This mail was generated by DokuWiki at
-@DOKUWIKIURL@
diff --git a/inc/lang/ku/read.txt b/inc/lang/ku/read.txt
deleted file mode 100644
index 9f56d81ad8b36dd3467fe8a43297209f53f93d67..0000000000000000000000000000000000000000
--- a/inc/lang/ku/read.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong.
-
diff --git a/inc/lang/ku/register.txt b/inc/lang/ku/register.txt
deleted file mode 100644
index b65683bc2b4ac25c594a5186223530612162b69e..0000000000000000000000000000000000000000
--- a/inc/lang/ku/register.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Register as new user ======
-
-Fill in all the information below to create a new account in this wiki. Make sure you supply a **valid e-mail address** - your new password will be sent to it. The login name should be a valid [[doku>pagename|pagename]].
-
diff --git a/inc/lang/ku/revisions.txt b/inc/lang/ku/revisions.txt
deleted file mode 100644
index dd5f35b8e7e3b17d8eaddffd705f868b1e69f2da..0000000000000000000000000000000000000000
--- a/inc/lang/ku/revisions.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-====== Old Revisions ======
-
-These are the older revisons of the current document. To revert to an old revision, select it from below, click ''Edit this page'' and save it.
-
diff --git a/inc/lang/ku/showrev.txt b/inc/lang/ku/showrev.txt
deleted file mode 100644
index 3608de36b84af7d8fc918b1fa0d439bf04b0bb27..0000000000000000000000000000000000000000
--- a/inc/lang/ku/showrev.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-**This is an old revision of the document!**
-----
diff --git a/inc/lang/la/lang.php b/inc/lang/la/lang.php
index 66cd13967cb493409733202599bff227c0ba28d5..d6b8285257ee42f1102df02d39b948515e6ee919 100644
--- a/inc/lang/la/lang.php
+++ b/inc/lang/la/lang.php
@@ -12,11 +12,11 @@
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
-$lang['doublequoteopening']    = '"';
-$lang['doublequoteclosing']    = '"';
+$lang['doublequoteopening']    = '&quot;';
+$lang['doublequoteclosing']    = '&quot;';
 $lang['singlequoteopening']    = '`';
-$lang['singlequoteclosing']    = '\'';
-$lang['apostrophe']            = '´';
+$lang['singlequoteclosing']    = '´';
+$lang['apostrophe']            = '\'';
 $lang['btn_edit']              = 'Recensere hanc paginam';
 $lang['btn_source']            = 'Fontem uidere';
 $lang['btn_show']              = 'Ostendere paginam';
@@ -40,7 +40,6 @@ $lang['btn_update']            = 'Nouare';
 $lang['btn_delete']            = 'Delere';
 $lang['btn_back']              = 'Redire';
 $lang['btn_backlink']          = 'Nexus ad paginam';
-$lang['btn_backtomedia']       = 'Ad media redire';
 $lang['btn_subscribe']         = 'Custodire';
 $lang['btn_profile']           = 'Tabellam nouare';
 $lang['btn_reset']             = 'Abrogare';
@@ -126,7 +125,6 @@ $lang['js']['del_confirm']     = 'Delere electas res uin?';
 $lang['rssfailed']             = 'Error in restituendo ';
 $lang['nothingfound']          = 'Nihil inuentum est.';
 $lang['mediaselect']           = 'Documenta uisiua:';
-$lang['fileupload']            = 'Documentum uisiuom onerare';
 $lang['uploadsucc']            = 'Oneratum perfectum';
 $lang['uploadfail']            = 'Error onerandi.';
 $lang['uploadwrong']           = 'Onerare non potest. Genus documenti non legitimum!';
@@ -198,7 +196,6 @@ $lang['qb_sig']                = 'Subscriptio tua cum indicatione temporis';
 $lang['qb_smileys']            = 'Pupuli';
 $lang['qb_chars']              = 'Signa singularia';
 $lang['upperns']               = 'I ad anterius genus';
-$lang['admin_register']        = 'Nouom Sodalem creare';
 $lang['metaedit']              = 'Res codicis mutare';
 $lang['metasaveerr']           = 'Res codicis non scribitur.';
 $lang['metasaveok']            = 'Res codicis seruatae.';
diff --git a/inc/lang/lb/lang.php b/inc/lang/lb/lang.php
index 1090878e2b5e11785a758ab7959e2f6eafc6e288..a48ab4e4cf7f455fbaf92eb2999ad83d50d485a3 100644
--- a/inc/lang/lb/lang.php
+++ b/inc/lang/lb/lang.php
@@ -34,7 +34,6 @@ $lang['btn_update']            = 'Update';
 $lang['btn_delete']            = 'Läschen';
 $lang['btn_back']              = 'Zeréck';
 $lang['btn_backlink']          = 'Linker zeréck';
-$lang['btn_backtomedia']       = 'Zeréck bei d\'Auswiel vun de Mediadateien';
 $lang['btn_profile']           = 'Profil aktualiséieren';
 $lang['btn_reset']             = 'Zerécksetzen';
 $lang['btn_draft']             = 'Entworf änneren';
@@ -88,7 +87,6 @@ $lang['js']['notsavedyet']     = 'Net gespäicher Ännerunge gi verluer.\nWierkl
 $lang['rssfailed']             = 'Et ass e Feeler virkomm beim erofluede vun dësem Feed: ';
 $lang['nothingfound']          = 'Näischt fond.';
 $lang['mediaselect']           = 'Mediadateien';
-$lang['fileupload']            = 'Mediadateien eroplueden';
 $lang['uploadsucc']            = 'Upload erfollegräich';
 $lang['uploadfail']            = 'Feeler beim Upload. Vläicht falsch Rechter?';
 $lang['uploadwrong']           = 'Eroplueden net erlaabt. Dës Dateiendung ass verbueden!';
@@ -159,7 +157,6 @@ $lang['qb_sig']                = 'Ënnerschrëft afügen';
 $lang['qb_smileys']            = 'Smilien';
 $lang['qb_chars']              = 'Spezialzeechen';
 $lang['upperns']               = 'An de Namespace uewendriwwer sprangen';
-$lang['admin_register']        = 'Neie Benotzer bäisetzen';
 $lang['metaedit']              = 'Metadaten änneren';
 $lang['metasaveerr']           = 'Feeler beim Schreiwe vun de Metadaten';
 $lang['metasaveok']            = 'Metadate gespäichert';
diff --git a/inc/lang/lt/lang.php b/inc/lang/lt/lang.php
index d53a117f4da945f0ad6742fef11c8973d0d33c5d..a9eb052609993050dbf072c0b8b3023ba9cd1464 100644
--- a/inc/lang/lt/lang.php
+++ b/inc/lang/lt/lang.php
@@ -1,12 +1,13 @@
 <?php
+
 /**
- * lithuanian language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Linas Valiukas <shirshegsm@gmail.com>
  * @author Edmondas Girkantas <eg@zemaitija.net>
  * @author Arūnas Vaitekūnas <aras@fan.lt>
  * @author audrius.klevas@gmail.com
+ * @author Tomas Darius Davainis <tomasdd@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -38,7 +39,6 @@ $lang['btn_update']            = 'Atnaujinti';
 $lang['btn_delete']            = 'IÅ¡trinti';
 $lang['btn_back']              = 'Atgal';
 $lang['btn_backlink']          = 'AtgalinÄ—s nuorodos';
-$lang['btn_backtomedia']       = 'Atgal į Mediabylos išsirinkimą';
 $lang['btn_subscribe']         = 'Užsisakyti keitimų prenumeratą';
 $lang['btn_profile']           = 'Atnaujinti profilį';
 $lang['btn_reset']             = 'Atstata';
@@ -46,6 +46,7 @@ $lang['btn_draft']             = 'Redaguoti juodraštį';
 $lang['btn_recover']           = 'Atkurti juodraštį';
 $lang['btn_draftdel']          = 'Šalinti juodraštį';
 $lang['btn_register']          = 'Registruotis';
+$lang['btn_img_backto']        = 'Atgal į %s';
 $lang['loggedinas']            = 'Prisijungęs kaip:';
 $lang['user']                  = 'Vartotojo vardas';
 $lang['pass']                  = 'Slaptažodis';
@@ -88,12 +89,16 @@ $lang['txt_filename']          = 'Įveskite wikivardą (nebūtina):';
 $lang['txt_overwrt']           = 'Perrašyti egzistuojančią bylą';
 $lang['lockedby']              = 'Užrakintas vartotojo:';
 $lang['lockexpire']            = 'Užraktas bus nuimtas:';
-$lang['js']['willexpire']            = 'Šio puslapio redagavimo užrakto galiojimo laikas baigsis po minutės.\nNorėdami išvengti nesklandumų naudokite peržiūros mygtuką ir užraktas atsinaujins.';
+$lang['js']['willexpire']      = 'Šio puslapio redagavimo užrakto galiojimo laikas baigsis po minutės.\nNorėdami išvengti nesklandumų naudokite peržiūros mygtuką ir užraktas atsinaujins.';
 $lang['js']['notsavedyet']     = 'Pakeitimai nebus išsaugoti.\nTikrai tęsti?';
+$lang['js']['keepopen']        = 'Pažymėjus palikti langą atvertą';
+$lang['js']['hidedetails']     = 'PaslÄ—pti Detales';
+$lang['js']['nosmblinks']      = 'Nurodos į "Windows shares" veikia tik su Microsoft Internet Explorer naršykle.
+Vis dėlto, jūs galite nukopijuoti šią nuorodą.';
+$lang['js']['del_confirm']     = 'Ar tikrai ištrinti pažymėtą(us) įrašą(us)?';
 $lang['rssfailed']             = 'Siunčiant šį feed\'ą įvyko klaida: ';
 $lang['nothingfound']          = 'Paieškos rezultatų nėra.';
 $lang['mediaselect']           = 'Mediabylos išsirinkimas';
-$lang['fileupload']            = 'Mediabylos atsiuntimas';
 $lang['uploadsucc']            = 'Atsiuntimas pavyko';
 $lang['uploadfail']            = 'Atsiuntimas nepavyko. Blogi priÄ—jimo leidimai??';
 $lang['uploadwrong']           = 'Atsiuntimas atmestas. Bylos tipas neleistinas';
@@ -107,10 +112,6 @@ $lang['deletefail']            = 'Byla "%s" negali būti ištrinta - patikrinkit
 $lang['mediainuse']            = 'Byla "%s" nebuvo ištrinta - ji vis dar naudojama.';
 $lang['namespaces']            = 'Pavadinimai';
 $lang['mediafiles']            = 'Prieinamos bylos';
-$lang['js']['keepopen']        = 'Pažymėjus palikti langą atvertą';
-$lang['js']['hidedetails']     = 'PaslÄ—pti Detales';
-$lang['js']['nosmblinks']      = 'Nurodos į "Windows shares" veikia tik su Microsoft Internet Explorer naršykle.
-Vis dėlto, jūs galite nukopijuoti šią nuorodą.';
 $lang['mediausage']            = 'Failo nuorodai užrašyti naudokite tokią sintaksę:';
 $lang['mediaview']             = 'Žiūrėti pirminį failą';
 $lang['mediaroot']             = 'pradžia (root)';
@@ -159,12 +160,9 @@ $lang['qb_media']              = 'PaveikslÄ—liai ir kitos bylos';
 $lang['qb_sig']                = 'Įterpti parašą';
 $lang['qb_smileys']            = 'Å ypsenÄ—lÄ—s';
 $lang['qb_chars']              = 'Specialūs simboliai';
-$lang['js']['del_confirm']           = 'Ar tikrai ištrinti pažymėtą(us) įrašą(us)?';
-$lang['admin_register']        = 'Sukurti naujÄ… vartotojÄ…';
 $lang['metaedit']              = 'Redaguoti metaduomenis';
 $lang['metasaveerr']           = 'Nepavyko išsaugoti metaduomenų';
 $lang['metasaveok']            = 'Metaduomenys išsaugoti';
-$lang['btn_img_backto']            = 'Atgal į %s';
 $lang['img_title']             = 'Pavadinimas:';
 $lang['img_caption']           = 'Antraštė:';
 $lang['img_date']              = 'Data:';
diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php
index ddc97fa8906e91837b16857b131f5dfef979e398..cb7091e50b1e4777cd0d42d233280564b66039b3 100644
--- a/inc/lang/lv/lang.php
+++ b/inc/lang/lv/lang.php
@@ -35,7 +35,6 @@ $lang['btn_update']            = 'Atjaunot';
 $lang['btn_delete']            = 'Dzēst';
 $lang['btn_back']              = 'Atpakaļ';
 $lang['btn_backlink']          = 'Norādes uz lapu';
-$lang['btn_backtomedia']       = 'Atpakaļ uz mēdiju failu izvēli';
 $lang['btn_subscribe']         = 'Abonēt izmaiņu paziņojumus';
 $lang['btn_profile']           = 'Labot savu profilu';
 $lang['btn_reset']             = 'Atsaukt izmaiņas';
@@ -148,7 +147,6 @@ $lang['js']['media_overwrt']   = 'Rakstīt pāri esošajiem failiem';
 $lang['rssfailed']             = 'Kļūda saņemot saturu no ';
 $lang['nothingfound']          = 'Nekas nav atrasts.';
 $lang['mediaselect']           = 'Mēdiju faila izvēle';
-$lang['fileupload']            = 'Mēdiju faila augšupielāde';
 $lang['uploadsucc']            = 'Veiksmīgi ielādēts';
 $lang['uploadfail']            = 'Ielādes kļūme. Varbūt aplamas tiesības?';
 $lang['uploadwrong']           = 'Ielāde aizliegta. Neatļauts faila paplašinājums';
@@ -239,7 +237,6 @@ $lang['qb_sig']                = 'Ievietot parakstu';
 $lang['qb_smileys']            = 'Emotikoni';
 $lang['qb_chars']              = 'Īpašās zīmes';
 $lang['upperns']               = 'vienu nodaļu līmeni augstāk';
-$lang['admin_register']        = 'Pievienot jaunu lietotāju';
 $lang['metaedit']              = 'Labot metadatus';
 $lang['metasaveerr']           = 'Metadati nav saglabāti';
 $lang['metasaveok']            = 'Metadati saglabāti';
@@ -272,7 +269,6 @@ $lang['subscr_style_every']    = 'vēstuli par katru izmaiņu';
 $lang['subscr_style_digest']   = 'kopsavilkumu par katru lapu (reizi %.2f dienās)';
 $lang['subscr_style_list']     = 'kopš pēdējās vēstules notikušo labojumu sarakstu (reizi %.2f dienās)';
 $lang['authtempfail']          = 'Lietotāju autentifikācija pašlaik nedarbojas. Ja tas turpinās ilgstoši, lūduz ziņo Wiki administratoram.';
-$lang['authpwdexpire']         = 'Tavai parolei pēc %d dienām biegsies termiņš, tā drīzumā jānomaina.';
 $lang['i_chooselang']          = 'Izvēlies valodu';
 $lang['i_installer']           = 'DokuWiki instalētājs';
 $lang['i_wikiname']            = 'Wiki vārds';
diff --git a/inc/lang/mg/lang.php b/inc/lang/mg/lang.php
index b6e0cc6e0281a822cefef387e2f5ea2ae7f415fb..5b406ed705093b5b55ee2bdd50a3a343c9b6f9ef 100644
--- a/inc/lang/mg/lang.php
+++ b/inc/lang/mg/lang.php
@@ -27,7 +27,6 @@ $lang['btn_admin']  = 'Admin';
 $lang['btn_update'] = 'Update';
 $lang['btn_delete'] = 'Fafao';
 $lang['btn_back']   = 'Miverina';
-$lang['btn_backtomedia'] = 'Fitsongana fichier Media';
 $lang['btn_register'] = 'Hisoratra';
 
 $lang['loggedinas'] = 'Anaranao:';
@@ -61,7 +60,6 @@ $lang['rssfailed']   = 'An error occured while fetching this feed: ';
 $lang['nothingfound']= 'Tsy nahitana n\'inon\'inona.';
 
 $lang['mediaselect'] = 'Safidy rakitra Media';
-$lang['fileupload']  = 'Fandefasana rakitra Media';
 $lang['uploadsucc']  = 'Voalefa soa aman-tsara';
 $lang['uploadfail']  = 'Tsy lasa ilay izy. Mety tsy fananana alalana?';
 $lang['uploadwrong'] = 'Nolavina ny lefa. Voarara io extension-na rakitra io!';
@@ -116,6 +114,5 @@ $lang['qb_sig']     = 'Manisy sonia';
 
 $lang['js']['del_confirm']= 'Hofafana ilay andalana?';
 
-$lang['admin_register']= 'Ampio mpampiasa vaovao...';
 $lang['searchcreatepage']      = "Raha tsy nahita izay notadiavinao ianao, dia afaka mamorona pejy vaovao avy amin'ny teny nanaovanao fikarohana; Ampiasao ny bokotra ''Hanova ny pejy''.";
 //Setup VIM: ex: et ts=2 :
diff --git a/inc/lang/mk/lang.php b/inc/lang/mk/lang.php
index ddfae15c465c770347b967a06206cab52f267c54..034d98b38f91145f7c61a26cea9f0ed6b871100a 100644
--- a/inc/lang/mk/lang.php
+++ b/inc/lang/mk/lang.php
@@ -14,7 +14,9 @@ $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
 $lang['doublequoteopening']    = '„';
 $lang['doublequoteclosing']    = '“';
-$lang['apostrophe']            = '\'';
+$lang['singlequoteopening']    = '’';
+$lang['singlequoteclosing']    = '‘';
+$lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'Уреди ја страницата';
 $lang['btn_source']            = 'Прикажи ја изворната страница';
 $lang['btn_show']              = 'Прикажи страница';
@@ -38,7 +40,6 @@ $lang['btn_update']            = 'Ажурирај';
 $lang['btn_delete']            = 'Избриши';
 $lang['btn_back']              = 'Назад';
 $lang['btn_backlink']          = 'Повратни врски';
-$lang['btn_backtomedia']       = 'Назад до изборот за медиа-датотека';
 $lang['btn_subscribe']         = 'Менаџирај претплати';
 $lang['btn_profile']           = 'Ажурирај профил';
 $lang['btn_reset']             = 'Ресет';
@@ -95,7 +96,6 @@ $lang['js']['notsavedyet']     = 'Незачуваните промени ќе 
 $lang['rssfailed']             = 'Се појави грешка при повлекувањето на овој канал:';
 $lang['nothingfound']          = 'Ништо не е пронајдено.';
 $lang['mediaselect']           = 'Медиа датотеки';
-$lang['fileupload']            = 'Качување на медиа датотеки';
 $lang['uploadsucc']            = 'Качувањето е успешно';
 $lang['uploadfail']            = 'Качувањето не е успешно. Можеби има погрешни пермисии?';
 $lang['uploadwrong']           = 'Качувањето е одбиено. Наставката на датотеката е забранета!';
@@ -167,7 +167,6 @@ $lang['qb_media']              = 'Додај слики и други датот
 $lang['qb_sig']                = 'Внеси потпис';
 $lang['qb_smileys']            = 'Смајлиња';
 $lang['qb_chars']              = 'Специјални знаци';
-$lang['admin_register']        = 'Додај нов корисник';
 $lang['metaedit']              = 'Уреди мета-податоци';
 $lang['metasaveerr']           = 'Запишување на мета-податоците не успеа';
 $lang['metasaveok']            = 'Мета-податоците се зачувани';
diff --git a/inc/lang/ml/admin.txt b/inc/lang/ml/admin.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0f9c81486b344c9bc394d41b70d8e2a463b85d2b
--- /dev/null
+++ b/inc/lang/ml/admin.txt
@@ -0,0 +1,3 @@
+====== പൊതു സെറ്റിംഗ്സ്  ======
+
+താഴെ കാണുന്ന പട്ടിക ഡോക്കുവിക്കിയിൽ  ഉള്ള പൊതു സെറ്റിംഗ്സ് ആണ് . 
\ No newline at end of file
diff --git a/inc/lang/mr/lang.php b/inc/lang/mr/lang.php
index 7ebb14b9362de03b11e86c11ab405e5b8809da30..62274e12777f6a5579b73cbc519fc40d1896676a 100644
--- a/inc/lang/mr/lang.php
+++ b/inc/lang/mr/lang.php
@@ -42,7 +42,6 @@ $lang['btn_update']            = 'अद्ययावत';
 $lang['btn_delete']            = 'नष्ट';
 $lang['btn_back']              = 'मागॆ';
 $lang['btn_backlink']          = 'येथे काय जोडले आहे';
-$lang['btn_backtomedia']       = 'परत माध्यम फाइल निवडीकड़े';
 $lang['btn_subscribe']         = 'पृष्ठाच्या बदलांची पुरवणी (फीड) लावा ';
 $lang['btn_profile']           = 'प्रोफाइल अद्ययावत करा';
 $lang['btn_reset']             = 'रिसेट';
@@ -140,7 +139,6 @@ $lang['js']['media_cancel']    = 'काढा';
 $lang['rssfailed']             = 'ही पुरवणी आणण्यात काही चूक झाली:';
 $lang['nothingfound']          = 'काही सापडला नाही.';
 $lang['mediaselect']           = 'दृकश्राव्य फाइल';
-$lang['fileupload']            = 'दृकश्राव्य फाइल अपलोड';
 $lang['uploadsucc']            = 'अपलोड यशस्वी';
 $lang['uploadfail']            = 'अपलोड अयशस्वी.कदाचित चुकीच्या परवानग्या असतील ?';
 $lang['uploadwrong']           = 'अपलोड नाकारण्यात आला. हे फाइल एक्सटेंशन अवैध आहे!';
@@ -224,7 +222,6 @@ $lang['qb_sig']                = 'स्वाक्षरी टाका';
 $lang['qb_smileys']            = 'स्माइली';
 $lang['qb_chars']              = 'ख़ास चिन्ह';
 $lang['upperns']               = 'ह्यावरच्या नेमस्पेसकडे उडी मारा';
-$lang['admin_register']        = 'नवीन सदस्य';
 $lang['metaedit']              = 'मेटाडेटा बदला';
 $lang['metasaveerr']           = 'मेटाडेटा सुरक्षित झाला नाही';
 $lang['metasaveok']            = 'मेटाडेटा सुरक्षित झाला';
diff --git a/inc/lang/ms/lang.php b/inc/lang/ms/lang.php
index 303116429a8451e8d109a6ca361dfbc0e7368d99..14cb94ebd061843d25c95bf8a8cb621ec573c840 100644
--- a/inc/lang/ms/lang.php
+++ b/inc/lang/ms/lang.php
@@ -35,7 +35,6 @@ $lang['btn_update']            = 'Kemaskini';
 $lang['btn_delete']            = 'Hapus';
 $lang['btn_back']              = 'Balik';
 $lang['btn_backlink']          = 'Pautan ke halaman ini';
-$lang['btn_backtomedia']       = 'Balik ke rangkaian pilihan fail media';
 $lang['btn_subscribe']         = 'Pantau';
 $lang['btn_profile']           = 'Kemaskinikan profil';
 $lang['btn_reset']             = 'Batalkan suntingan';
@@ -87,7 +86,6 @@ $lang['txt_upload']            = 'Pilih fail untuk diunggah:';
 $lang['txt_filename']          = 'Unggah fail dengan nama (tidak wajib):';
 $lang['txt_overwrt']           = 'Timpa fail sekarang';
 $lang['lockedby']              = 'Halaman ini telah di:';
-$lang['fileupload']            = 'Muat naik fail';
 $lang['uploadsucc']            = 'Pemuatan naik berjaya';
 $lang['uploadfail']            = 'Ralat muat naik';
 $lang['uploadxss']             = 'Fail ini mengandungi kod HTML atau kod skrip yang mungkin boleh disalah tafsir oleh pelayar web.';
diff --git a/inc/lang/ne/adminplugins.txt b/inc/lang/ne/adminplugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..93eff63fb7f1a6b39c8970519fe0c86a56a9bf49
--- /dev/null
+++ b/inc/lang/ne/adminplugins.txt
@@ -0,0 +1 @@
+===== थप प्लगिनहरू =====
\ No newline at end of file
diff --git a/inc/lang/ne/lang.php b/inc/lang/ne/lang.php
index d4efc89bdfa805666a21e8283a8d45270e632c29..46074d020cc293454b9483b935a36d459a81ccca 100644
--- a/inc/lang/ne/lang.php
+++ b/inc/lang/ne/lang.php
@@ -2,9 +2,10 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ * 
  * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
  * @author Saroj Kumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author सरोज ढकाल <lotusnagarkot@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -36,14 +37,20 @@ $lang['btn_update']            = 'अध्यावधिक गर्नुह
 $lang['btn_delete']            = 'मेटाउनुहोस् ';
 $lang['btn_back']              = 'पछाडि';
 $lang['btn_backlink']          = 'पछाडिका लिङ्कहरु ';
-$lang['btn_backtomedia']       = 'मिडिया छनौटमा फर्कनुहोस्';
 $lang['btn_subscribe']         = 'पृष्ठ परिवर्तन ग्राह्य गर्नुहोस्';
 $lang['btn_profile']           = 'प्रोफाइल अध्यावधिक गर्नुहोस् ';
 $lang['btn_reset']             = 'पूर्वरुपमा फर्काउनुहोस';
+$lang['btn_resendpwd']         = 'नयाँ पासवर्ड राख्नुहोस';
 $lang['btn_draft']             = ' ड्राफ्ट सम्पादन गर्नुहोस् ';
 $lang['btn_recover']           = 'पहिलेको ड्राफ्ट हासिल गर्नुहोस ';
 $lang['btn_draftdel']          = ' ड्राफ्ट मेटाउनुहोस् ';
+$lang['btn_revert']            = 'पूर्वरूपमा फर्काउने';
 $lang['btn_register']          = 'दर्ता  गर्नुहोस्';
+$lang['btn_apply']             = 'लागु गर्ने';
+$lang['btn_media']             = 'मेडिया व्यवस्थापक';
+$lang['btn_deleteuser']        = 'खाता हटाउने';
+$lang['btn_img_backto']        = 'फिर्ता%s';
+$lang['btn_mediaManager']      = 'मेडिया व्यवस्थापकमा हेर्ने';
 $lang['loggedinas']            = 'प्रवेश गर्नुहोस् :';
 $lang['user']                  = 'प्रयोगकर्ता ';
 $lang['pass']                  = 'प्रवेशशव्द';
@@ -55,6 +62,7 @@ $lang['fullname']              = 'पूरा नाम';
 $lang['email']                 = 'इमेल';
 $lang['profile']               = 'प्रयोगकर्ताको प्रोफाइल';
 $lang['badlogin']              = 'माफ गर्नुहोस् , प्रयोगकर्तानाम वा प्रवेशशव्द गलत भयो  ';
+$lang['badpassconfirm']        = 'माफ गर्नुहोस् , पासवर्ड गलत छ ';
 $lang['minoredit']             = 'सामान्य परिवर्तन';
 $lang['draftdate']             = 'ड्राफ्ट स्वचालित रुपमा वचत भएको';
 $lang['nosecedit']             = 'यो पृष्ठ यसै बखतमा परिवर्तन भयो, खण्ड जानकारी अध्यावधिक हुन सकेन र पूरै पृष्ठ लोड भयो । ';
@@ -72,6 +80,8 @@ $lang['profna']                = 'यो विकिले यो प्रो
 $lang['profnochange']          = 'केहि  परिवर्तन छैन , केहि गर्नु छैन ।';
 $lang['profnoempty']           = 'खाली नाम वा इमेल ठेगानालाई अनुमति छैन ।';
 $lang['profchanged']           = 'प्रयोगकर्ताको प्रफाइल सफलरुपमा परिवर्तन भयो ।';
+$lang['profnodelete']          = 'यो विकिले प्रयोगकर्ताहरू हटाउन समर्थन गर्दैन';
+$lang['profdeleteuser']        = 'खाता मेट्नुहोस';
 $lang['pwdforget']             = 'आफ्नो पासवर्ड भुल्नु भयो ? नयाँ हासिल गर्नुहोस् ';
 $lang['resendna']              = 'यो विकिबाट प्रवेशशव्द पठाउन समर्थित छैन ।';
 $lang['resendpwd']             = 'नयाँ  प्रवेशशव्द पठाउनुहोस् ';
@@ -90,12 +100,12 @@ $lang['js']['willexpire']      = 'तपाईलले यो पृष्ठ 
 $lang['js']['notsavedyet']     = 'तपाईले वचन गर्नु नभएको परिवर्रन हराउने छ। \n साच्चै जारी गर्नुहुन्छ ।';
 $lang['js']['keepopen']        = 'छनौटमा विन्डो खुला राख्नुहोस् ';
 $lang['js']['hidedetails']     = 'जानकारी लुकाउनु होस् ';
+$lang['js']['mediaclose']      = 'बन्द गर्ने';
 $lang['js']['nosmblinks']      = 'विन्डोहरु लिङ्क गर्दा माइक्रो सफ्ट एक्सप्लोररमामात्र  काम साझा हुन्छ । तर कपि गर्न र टास्न मिल्छ।   ';
 $lang['js']['del_confirm']     = 'साच्चै छानिएका वस्तुहरु मेट्ने हो ?';
 $lang['rssfailed']             = 'यो फिड लिइ आउदा गल्ति भयो ।';
 $lang['nothingfound']          = 'केहि पनि भेटिएन ।';
 $lang['mediaselect']           = 'मिडिया फाइलहरू ';
-$lang['fileupload']            = 'मिडिया फाइल अपलोड ';
 $lang['uploadsucc']            = 'अपलोड सफल ';
 $lang['uploadfail']            = 'अपलोड असफल । सायद गलत अनुमति । ';
 $lang['uploadwrong']           = 'अपलोड असमर्थित । फाइल एक्सटेन्सन अमान्य।  ';
@@ -155,11 +165,9 @@ $lang['qb_media']              = 'तस्विर र अरु फाइल
 $lang['qb_sig']                = 'हस्ताक्षर थप्नुहोस् ';
 $lang['qb_smileys']            = 'स्माइलीहरु ';
 $lang['qb_chars']              = 'विशेष वर्णहरु ';
-$lang['admin_register']        = 'नयाँ प्रयोगकर्ता थप्नुहोस् ';
 $lang['metaedit']              = 'मेटाडेटा सम्पादन गर्नुहोस्';
 $lang['metasaveerr']           = 'मेटाडाटा लेखन असफल';
 $lang['metasaveok']            = 'मेटाडाटा वचत भयो ';
-$lang['btn_img_backto']            = 'फिर्ता%s';
 $lang['img_title']             = 'शिर्षक:';
 $lang['img_caption']           = 'निम्न लेख:';
 $lang['img_date']              = 'मिति:';
diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php
index 4c668557d550c5f8700b5ff82a4eefbde9165239..c085521f2e33a0da71aa35b8f908eb0057795c26 100644
--- a/inc/lang/nl/lang.php
+++ b/inc/lang/nl/lang.php
@@ -25,6 +25,11 @@
  * @author Rene <wllywlnt@yahoo.com>
  * @author Johan Vervloet <johan.vervloet@gmail.com>
  * @author Mijndert <mijndert@mijndertstuij.nl>
+ * @author Johan Wijnker <johan@wijnker.eu>
+ * @author Hugo Smet <hugo.smet@scarlet.be>
+ * @author Mark C. Prins <mprins@users.sf.net>
+ * @author hugo smet <hugo.smet@scarlet.be>
+ * @author Wesley de Weerd <wesleytiel@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -56,7 +61,6 @@ $lang['btn_update']            = 'Bijwerken';
 $lang['btn_delete']            = 'Verwijder';
 $lang['btn_back']              = 'Terug';
 $lang['btn_backlink']          = 'Referenties';
-$lang['btn_backtomedia']       = 'Terug naar Bestandsselectie';
 $lang['btn_subscribe']         = 'Inschrijven wijzigingen';
 $lang['btn_profile']           = 'Profiel aanpassen';
 $lang['btn_reset']             = 'Wissen';
@@ -91,6 +95,7 @@ $lang['regmissing']            = 'Vul alle velden in';
 $lang['reguexists']            = 'Er bestaat al een gebruiker met deze loginnaam.';
 $lang['regsuccess']            = 'De gebruiker is aangemaakt. Het wachtwoord is per e-mail verzonden.';
 $lang['regsuccess2']           = 'De gebruiker is aangemaakt.';
+$lang['regfail']               = 'Gebruiker kon niet aangemaakt worden.';
 $lang['regmailfail']           = 'Het lijkt erop dat het sturen van de wachtwoordmail mislukt is. Neem contact op met de beheerder!';
 $lang['regbadmail']            = 'Het opgegeven e-mailadres lijkt ongeldig - als je denkt dat dit niet klopt neem dan contact op met de beheerder.';
 $lang['regbadpass']            = 'De twee ingevoerde wachtwoorden zijn niet identiek. Probeer het nog eens.';
@@ -105,6 +110,7 @@ $lang['profdeleteuser']        = 'Verwijder gebruiker';
 $lang['profdeleted']           = 'Uw gebruikersaccount is verwijderd van deze wiki';
 $lang['profconfdelete']        = 'Ik wil mijn gebruikersaccount verwijderen van deze wiki. <br/> Deze actie kan niet ongedaan gemaakt worden.';
 $lang['profconfdeletemissing'] = 'Bevestigingsvinkje niet gezet';
+$lang['proffail']              = 'Gebruikersprofiel werd niet bijgewerkt.';
 $lang['pwdforget']             = 'Je wachtwoord vergeten? Vraag een nieuw wachtwoord aan';
 $lang['resendna']              = 'Deze wiki ondersteunt het verzenden van wachtwoorden niet';
 $lang['resendpwd']             = 'Nieuw wachtwoord bepalen voor';
@@ -169,7 +175,6 @@ $lang['js']['media_overwrt']   = 'Bestaande bestanden overschrijven';
 $lang['rssfailed']             = 'Er is een fout opgetreden bij het ophalen van de feed: ';
 $lang['nothingfound']          = 'Er werd niets gevonden.';
 $lang['mediaselect']           = 'Bestandsselectie';
-$lang['fileupload']            = 'Bestandsupload';
 $lang['uploadsucc']            = 'Upload geslaagd';
 $lang['uploadfail']            = 'Upload mislukt. Misschien verkeerde permissies?';
 $lang['uploadwrong']           = 'Upload mislukt. Deze bestandsextensie is verboden!';
@@ -260,7 +265,6 @@ $lang['qb_sig']                = 'Handtekening invoegen';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Speciale tekens';
 $lang['upperns']               = 'Spring naar bovenliggende namespace';
-$lang['admin_register']        = 'Nieuwe gebruiker toevoegen';
 $lang['metaedit']              = 'Metadata wijzigen';
 $lang['metasaveerr']           = 'Schrijven van metadata mislukt';
 $lang['metasaveok']            = 'Metadata bewaard';
@@ -293,7 +297,6 @@ $lang['subscr_style_every']    = 'Email bij iedere wijziging';
 $lang['subscr_style_digest']   = 'Samenvattings-email met wijzigingen per pagina (elke %.2f dagen)';
 $lang['subscr_style_list']     = 'Lijst van veranderde pagina\'s sinds laatste email (elke %.2f dagen)';
 $lang['authtempfail']          = 'Gebruikersauthenticatie is tijdelijk niet beschikbaar. Als deze situatie zich blijft voordoen, informeer dan de wikibeheerder.';
-$lang['authpwdexpire']         = 'Je wachtwoord verloopt in %d dagen, je moet het binnenkort veranderen';
 $lang['i_chooselang']          = 'Kies je taal';
 $lang['i_installer']           = 'DokuWiki Installer';
 $lang['i_wikiname']            = 'Wikinaam';
@@ -353,7 +356,10 @@ $lang['media_perm_read']       = 'Sorry, u heeft niet voldoende rechten om besta
 $lang['media_perm_upload']     = 'Sorry, u heeft niet voldoende rechten om bestanden te uploaden.';
 $lang['media_update']          = 'Upload nieuwe versie';
 $lang['media_restore']         = 'Deze versie terugzetten';
+$lang['media_acl_warning']     = 'De lijst is mogelijk niet compleet door ACL beperkingen en verborgen pagina\'s.';
 $lang['currentns']             = 'Huidige namespace';
 $lang['searchresult']          = 'Zoekresultaat';
 $lang['plainhtml']             = 'Alleen HTML';
 $lang['wikimarkup']            = 'Wiki Opmaak';
+$lang['page_nonexist_rev']     = 'Pagina bestaat niet bij %s. Het is vervolgens aangemaakt bij <a href="%s">%s</a>.';
+$lang['unable_to_parse_date']  = 'Begrijp het niet bij parameter "%s".';
diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php
index ecf10ff5bcc33c21900dfa2b6af269c992ce4b07..9388a0a70e48dfee48cf2c52ee0c5cdf7f8dae0e 100644
--- a/inc/lang/no/lang.php
+++ b/inc/lang/no/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Reidar Mosvold <Reidar.Mosvold@hit.no>
  * @author Jorge Barrera Grandon <jorge@digitalwolves.org>
  * @author Rune Rasmussen [http://www.syntaxerror.no/]
@@ -22,6 +22,7 @@
  * @author Boris <boris@newton-media.no>
  * @author Christopher Schive <chschive@frisurf.no>
  * @author Patrick <spill.p@hotmail.com>
+ * @author Danny Buckhof <daniel.raknes@hotmail.no>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -29,7 +30,7 @@ $lang['doublequoteopening']    = '«';
 $lang['doublequoteclosing']    = '»';
 $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
-$lang['apostrophe']            = '\'';
+$lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'Rediger denne siden';
 $lang['btn_source']            = 'Vis kildekode';
 $lang['btn_show']              = 'Vis siden';
@@ -53,7 +54,6 @@ $lang['btn_update']            = 'Oppdater';
 $lang['btn_delete']            = 'Slett';
 $lang['btn_back']              = 'Tilbake';
 $lang['btn_backlink']          = 'Tilbakelenker';
-$lang['btn_backtomedia']       = 'Tilbake til valg av mediafil';
 $lang['btn_subscribe']         = 'Abonnér på endringer';
 $lang['btn_profile']           = 'Oppdater profil';
 $lang['btn_reset']             = 'Tilbakestill';
@@ -88,6 +88,7 @@ $lang['regmissing']            = 'Vennligst fyll ut alle felt.';
 $lang['reguexists']            = 'Det finnes allerede en konto med dette brukernavnet.';
 $lang['regsuccess']            = 'Brukerkonto har blitt laget og passord har blitt sendt via e-post.';
 $lang['regsuccess2']           = 'Brukeren har blitt laget.';
+$lang['regfail']               = 'Brukeren kan ikke opprettes';
 $lang['regmailfail']           = 'En feil oppstod da passordet ditt skulle sendes via e-post. Vennligst kontakt administratoren!';
 $lang['regbadmail']            = 'Den angitte e-post adressen ser ut til å være ugyldig. Vennligst kontakt administratoren om du anser dette som feilaktig.';
 $lang['regbadpass']            = 'De to angitte passordene er ikke like, vennligst forsøk igjen.';
@@ -102,6 +103,7 @@ $lang['profdeleteuser']        = 'Slett konto';
 $lang['profdeleted']           = 'Din brukerkonto har blitt slettet fra denne wikien';
 $lang['profconfdelete']        = 'Jeg ønsker å fjerne min konto fra denne wikien. <br/> Denne handlingen kan ikke omgjøres.';
 $lang['profconfdeletemissing'] = 'Boks for bekreftelse ikke avkrysset';
+$lang['proffail']              = 'Brukerprofilen ble ikke oppdatert';
 $lang['pwdforget']             = 'Glemt passordet ditt? FÃ¥ deg et nytt';
 $lang['resendna']              = 'Denne wikien støtter ikke nyutsending av passord.';
 $lang['resendpwd']             = 'Sett nytt passord for';
@@ -166,7 +168,6 @@ $lang['js']['media_overwrt']   = 'Erstatt eksisterende filer';
 $lang['rssfailed']             = 'En feil oppstod da denne kilden skulle hentes:';
 $lang['nothingfound']          = 'Ingen data funnet.';
 $lang['mediaselect']           = 'Valg av mediafil';
-$lang['fileupload']            = 'Mediafil Opplasting';
 $lang['uploadsucc']            = 'Opplastingen var vellykket';
 $lang['uploadfail']            = 'Opplastingen var mislykket. Kanskje feil rettigheter?';
 $lang['uploadwrong']           = 'Opplastingen ble nektet. Denne filendelsen er ikke tillatt!';
@@ -257,7 +258,6 @@ $lang['qb_sig']                = 'Føy til signatur';
 $lang['qb_smileys']            = 'Smilefjes';
 $lang['qb_chars']              = 'Spesialtegn';
 $lang['upperns']               = 'gå til overordnet navnerom';
-$lang['admin_register']        = 'Legg til ny bruker';
 $lang['metaedit']              = 'Rediger metadata';
 $lang['metasaveerr']           = 'Skriving av metadata feilet';
 $lang['metasaveok']            = 'Metadata lagret';
@@ -290,7 +290,6 @@ $lang['subscr_style_every']    = 'e-post for alle endringer';
 $lang['subscr_style_digest']   = 'e-post med sammendrag av endringer for hver side (%.2f dager mellom hver)';
 $lang['subscr_style_list']     = 'liste med sider som er endra siden forrige e-post (%.2f dager mellom hver)';
 $lang['authtempfail']          = 'Brukerautorisasjon er midlertidig utilgjengelig. Om dette vedvarer, vennligst informer Wiki-admin.';
-$lang['authpwdexpire']         = 'Ditt passord går ut om %d dager, du bør endre det snarest.';
 $lang['i_chooselang']          = 'Velg språk';
 $lang['i_installer']           = 'DokuWiki-installasjon';
 $lang['i_wikiname']            = 'Wikinavn';
@@ -302,6 +301,7 @@ $lang['i_modified']            = 'For sikkerhets skyld vil dette skriptet bare v
                          <a href="http://dokuwiki.org/install">Dokuwiki-installasjonsinstruksen</a>';
 $lang['i_funcna']              = 'PHP-funksjonen <code>%s</code> er ikke tilgjengelig. Kanskje din leverandør har deaktivert den av noen grunn?';
 $lang['i_phpver']              = 'Din PHP versjon <code>%s</code> er lavere enn kravet <code>%s</code>. Du må oppgradere PHP installasjonen. ';
+$lang['i_mbfuncoverload']      = 'mbstring.func_overload må deaktiveres i php.ini for å kjøre DokuWiki.';
 $lang['i_permfail']            = '<code>%s</code> er ikke skrivbar for DokuWiki. Du må fikse rettighetene for denne mappen!';
 $lang['i_confexists']          = '<code>%s</code> eksisterer allerede';
 $lang['i_writeerr']            = 'Kunne ikke opprette <code>%s</code>. Du må sjekke mappe-/filrettigheter og opprette filen manuelt.';
@@ -347,7 +347,7 @@ $lang['media_search']          = 'Søk i navnerommet <strong>%s</strong>.';
 $lang['media_view']            = '%s';
 $lang['media_viewold']         = '%s på %s';
 $lang['media_edit']            = 'Rediger %s';
-$lang['media_history']         = '%vis historikk';
+$lang['media_history']         = '%s vis historikk';
 $lang['media_meta_edited']     = 'metadata er endra';
 $lang['media_perm_read']       = 'Beklager, du har ikke tilgang til å lese filer.';
 $lang['media_perm_upload']     = 'Beklager, du har ikke tilgang til å laste opp filer.';
@@ -358,3 +358,4 @@ $lang['searchresult']          = 'Søk i resultat';
 $lang['plainhtml']             = 'Enkel HTML';
 $lang['wikimarkup']            = 'wiki-format';
 $lang['page_nonexist_rev']     = 'Finnes ingen side på %s. Den er derfor laget på <a href="%s">%s</a>';
+$lang['unable_to_parse_date']  = 'Ikke mulig å tolke "%s".';
diff --git a/inc/lang/pl/lang.php b/inc/lang/pl/lang.php
index fa70db06ce3bacb6e3492482d8507f857e1d65a8..ae307b4fd707db2fe1d2909fc39f6e38f80d9bd1 100644
--- a/inc/lang/pl/lang.php
+++ b/inc/lang/pl/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Grzegorz Żur <grzegorz.zur@gmail.com>
  * @author Mariusz Kujawski <marinespl@gmail.com>
  * @author Maciej Kurczewski <pipijajko@gmail.com>
@@ -25,7 +25,7 @@ $lang['doublequoteopening']    = '„';
 $lang['doublequoteclosing']    = '”';
 $lang['singlequoteopening']    = '‚';
 $lang['singlequoteclosing']    = '’';
-$lang['apostrophe']            = '\'';
+$lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'Edytuj stronÄ™';
 $lang['btn_source']            = 'Pokaż źródło strony';
 $lang['btn_show']              = 'Pokaż stronę';
@@ -49,7 +49,6 @@ $lang['btn_update']            = 'Aktualizuj';
 $lang['btn_delete']            = 'Usuń';
 $lang['btn_back']              = 'Wstecz';
 $lang['btn_backlink']          = 'Odnośniki';
-$lang['btn_backtomedia']       = 'Powrót do wyboru pliku';
 $lang['btn_subscribe']         = 'Subskrybuj zmiany';
 $lang['btn_profile']           = 'Aktualizuj profil';
 $lang['btn_reset']             = 'Resetuj';
@@ -162,7 +161,6 @@ $lang['js']['media_overwrt']   = 'Nadpisz istniejÄ…ce pliki';
 $lang['rssfailed']             = 'Wystąpił błąd przy pobieraniu tych danych: ';
 $lang['nothingfound']          = 'Nic nie znaleziono.';
 $lang['mediaselect']           = 'Wysyłanie pliku';
-$lang['fileupload']            = 'Wysyłanie pliku';
 $lang['uploadsucc']            = 'Wysyłanie powiodło się!';
 $lang['uploadfail']            = 'Błąd wysyłania pliku. Czy prawa do katalogów są poprawne?';
 $lang['uploadwrong']           = 'Wysyłanie zabronione. Nie można wysłać plików z takim rozszerzeniem';
@@ -251,7 +249,6 @@ $lang['qb_sig']                = 'Wstaw podpis';
 $lang['qb_smileys']            = 'Emotikony';
 $lang['qb_chars']              = 'Znaki specjalne';
 $lang['upperns']               = 'Skok piętro wyżej';
-$lang['admin_register']        = 'Dodawanie użytkownika';
 $lang['metaedit']              = 'Edytuj metadane';
 $lang['metasaveerr']           = 'Zapis metadanych nie powiódł się';
 $lang['metasaveok']            = 'Metadane zapisano';
@@ -284,7 +281,6 @@ $lang['subscr_style_every']    = 'email przy każdej zmianie';
 $lang['subscr_style_digest']   = 'e-mailowy wyciąg zmian dla każdej strony (co %.2f dni)';
 $lang['subscr_style_list']     = 'lista zmienionych stron od ostatniego e-maila (co %.2f dni)';
 $lang['authtempfail']          = 'Uwierzytelnienie użytkownika jest w tej chwili niemożliwe. Jeśli ta sytuacja się powtórzy, powiadom administratora tego wiki.';
-$lang['authpwdexpire']         = 'Twoje hasło wygaśnie za %d dni. Należy je zmienić w krótkim czasie.';
 $lang['i_chooselang']          = 'Wybierz język';
 $lang['i_installer']           = 'Instalator DokuWiki';
 $lang['i_wikiname']            = 'Nazwa Wiki';
diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php
index be62af6fee24015ebb909d90b7f3a906d389be91..aa0ce925ba33591d3d625d4959220ee5944594a9 100644
--- a/inc/lang/pt-br/lang.php
+++ b/inc/lang/pt-br/lang.php
@@ -24,6 +24,8 @@
  * @author Dário Estevão <darioems@gmail.com>
  * @author Juliano Marconi Lanigra <juliano.marconi@gmail.com>
  * @author Ednei <leuloch@gmail.com>
+ * @author Hudson FAS <hudsonfas@gmail.com>
+ * @author Guilherme Cardoso <guicardoso@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -55,7 +57,6 @@ $lang['btn_update']            = 'Atualizar';
 $lang['btn_delete']            = 'Excluir';
 $lang['btn_back']              = 'Voltar';
 $lang['btn_backlink']          = 'Links reversos';
-$lang['btn_backtomedia']       = 'Voltar à seleção do arquivo de mídia';
 $lang['btn_subscribe']         = 'Monitorar alterações';
 $lang['btn_profile']           = 'Atualizar o perfil';
 $lang['btn_reset']             = 'Limpar';
@@ -90,6 +91,7 @@ $lang['regmissing']            = 'Desculpe, mas você precisa preencher todos os
 $lang['reguexists']            = 'Desculpe, mas já existe um usuário com esse nome.';
 $lang['regsuccess']            = 'O usuário foi criado e a senha enviada para seu e-mail.';
 $lang['regsuccess2']           = 'O usuário foi criado.';
+$lang['regfail']               = 'Não foi possível criar esse usuário.';
 $lang['regmailfail']           = 'Aparentemente ocorreu um erro no envio da senha. Por favor, entre em contato com o administrador!';
 $lang['regbadmail']            = 'O endereço de e-mail fornecido é, aparentemente, inválido - se você acha que isso é um erro, entre em contato com o administrador';
 $lang['regbadpass']            = 'As senhas digitadas não são idênticas. Por favor, tente novamente.';
@@ -104,6 +106,7 @@ $lang['profdeleteuser']        = 'Excluir a conta';
 $lang['profdeleted']           = 'Sua conta de usuário foi excluída desse wiki';
 $lang['profconfdelete']        = 'Eu desejo remover minha conta dessa wiki. <br/> Essa ação não pode ser desfeita.';
 $lang['profconfdeletemissing'] = 'Caixa de confirmação não marcada';
+$lang['proffail']              = 'O perfil do usuário não foi atualizado.';
 $lang['pwdforget']             = 'Esqueceu sua senha? Solicite outra';
 $lang['resendna']              = 'Esse wiki não tem suporte para o reenvio de senhas.';
 $lang['resendpwd']             = 'Definir a nova senha para';
@@ -168,7 +171,6 @@ $lang['js']['media_overwrt']   = 'Sobrescrever arquivos existentes';
 $lang['rssfailed']             = 'Ocorreu um erro durante a atualização dessa fonte: ';
 $lang['nothingfound']          = 'Não foi encontrado nada.';
 $lang['mediaselect']           = 'Arquivos de mídia';
-$lang['fileupload']            = 'Envio de arquivo de mídia';
 $lang['uploadsucc']            = 'O envio foi efetuado com sucesso';
 $lang['uploadfail']            = 'Não foi possível enviar o arquivo. Será algum problema com as permissões?';
 $lang['uploadwrong']           = 'O envio foi bloqueado. Essa extensão de arquivo é proibida!';
@@ -259,7 +261,6 @@ $lang['qb_sig']                = 'Inserir assinatura';
 $lang['qb_smileys']            = 'Carinhas';
 $lang['qb_chars']              = 'Caracteres especiais';
 $lang['upperns']               = 'Pular para espaço de nomes acima';
-$lang['admin_register']        = 'Adicionar novo usuário';
 $lang['metaedit']              = 'Editar metadados';
 $lang['metasaveerr']           = 'Não foi possível escrever os metadados';
 $lang['metasaveok']            = 'Os metadados foram salvos';
@@ -292,7 +293,6 @@ $lang['subscr_style_every']    = 'um e-mail a cada modificação';
 $lang['subscr_style_digest']   = 'um agrupamento de e-mails com as mudanças para cada página (a cada %.2f dias)';
 $lang['subscr_style_list']     = 'uma lista de páginas modificadas desde o último e-mail (a cada %.2f dias)';
 $lang['authtempfail']          = 'A autenticação de usuários está temporariamente desabilitada. Se essa situação persistir, por favor, informe ao administrador do Wiki.';
-$lang['authpwdexpire']         = 'Sua senha vai expirar em %d dias. Você deve mudá-la assim que for possível.';
 $lang['i_chooselang']          = 'Selecione o seu idioma';
 $lang['i_installer']           = 'Instalador do DokuWiki';
 $lang['i_wikiname']            = 'Nome do Wiki';
@@ -353,7 +353,10 @@ $lang['media_perm_read']       = 'Desculpe, mas você não tem privilégios sufi
 $lang['media_perm_upload']     = 'Desculpe, mas você não tem privilégios suficientes para enviar arquivos.';
 $lang['media_update']          = 'Enviar uma nova versão';
 $lang['media_restore']         = 'Restaurar esta versão';
+$lang['media_acl_warning']     = 'Essa lista pode não estar completa devido a restrições de ACL e páginas ocultas.';
 $lang['currentns']             = 'Domínio atual';
 $lang['searchresult']          = 'Resultado da Busca';
 $lang['plainhtml']             = 'HTML simples';
 $lang['wikimarkup']            = 'Marcação wiki';
+$lang['page_nonexist_rev']     = 'Página não encontrada em %s. Foi criada posteriormente em <a href="%s">%s</a>.';
+$lang['unable_to_parse_date']  = 'Impossível analisar em "%s".';
diff --git a/inc/lang/pt/admin.txt b/inc/lang/pt/admin.txt
index 366792a9b3ad84c76d7cfc8f42c0fdfa687054be..5b103b38d447029e1eaa5a922cfbe16015911b69 100644
--- a/inc/lang/pt/admin.txt
+++ b/inc/lang/pt/admin.txt
@@ -1,3 +1,3 @@
 ====== Administração ======
 
-Abaixo pode encontrar uma lista de tarefas de administrativas permitidas pelo DokuWiki.
\ No newline at end of file
+Abaixo pode encontrar uma lista de tarefas de administrativas disponíveis na DokuWiki.
\ No newline at end of file
diff --git a/inc/lang/pt/adminplugins.txt b/inc/lang/pt/adminplugins.txt
index 3eac7af537c4093a06d869f5cfec2b503d37cb54..259f5ce454318ee2ff716e7c49f584896dd71dda 100644
--- a/inc/lang/pt/adminplugins.txt
+++ b/inc/lang/pt/adminplugins.txt
@@ -1 +1 @@
-===== Plugins Adicionais =====
\ No newline at end of file
+===== Extras Adicionais =====
\ No newline at end of file
diff --git a/inc/lang/pt/backlinks.txt b/inc/lang/pt/backlinks.txt
index e78ddf8748f329ba729fde6c96d5427e86a2d1ac..4eb82cb2664d87b95af3592de9664ad3727aa107 100644
--- a/inc/lang/pt/backlinks.txt
+++ b/inc/lang/pt/backlinks.txt
@@ -1,4 +1,4 @@
 ====== Backlinks ======
 
-Esta é uma lista de todos os documentos que apresentam ligações ao documento corrente.
+Esta é uma lista de páginas que parece que interliga para a página atual.
 
diff --git a/inc/lang/pt/conflict.txt b/inc/lang/pt/conflict.txt
index b6d7319b0327cf39e5ab2faafa1a23c081671231..49575fdb8fbe5507274bc22f4af86f0c695cfb3d 100644
--- a/inc/lang/pt/conflict.txt
+++ b/inc/lang/pt/conflict.txt
@@ -1,5 +1,5 @@
-====== Uma versão mais recente existe ======
+====== Existe uma versão mais recente ======
 
-Existe uma versão mais recente do documento editado. Isso acontece quando um outro usuário alterou o documento enquanto você estava editando.
+Existe uma versão mais recente do documento editado. Isto acontece quando um outro utilizador alterou o documento enquanto o estava a editar.
 
-Examine cuidadosamente as diferenças mostradas abaixo, em seguida, decida qual versão manter. Se você escolher ''salvar '', sua versão será salva. Clique ''cancelar '' para manter a versão atual.
+Analise cuidadosamente as diferenças mostradas abaixo, depois decida qual a versão a manter. Se escolher 'guardar'', a sua versão será guardada. Clique em ''cancelar '' para manter a versão atual.
diff --git a/inc/lang/pt/denied.txt b/inc/lang/pt/denied.txt
index 84c3a94063d3d916a4b2564ec1b45af94fa9d58f..f4e8e01149197235a4f410a20c496317031ef1ab 100644
--- a/inc/lang/pt/denied.txt
+++ b/inc/lang/pt/denied.txt
@@ -1,4 +1,4 @@
 ====== Permissão Negada ======
 
-Desculpe, você não possui direitos e permissões suficientes para continuar.
+Desculpe, não tem direitos suficientes para continuar.
 
diff --git a/inc/lang/pt/diff.txt b/inc/lang/pt/diff.txt
index e27640aa8c56f3e30ee22c7099b2cd0c7671143b..b73326268efe6c41072b44bb3e176ea0967dbd95 100644
--- a/inc/lang/pt/diff.txt
+++ b/inc/lang/pt/diff.txt
@@ -1,5 +1,3 @@
 ====== Diferenças ======
 
-Esta página mostra as diferenças entre a revisão do documento que escolheu e a versão actual.
-
-----
+Esta página mostra as diferenças entre as duas revisões da página.
\ No newline at end of file
diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php
index 5d462e198a9b2287707d6684c1c55bbf611e9d62..4f111ee3f59ec45d86075122f1b1a9d02d39a831 100644
--- a/inc/lang/pt/lang.php
+++ b/inc/lang/pt/lang.php
@@ -12,6 +12,9 @@
  * @author Murilo <muriloricci@hotmail.com>
  * @author Paulo Silva <paulotsilva@yahoo.com>
  * @author Guido Salatino <guidorafael23@gmail.com>
+ * @author Romulo Pereira <romuloccomp@gmail.com>
+ * @author Paulo Carmino <contato@paulocarmino.com>
+ * @author Alfredo Silva <alfredo.silva@sky.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -20,30 +23,29 @@ $lang['doublequoteclosing']    = '”';
 $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
 $lang['apostrophe']            = '’';
-$lang['btn_edit']              = 'Editar página';
-$lang['btn_source']            = 'Ver fonte';
-$lang['btn_show']              = 'Ver página';
-$lang['btn_create']            = 'Criar página';
+$lang['btn_edit']              = 'Editar esta página';
+$lang['btn_source']            = 'Mostrar página fonte ';
+$lang['btn_show']              = 'Mostrar página';
+$lang['btn_create']            = 'Criar esta página';
 $lang['btn_search']            = 'Pesquisar';
-$lang['btn_save']              = 'Salvar';
-$lang['btn_preview']           = 'Prever';
+$lang['btn_save']              = 'Guardar';
+$lang['btn_preview']           = 'Pré-visualizar';
 $lang['btn_top']               = 'Voltar ao topo';
 $lang['btn_newer']             = '<< mais recente';
 $lang['btn_older']             = 'menos recente >>';
 $lang['btn_revs']              = 'Revisões antigas';
-$lang['btn_recent']            = 'Alt. Recentes';
-$lang['btn_upload']            = 'Carregar';
+$lang['btn_recent']            = 'Alterações Recentes';
+$lang['btn_upload']            = 'Enviar';
 $lang['btn_cancel']            = 'Cancelar';
 $lang['btn_index']             = 'Índice';
 $lang['btn_secedit']           = 'Editar';
-$lang['btn_login']             = 'Entrar';
-$lang['btn_logout']            = 'Sair';
+$lang['btn_login']             = 'Iniciar sessão';
+$lang['btn_logout']            = 'Terminar sessão';
 $lang['btn_admin']             = 'Administrar';
 $lang['btn_update']            = 'Actualizar';
 $lang['btn_delete']            = 'Apagar';
 $lang['btn_back']              = 'Voltar';
 $lang['btn_backlink']          = 'Backlinks';
-$lang['btn_backtomedia']       = 'Voltar à Selecção de Media';
 $lang['btn_subscribe']         = 'Subscrever Alterações';
 $lang['btn_profile']           = 'Actualizar Perfil';
 $lang['btn_reset']             = 'Limpar';
@@ -78,6 +80,7 @@ $lang['regmissing']            = 'Por favor, preencha todos os campos.';
 $lang['reguexists']            = 'Este utilizador já está inscrito. Por favor escolha outro nome de utilizador.';
 $lang['regsuccess']            = 'O utilizador foi criado e a senha foi enviada para o endereço de correio electrónico usado na inscrição.';
 $lang['regsuccess2']           = 'O utilizador foi criado.';
+$lang['regfail']               = 'O usuário não pode ser criado.';
 $lang['regmailfail']           = 'Houve um erro no envio da senha por e-mail. Por favor, contacte o administrador!';
 $lang['regbadmail']            = 'O endereço de correio electrónico é inválido. Se o endereço está correcto, e isto é um erro, por favor, contacte o administrador!';
 $lang['regbadpass']            = 'As duas senhas não são idênticas, por favor tente de novo.';
@@ -92,6 +95,7 @@ $lang['profdeleteuser']        = 'Apagar Conta';
 $lang['profdeleted']           = 'A sua conta de utilizador foi removida desta wiki';
 $lang['profconfdelete']        = 'Quero remover a minha conta desta wiki. <br/> Esta acção não pode ser anulada.';
 $lang['profconfdeletemissing'] = 'A caixa de confirmação não foi marcada';
+$lang['proffail']              = 'O perfil do usuário não foi atualizado.';
 $lang['pwdforget']             = 'Esqueceu a sua senha? Pedir nova senha';
 $lang['resendna']              = 'Este wiki não suporta reenvio de senhas.';
 $lang['resendpwd']             = 'Definir nova senha para';
@@ -155,7 +159,6 @@ $lang['js']['media_overwrt']   = 'Escrever por cima de ficheiros existentes';
 $lang['rssfailed']             = 'Ocorreu um erro neste canal RSS: ';
 $lang['nothingfound']          = 'Nada foi encontrado.';
 $lang['mediaselect']           = 'Selecção de ficheiros';
-$lang['fileupload']            = 'Carregamento de ficheiros';
 $lang['uploadsucc']            = 'Carregamento com sucesso';
 $lang['uploadfail']            = 'Falhou o carregamento. Talvez por não ter permissões?';
 $lang['uploadwrong']           = 'Carregamento negado. Esta extensão está proibida.';
@@ -246,7 +249,6 @@ $lang['qb_sig']                = 'Inserir Assinatura';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Caracteres Especiais';
 $lang['upperns']               = 'Ir para o espaço de nomes parente';
-$lang['admin_register']        = 'Registar Novo Utilizador';
 $lang['metaedit']              = 'Editar Metadata';
 $lang['metasaveerr']           = 'Falhou a escrita de Metadata';
 $lang['metasaveok']            = 'Metadata gravada';
@@ -279,7 +281,6 @@ $lang['subscr_style_every']    = 'email em qualquer alteração';
 $lang['subscr_style_digest']   = '"digest email" de alterações em cada página (cada %.2f dias)';
 $lang['subscr_style_list']     = 'lista de páginas alteradas desde o último email (cada %.2f dias)';
 $lang['authtempfail']          = 'Autenticação temporariamente indisponível. Se a situação persistir, por favor informe o Wiki Admin.';
-$lang['authpwdexpire']         = 'A sua senha expirará dentro de %d dias, deve mudá-la em breve.';
 $lang['i_chooselang']          = 'Escolha a linguagem';
 $lang['i_installer']           = 'Instalador do DokuWiki';
 $lang['i_wikiname']            = 'Nome Wiki';
@@ -343,5 +344,5 @@ $lang['currentns']             = 'Namespace actual';
 $lang['searchresult']          = 'Resultado da pesquisa';
 $lang['plainhtml']             = 'HTML simples';
 $lang['wikimarkup']            = 'Markup de Wiki';
-$lang['page_nonexist_rev']     = 'Página não existia no %s. Posteriormente, foi criado em <a href="%s">% s </a>.';
+$lang['page_nonexist_rev']     = 'Página não existia no %s. Posteriormente, foi criado em <a href="%s">%s</a>.';
 $lang['unable_to_parse_date']  = 'Não é possível analisar o parâmetro "%s".';
diff --git a/inc/lang/ro/lang.php b/inc/lang/ro/lang.php
index 452a93ed0a100f777efdc254149c57c012e4ecb4..5dab68c69d7906eb6016cbffaeae7c8b5f6b5ed5 100644
--- a/inc/lang/ro/lang.php
+++ b/inc/lang/ro/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Tiberiu Micu <tibimicu@gmx.net>
  * @author Sergiu Baltariu <s_baltariu@yahoo.com>
  * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
@@ -17,7 +17,7 @@ $lang['doublequoteopening']    = '„';
 $lang['doublequoteclosing']    = '“';
 $lang['singlequoteopening']    = '‚';
 $lang['singlequoteclosing']    = '‘';
-$lang['apostrophe']            = '\'';
+$lang['apostrophe']            = '’';
 $lang['btn_edit']              = 'Editează această pagină';
 $lang['btn_source']            = 'Arată sursa paginii';
 $lang['btn_show']              = 'Arată pagina';
@@ -41,7 +41,6 @@ $lang['btn_update']            = 'Actualizează';
 $lang['btn_delete']            = 'Șterge';
 $lang['btn_back']              = 'ÃŽnapoi';
 $lang['btn_backlink']          = 'Legătură anterioară';
-$lang['btn_backtomedia']       = 'Înapoi la selecția mediafile';
 $lang['btn_subscribe']         = 'Subscrie modificarea paginii';
 $lang['btn_profile']           = 'Actualizează profil';
 $lang['btn_reset']             = 'Resetează';
@@ -151,7 +150,6 @@ $lang['js']['media_overwrt']   = 'Suprascrie fișierele deja existente';
 $lang['rssfailed']             = 'A apărut o eroare in timpul descărcării acestui câmp: ';
 $lang['nothingfound']          = 'Nu am găsit nimic.';
 $lang['mediaselect']           = 'Fișiere media';
-$lang['fileupload']            = 'Încarcare fișier media';
 $lang['uploadsucc']            = 'Încărcare reușită';
 $lang['uploadfail']            = 'Încărcare eșuată. Poate din cauza permisiunilor?';
 $lang['uploadwrong']           = 'Încărcare nepermisă. Extensia fișierului e nepermisă';
@@ -236,7 +234,6 @@ $lang['qb_sig']                = 'Inserează semnătură';
 $lang['qb_smileys']            = 'Smiley-uri';
 $lang['qb_chars']              = 'Caractere speciale';
 $lang['upperns']               = 'Accesează spațiul de nume părinte';
-$lang['admin_register']        = 'Adaugă utilizator nou';
 $lang['metaedit']              = 'Editează metadata';
 $lang['metasaveerr']           = 'Scrierea metadatelor a eșuat';
 $lang['metasaveok']            = 'Metadatele au fost salvate';
@@ -269,7 +266,6 @@ $lang['subscr_style_every']    = 'e-mail la ficare schimbare';
 $lang['subscr_style_digest']   = 'e-mail cu sumar al modificărilor pentru fiecare pagină (la fiecare %.2f zile)';
 $lang['subscr_style_list']     = 'lista paginilor modificate de la ultimul e-mail (la fiecare %.2f zile)';
 $lang['authtempfail']          = 'Autentificarea utilizatorului este temporar indisponibilă. Contactează administratorul.';
-$lang['authpwdexpire']         = 'Parola va expira în %d zile, ar trebui să o schimbi în curând.';
 $lang['i_chooselang']          = 'Alege limba';
 $lang['i_installer']           = 'Installer DokuWiki';
 $lang['i_wikiname']            = 'Numele acestui wiki';
diff --git a/inc/lang/ru/admin.txt b/inc/lang/ru/admin.txt
index cd609a3478444f0fc3fe2ae6be5715dbfe4f77fc..8a670d5a0ed99599af3d3dffae707634ff667a91 100644
--- a/inc/lang/ru/admin.txt
+++ b/inc/lang/ru/admin.txt
@@ -1,4 +1,4 @@
 ====== Управление ======
 
-Ниже вы сможете найти список административных операций, доступных в «Докувики».
+Ниже вы сможете найти список административных операций, доступных в «Докувики».
 
diff --git a/inc/lang/ru/conflict.txt b/inc/lang/ru/conflict.txt
index 6c5e33dced7b3e2cac5bbbe82512bd7673fd817d..e813d8c13a097386f7bb461fac7fe8fd84d49e9e 100644
--- a/inc/lang/ru/conflict.txt
+++ b/inc/lang/ru/conflict.txt
@@ -1,5 +1,5 @@
 ====== Существует более новая версия ======
 
-Существует более новая версия документа, который вы редактировали. Такое случается, когда другой пользователь изменил документ, пока вы делали то же самое.
+Существует более новая версия документа, который вы редактировали. Такое случается, когда другой пользователь изменил документ, пока вы делали то же самое.
 
-Внимательно изучите различия, приведенные ниже, и решите, какую версию оставить. Если вы выберете «Сохранить», то ваша версия будет сохранена. Нажав «Отменить», вы оставите текущую версию.
+Внимательно изучите различия, приведенные ниже, и решите, какую версию оставить. Если вы выберете «Сохранить», то ваша версия будет сохранена. Нажав «Отменить», вы оставите текущую версию.
diff --git a/inc/lang/ru/denied.txt b/inc/lang/ru/denied.txt
index 6b7c82511b7fb121d8789947addd0ec0976ff33d..791b30b1ac20df7fe29dacff0d3d4b5f221b689f 100644
--- a/inc/lang/ru/denied.txt
+++ b/inc/lang/ru/denied.txt
@@ -1,4 +1,4 @@
 ====== Доступ запрещён ======
 
-Извините, у вас не хватает прав для этого действия.
+Извините, у вас не хватает прав для этого действия.
 
diff --git a/inc/lang/ru/diff.txt b/inc/lang/ru/diff.txt
index 80252614f9ee2726d8c66e2d7992f731815ecf9c..21b8a8eabec280d24e898eaad28827b86d5820e7 100644
--- a/inc/lang/ru/diff.txt
+++ b/inc/lang/ru/diff.txt
@@ -1,4 +1,3 @@
 ====== Различия ======
 
 Здесь показаны различия между двумя версиями данной страницы.
-
diff --git a/inc/lang/ru/draft.txt b/inc/lang/ru/draft.txt
index cb35f72b6a8cf2d66cb4862b2b312e7e5c2dceb2..a92aa34cd85bd5304058c332f0724be417d980c3 100644
--- a/inc/lang/ru/draft.txt
+++ b/inc/lang/ru/draft.txt
@@ -1,6 +1,5 @@
 ====== Найден черновик ======
 
-Последний раз редактирование этой страницы не было корректно завершено. Во время вашей работы был автоматически сохранён черновик, который вы теперь можете восстановить и продолжить прерванную правку. Ниже вы видите автоматически сохранённую версию.
-
-Пожалуйста, решите, хотите ли вы //восстановить// потерянную версию, //удалить// черновик, или //отменить// редактирование.
+Последний раз редактирование этой страницы не было корректно завершено. Во время вашей работы был автоматически сохранён черновик, который вы теперь можете восстановить и продолжить прерванную правку. Ниже вы видите автоматически сохранённую версию.
 
+Пожалуйста, решите, хотите ли вы //восстановить// потерянную версию, //удалить// черновик, или //отменить// редактирование.
diff --git a/inc/lang/ru/edit.txt b/inc/lang/ru/edit.txt
index aac399d7c2915fc9c143f622b238b83f5a3bd76b..25ded4115e2fd941242d5d0351987ab9f35561c0 100644
--- a/inc/lang/ru/edit.txt
+++ b/inc/lang/ru/edit.txt
@@ -1,2 +1 @@
-Отредактируйте страницу и нажмите «Сохранить». Прочтите [[wiki:syntax|справочную страницу]] для ознакомления с синтаксисом вики. Пожалуйста, редактируйте только в том случае, если планируете **улучшить** содержимое. Если вы просто хотите потестировать что-либо, воспользуйтесь специальной страницей: [[playground:playground]].
-
+Отредактируйте страницу и нажмите «Сохранить». Прочтите [[wiki:syntax|справочную страницу]] для ознакомления с синтаксисом вики. Пожалуйста, редактируйте только в том случае, если планируете **улучшить** содержимое. Если вы просто хотите потестировать что-либо, воспользуйтесь специальной страницей: [[playground:playground]].
diff --git a/inc/lang/ru/editrev.txt b/inc/lang/ru/editrev.txt
index 97b799a70805e603303dfdbfa5bb76cb13460d6b..ac2464db9e9e70a5ad5a2a7f2ab5f43fb2464b58 100644
--- a/inc/lang/ru/editrev.txt
+++ b/inc/lang/ru/editrev.txt
@@ -1,2 +1,2 @@
-**Вы загрузили старую ревизию документа.** Сохранив её, вы создадите новую текущую версию с этим содержимым.
+**Вы загрузили старую ревизию документа.** Сохранив её, вы создадите новую текущую версию с этим содержимым.
 ----
diff --git a/inc/lang/ru/index.txt b/inc/lang/ru/index.txt
index fc42f87ff32da51ab86659b6b672b50330d7750f..a059b281fc87ce66f554e412055303158e7182a7 100644
--- a/inc/lang/ru/index.txt
+++ b/inc/lang/ru/index.txt
@@ -1,4 +1,4 @@
 ====== Содержание ======
 
-Перед вами список доступных страниц, упорядоченный по ([[doku>namespaces|пространствам имён]]).
+Перед вами список доступных страниц, упорядоченный по [[doku>namespaces|пространствам имён]].
 
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index ffe51338662d22816bf03f18d541ed3ff0608b45..304233a4818772784c64a8e3e1bb87cf9933da63 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -29,8 +29,13 @@
  * @author Igor Degraf <igordegraf@gmail.com>
  * @author Type-kun <workwork-1@yandex.ru>
  * @author Vitaly Filatenko <kot@hacktest.net>
+ * @author Alex P <alexander@lanos.co.uk>
+ * @author Nolf <m.kopachovets@gmail.com>
+ * @author Takumo <9206984@mail.ru>
+ * @author RainbowSpike <1@2.ru>
+ * @author dimsharav <dimsharav@gmail.com>
  */
-$lang['encoding']              = ' utf-8';
+$lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
 $lang['doublequoteopening']    = '«';
 $lang['doublequoteclosing']    = '»';
@@ -41,7 +46,7 @@ $lang['btn_edit']              = 'Править страницу';
 $lang['btn_source']            = 'Показать исходный текст';
 $lang['btn_show']              = 'Показать страницу';
 $lang['btn_create']            = 'Создать страницу';
-$lang['btn_search']            = 'Поиск';
+$lang['btn_search']            = 'Найти';
 $lang['btn_save']              = 'Сохранить';
 $lang['btn_preview']           = 'Просмотр';
 $lang['btn_top']               = 'Наверх';
@@ -60,10 +65,9 @@ $lang['btn_update']            = 'Обновить';
 $lang['btn_delete']            = 'Удалить';
 $lang['btn_back']              = 'Назад';
 $lang['btn_backlink']          = 'Ссылки сюда';
-$lang['btn_backtomedia']       = 'Вернуться к выбору медиафайла';
-$lang['btn_subscribe']         = 'Подписаться (все правки)';
+$lang['btn_subscribe']         = 'Управление подписками';
 $lang['btn_profile']           = 'Профиль';
-$lang['btn_reset']             = 'Сброс';
+$lang['btn_reset']             = 'Вернуть';
 $lang['btn_resendpwd']         = 'Установить новый пароль';
 $lang['btn_draft']             = 'Править черновик';
 $lang['btn_recover']           = 'Восстановить черновик';
@@ -89,74 +93,78 @@ $lang['badlogin']              = 'Извините, неверное имя по
 $lang['badpassconfirm']        = 'Простите, пароль неверный';
 $lang['minoredit']             = 'Небольшие изменения';
 $lang['draftdate']             = 'Черновик сохранён';
-$lang['nosecedit']             = 'За это время страница была изменена и информация о секции устарела. Загружена полная версия страницы.';
-$lang['searchcreatepage']      = 'Если вы не нашли то, что искали, вы можете создать новую страницу с именем, совпадающим с запросом. Чтобы сделать это, просто нажмите на кнопку «Создать страницу».';
+$lang['nosecedit']             = 'За это время страница была изменена и информация о секции устарела. Загружена полная версия страницы.';
+$lang['searchcreatepage']      = 'Если вы не нашли то, что искали, вы можете создать новую страницу с именем, совпадающим с запросом. Чтобы сделать это, просто нажмите на кнопку «Создать страницу».';
 $lang['regmissing']            = 'Извините, вам следует заполнить все поля.';
 $lang['reguexists']            = 'Извините, пользователь с таким логином уже существует.';
-$lang['regsuccess']            = 'Пользователь создан; пароль выслан на адрес электронной почты.';
+$lang['regsuccess']            = 'Пользователь создан; пароль выслан на адрес электронной почты.';
 $lang['regsuccess2']           = 'Пользователь создан.';
-$lang['regmailfail']           = 'Похоже есть проблема с отправкой пароля по почте. Пожалуйста, сообщите об этом администратору.';
-$lang['regbadmail']            = 'Данный вами адрес электронной почты выглядит неправильным. Если вы считаете это ошибкой, сообщите администратору.';
-$lang['regbadpass']            = 'Два введённых пароля не идентичны. Пожалуйста, попробуйте ещё раз.';
+$lang['regfail']               = 'Пользователь не может быть создан.';
+$lang['regmailfail']           = 'Похоже есть проблема с отправкой пароля по почте. Пожалуйста, сообщите об этом администратору.';
+$lang['regbadmail']            = 'Данный вами адрес электронной почты выглядит неправильным. Если вы считаете это ошибкой, сообщите администратору.';
+$lang['regbadpass']            = 'Два введённых пароля не идентичны. Пожалуйста, попробуйте ещё раз.';
 $lang['regpwmail']             = 'Ваш пароль для системы «Докувики»';
 $lang['reghere']               = 'У вас ещё нет аккаунта? Зарегистрируйтесь';
 $lang['profna']                = 'Данная вики не поддерживает изменение профиля';
 $lang['profnochange']          = 'Изменений не было внесено, профиль не обновлён.';
 $lang['profnoempty']           = 'Логин и адрес электронной почты не могут быть пустыми.';
 $lang['profchanged']           = 'Профиль пользователя успешно обновлён.';
-$lang['profnodelete']          = 'Удалённый пользователь не может работать с этим документом';
+$lang['profnodelete']          = 'Удалённый пользователь не может работать с этим документом';
 $lang['profdeleteuser']        = 'Удалить аккаунт';
-$lang['profdeleted']           = 'Ваш аккаунт был удален из этой вики';
-$lang['profconfdelete']        = 'Я хочу удалить мой аккаунт из этой вики.<br />Это действие необратимо.';
-$lang['profconfdeletemissing'] = 'Флажок подтверждения не установлен';
+$lang['profdeleted']           = 'Ваш аккаунт был удалён из этой вики';
+$lang['profconfdelete']        = 'Я хочу удалить свой аккаунт из этой вики. <br />
+Это действие необратимо.';
+$lang['profconfdeletemissing'] = 'Флажок подтверждения не установлен';
+$lang['proffail']              = 'Профиль пользователя не был обновлен.';
 $lang['pwdforget']             = 'Забыли пароль? Получите новый';
-$lang['resendna']              = 'Данная вики не поддерживает повторную отправку пароля.';
+$lang['resendna']              = 'Данная вики не поддерживает повторную отправку пароля.';
 $lang['resendpwd']             = 'Установить новый пароль для';
 $lang['resendpwdmissing']      = 'Вы должны заполнить все поля формы.';
-$lang['resendpwdnouser']       = 'Пользователь с таким логином не обнаружен в нашей базе данных.';
-$lang['resendpwdbadauth']      = 'Извините, неверный код авторизации. Убедитесь, что вы полностью скопировали ссылку. ';
-$lang['resendpwdconfirm']      = 'Ссылка для подтверждения пароля была выслана по электронной почте. ';
-$lang['resendpwdsuccess']      = 'Ваш новый пароль был выслан по электронной почте.';
-$lang['license']               = 'За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:';
-$lang['licenseok']             = 'Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии:';
-$lang['searchmedia']           = 'Поиск по имени файла:';
+$lang['resendpwdnouser']       = 'Пользователь с таким логином не обнаружен в нашей базе данных.';
+$lang['resendpwdbadauth']      = 'Извините, неверный код авторизации. Убедитесь, что вы полностью скопировали ссылку.';
+$lang['resendpwdconfirm']      = 'Ссылка для подтверждения пароля была выслана по электронной почте.';
+$lang['resendpwdsuccess']      = 'Ваш новый пароль был выслан по электронной почте.';
+$lang['license']               = 'За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:';
+$lang['licenseok']             = 'Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии:';
+$lang['searchmedia']           = 'Поиск по имени файла';
 $lang['searchmedia_in']        = 'Поиск в %s';
 $lang['txt_upload']            = 'Выберите файл для загрузки:';
 $lang['txt_filename']          = 'Введите имя файла в вики (необязательно):';
 $lang['txt_overwrt']           = 'Перезаписать существующий файл';
-$lang['maxuploadsize']         = 'Максимальный размер загружаемого файла %s';
-$lang['lockedby']              = 'В данный момент заблокирован:';
-$lang['lockexpire']            = 'Блокировка истекает в:';
-$lang['js']['willexpire']      = 'Ваша блокировка этой страницы на редактирование истекает в течение минуты.\nЧтобы предотвратить конфликты используйте кнопку «Просмотр» для сброса таймера блокировки.';
-$lang['js']['notsavedyet']     = 'Несохранённые изменения будут потеряны. Вы действительно хотите продолжить?';
+$lang['maxuploadsize']         = 'Макс. размер загружаемого файла %s';
+$lang['lockedby']              = 'В данный момент заблокировано пользователем';
+$lang['lockexpire']            = 'Блокировка истекает в';
+$lang['js']['willexpire']      = 'Ваша блокировка этой страницы на редактирование истекает в течение минуты.\nЧтобы предотвратить конфликты используйте кнопку «Просмотр» для сброса таймера блокировки.';
+$lang['js']['notsavedyet']     = 'Несохранённые изменения будут потеряны. Вы действительно хотите продолжить?';
 $lang['js']['searchmedia']     = 'Поиск файлов';
 $lang['js']['keepopen']        = 'Не закрывать окно после выбора';
 $lang['js']['hidedetails']     = 'Скрыть детали';
-$lang['js']['mediatitle']      = 'Настройки ссылок';
+$lang['js']['mediatitle']      = 'Настройка ссылки';
 $lang['js']['mediadisplay']    = 'Тип ссылки';
-$lang['js']['mediaalign']      = 'Выравнивание';
-$lang['js']['mediasize']       = 'Размер изображения';
-$lang['js']['mediatarget']     = 'Значение target ссылки';
+$lang['js']['mediaalign']      = 'Выравнивание
+';
+$lang['js']['mediasize']       = 'Размер';
+$lang['js']['mediatarget']     = 'Целевая ссылка';
 $lang['js']['mediaclose']      = 'Закрыть';
 $lang['js']['mediainsert']     = 'Вставить';
-$lang['js']['mediadisplayimg'] = 'Показывать изображение.';
-$lang['js']['mediadisplaylnk'] = 'Показывать только ссылку.';
+$lang['js']['mediadisplayimg'] = 'Показывать изображение';
+$lang['js']['mediadisplaylnk'] = 'Показывать только ссылку';
 $lang['js']['mediasmall']      = 'Малая версия';
 $lang['js']['mediamedium']     = 'Средняя версия';
 $lang['js']['medialarge']      = 'Крупная версия';
 $lang['js']['mediaoriginal']   = 'Исходная версия';
 $lang['js']['medialnk']        = 'Ссылка на подробности';
-$lang['js']['mediadirect']     = 'Прямая ссылка на оригинал';
+$lang['js']['mediadirect']     = 'Прямая ссылка на оригинал';
 $lang['js']['medianolnk']      = 'Без ссылки';
-$lang['js']['medianolink']     = 'Не давать ссылку на изображение';
-$lang['js']['medialeft']       = 'Выровнять изображение по левому краю.';
-$lang['js']['mediaright']      = 'Выровнять изображение по правому краю.';
-$lang['js']['mediacenter']     = 'Выровнять изображение по центру.';
-$lang['js']['medianoalign']    = 'Не выравнивать.';
-$lang['js']['nosmblinks']      = 'Ссылка на сетевые каталоги Windows работает только из MS Internet Explorer, но вы можете скопировать ссылку.';
+$lang['js']['medianolink']     = 'Не давать ссылку на изображение';
+$lang['js']['medialeft']       = 'Выровнять изображение по левому краю';
+$lang['js']['mediaright']      = 'Выровнять изображение по правому краю';
+$lang['js']['mediacenter']     = 'Выровнять изображение по центру';
+$lang['js']['medianoalign']    = 'Не выравнивать';
+$lang['js']['nosmblinks']      = 'Ссылка на сетевые каталоги Windows работает только из MS Internet Explorer, но вы можете скопировать ссылку.';
 $lang['js']['linkwiz']         = 'Мастер ссылок';
 $lang['js']['linkto']          = 'Ссылка на:';
-$lang['js']['del_confirm']     = 'Вы на самом деле желаете удалить выбранное?';
+$lang['js']['del_confirm']     = 'Вы на самом деле желаете удалить выбранное?';
 $lang['js']['restore_confirm'] = 'Действительно восстановить эту версию?';
 $lang['js']['media_diff']      = 'Просмотр отличий:';
 $lang['js']['media_diff_both'] = 'рядом';
@@ -171,7 +179,6 @@ $lang['js']['media_overwrt']   = 'Перезаписать существующ
 $lang['rssfailed']             = 'Произошла ошибка при получении следующей новостной ленты: ';
 $lang['nothingfound']          = 'Ничего не найдено.';
 $lang['mediaselect']           = 'Выбор медиафайла';
-$lang['fileupload']            = 'Загрузка медиафайла';
 $lang['uploadsucc']            = 'Загрузка произведена успешно';
 $lang['uploadfail']            = 'Загрузка не удалась. Возможно, проблемы с правами доступа?';
 $lang['uploadwrong']           = 'В загрузке отказано. Файлы с таким расширением запрещены. ';
@@ -179,32 +186,32 @@ $lang['uploadexist']           = 'Файл с таким именем сущес
 $lang['uploadbadcontent']      = 'Содержание файла не соответствует расширению %s.';
 $lang['uploadspam']            = 'Загрузка заблокирована спам-фильтром.';
 $lang['uploadxss']             = 'Загрузка заблокирована по соображениям безопасности.';
-$lang['uploadsize']            = 'Загруженный файл был слишком большой. (макс. %s)';
-$lang['deletesucc']            = 'Файл «%s» был удалён.';
-$lang['deletefail']            = 'Невозможно удалить файл «%s». Проверьте права доступа к файлу.';
-$lang['mediainuse']            = 'Файл «%s» не был удалён — файл всё ещё используется.';
+$lang['uploadsize']            = 'Загруженный файл был слишком большой. (Макс. %s)';
+$lang['deletesucc']            = 'Файл %s был удалён.';
+$lang['deletefail']            = 'Невозможно удалить файл %s. Проверьте права доступа к файлу.';
+$lang['mediainuse']            = 'Файл %s не был удалён — файл всё ещё используется.';
 $lang['namespaces']            = 'Пространства имён';
 $lang['mediafiles']            = 'Доступные файлы';
 $lang['accessdenied']          = 'Вы не можете просмотреть эту страницу.';
 $lang['mediausage']            = 'Для ссылки на этот файл используйте следующий синтаксис:';
 $lang['mediaview']             = 'Посмотреть исходный файл';
 $lang['mediaroot']             = 'корень';
-$lang['mediaupload']           = 'Здесь можно загрузить файл в текущий каталог («пространство имён»). Чтобы создать подкаталоги, добавьте их к началу имени файла («Загрузить как»). Имена подкаталогов разделяются двоеточиями. ';
+$lang['mediaupload']           = 'Здесь можно загрузить файл в текущий каталог («пространство имён»). Чтобы создать подкаталоги, добавьте их к началу имени файла («Загрузить как»). Имена подкаталогов разделяются двоеточиями.';
 $lang['mediaextchange']        = 'Расширение изменилось с .%s на .%s!';
 $lang['reference']             = 'Ссылки для';
-$lang['ref_inuse']             = 'Этот файл не может быть удалён, так как он используется на следующих страницах:';
-$lang['ref_hidden']            = 'Некоторые ссылки находятся на страницах, на чтение которых у вас нет прав доступа';
+$lang['ref_inuse']             = 'Этот файл не может быть удалён, так как он используется на следующих страницах:';
+$lang['ref_hidden']            = 'Некоторые ссылки находятся на страницах, на чтение которых у вас нет прав доступа';
 $lang['hits']                  = 'соответствий';
-$lang['quickhits']             = 'Соответствия в названиях страниц';
+$lang['quickhits']             = 'Подходящие страницы';
 $lang['toc']                   = 'Содержание';
 $lang['current']               = 'текущий';
 $lang['yours']                 = 'Ваша версия';
 $lang['diff']                  = 'Показать отличия от текущей версии';
 $lang['diff2']                 = 'Показать различия между ревизиями  ';
 $lang['difflink']              = 'Ссылка на это сравнение';
-$lang['diff_type']             = 'Посмотреть отличия';
-$lang['diff_inline']           = 'встроенный';
-$lang['diff_side']             = 'бок о бок';
+$lang['diff_type']             = 'Посмотреть различия';
+$lang['diff_inline']           = 'внутри текста';
+$lang['diff_side']             = 'двумя колонками';
 $lang['diffprevrev']           = 'Предыдущая версия';
 $lang['diffnextrev']           = 'Следующая версия';
 $lang['difflastrev']           = 'Последняя версия';
@@ -262,7 +269,6 @@ $lang['qb_sig']                = 'Вставить подпись';
 $lang['qb_smileys']            = 'Смайлики';
 $lang['qb_chars']              = 'Специальные символы';
 $lang['upperns']               = 'Перейти в родительское пространство имён';
-$lang['admin_register']        = 'Добавить пользователя';
 $lang['metaedit']              = 'Править метаданные';
 $lang['metasaveerr']           = 'Ошибка записи метаданных';
 $lang['metasaveok']            = 'Метаданные сохранены';
@@ -295,7 +301,6 @@ $lang['subscr_style_every']    = 'уведомлять о каждом изме
 $lang['subscr_style_digest']   = 'информационное электронное письмо со списком изменений для каждой страницы (каждые %.2f дн.)';
 $lang['subscr_style_list']     = 'список изменённых страниц со времени последнего отправленного электронного письма (каждые %.2f дн.)';
 $lang['authtempfail']          = 'Аутентификация пользователей временно недоступна. Если проблема продолжается какое-то время, пожалуйста, сообщите об этом своему администратору вики.';
-$lang['authpwdexpire']         = 'Действие вашего пароля истекает через %d дней. Вы должны изменить его как можно скорее';
 $lang['i_chooselang']          = 'Выберите свой язык/Choose your language';
 $lang['i_installer']           = 'Установка «Докувики»';
 $lang['i_wikiname']            = 'Название вики';
@@ -307,11 +312,11 @@ $lang['i_modified']            = 'Из соображений безопасно
                                   <a href="http://www.dokuwiki.org/install">инструкции по установке «Докувики»</a>';
 $lang['i_funcna']              = 'Функция PHP <code>%s</code> недоступна. Может быть, она по какой-то причине заблокирована вашим хостером?';
 $lang['i_phpver']              = 'Ваша версия PHP (<code>%s</code>) ниже требуемой (<code>%s</code>). Вам необходимо обновить установленную версию PHP.';
-$lang['i_mbfuncoverload']      = 'Для запуска "Докувики" необходимо отключить параметр mbstring.func_overload в php.ini';
+$lang['i_mbfuncoverload']      = 'Для запуска «Докувики» необходимо отключить параметр mbstring.func_overload в php.ini';
 $lang['i_permfail']            = '<code>%s</code> недоступна для записи «Докувики». Вам необходимо исправить системные права доступа для этой директории!';
 $lang['i_confexists']          = '<code>%s</code> уже существует';
 $lang['i_writeerr']            = 'Не удалось создать <code>%s</code>. Вам необходимо проверить системные права доступа к файлу и директориям, и создать файл вручную. ';
-$lang['i_badhash']             = 'dokuwiki.php не распознан или изменён (хэш=<code>%s</code>)';
+$lang['i_badhash']             = 'dokuwiki.php не распознан или изменён (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> — недопустимое или пустое значение';
 $lang['i_success']             = 'Конфигурация прошла успешно. Теперь вы можете удалить файл install.php. Переходите к
                                  <a href="doku.php?id=wiki:welcome">своей новой «Докувики»</a>.';
@@ -336,7 +341,7 @@ $lang['minutes']               = '%d минут назад';
 $lang['seconds']               = '%d секунд назад';
 $lang['wordblock']             = 'Ваши изменения не сохранены, поскольку они содержат блокируемые слова (спам).';
 $lang['media_uploadtab']       = 'Загрузка';
-$lang['media_searchtab']       = 'Поиск';
+$lang['media_searchtab']       = 'Найти';
 $lang['media_file']            = 'Файл';
 $lang['media_viewtab']         = 'Просмотр';
 $lang['media_edittab']         = 'Правка';
@@ -359,6 +364,7 @@ $lang['media_perm_read']       = 'Извините, у вас недостато
 $lang['media_perm_upload']     = 'Извините, у вас недостаточно прав для загрузки файлов.';
 $lang['media_update']          = 'Загрузить новую версию';
 $lang['media_restore']         = 'Восстановить эту версию';
+$lang['media_acl_warning']     = 'Этот список может быть неполным из-за ограничений списков контроля доступа (ACL) и скрытых страниц.';
 $lang['currentns']             = 'Текущее пространство имён';
 $lang['searchresult']          = 'Результаты поиска';
 $lang['plainhtml']             = 'Простой HTML';
diff --git a/inc/lang/ru/recent.txt b/inc/lang/ru/recent.txt
index aa088c734d160ab9dd1c81f24e5cc90590c64a95..0d4d3285a8eac379b001ffe9a67e46933b0852f7 100644
--- a/inc/lang/ru/recent.txt
+++ b/inc/lang/ru/recent.txt
@@ -1,5 +1,5 @@
 ====== Недавние изменения ======
 
-Эти страницы были изменены недавно.
+Следующие страницы были недавно изменены
 
 
diff --git a/inc/lang/ru/subscr_list.txt b/inc/lang/ru/subscr_list.txt
index 984a25eb0130020a9a27f59932dc47d6f15615b0..d2bc91a540a581f06f919d5e3cb559ae5fdee4a8 100644
--- a/inc/lang/ru/subscr_list.txt
+++ b/inc/lang/ru/subscr_list.txt
@@ -1,6 +1,7 @@
 Привет.
 
 Страницы в пространстве имён @PAGE@ в вики @TITLE@ были изменены.
+
 Список изменившихся страниц:
 
 --------------------------------------------------------
diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php
index afbf79503db3b40f06a284ccf121a848e8abf1b0..df711cd1b0d84a68c886177c8cdb531558f04c00 100644
--- a/inc/lang/sk/lang.php
+++ b/inc/lang/sk/lang.php
@@ -38,7 +38,6 @@ $lang['btn_update']            = 'Aktualizovať';
 $lang['btn_delete']            = 'Zmazať';
 $lang['btn_back']              = 'Späť';
 $lang['btn_backlink']          = 'Spätné odkazy';
-$lang['btn_backtomedia']       = 'Späť na výber súboru';
 $lang['btn_subscribe']         = 'Sledovať zmeny';
 $lang['btn_profile']           = 'Aktualizovať profil';
 $lang['btn_reset']             = 'Zrušiť';
@@ -51,8 +50,10 @@ $lang['btn_register']          = 'Registrovať';
 $lang['btn_apply']             = 'Použiť';
 $lang['btn_media']             = 'Správa médií';
 $lang['btn_deleteuser']        = 'Zrušiť môj účet';
+$lang['btn_img_backto']        = 'Späť na %s';
+$lang['btn_mediaManager']      = 'Prezrieť v správcovi médií';
 $lang['loggedinas']            = 'Prihlásený(á) ako:';
-$lang['user']                  = 'Užívateľské meno';
+$lang['user']                  = 'Používateľské meno';
 $lang['pass']                  = 'Heslo';
 $lang['newpass']               = 'Nové heslo';
 $lang['oldpass']               = 'Potvrď aktuálne heslo';
@@ -60,36 +61,38 @@ $lang['passchk']               = 'EÅ¡te raz znovu';
 $lang['remember']              = 'Zapamätaj si ma';
 $lang['fullname']              = 'Celé meno';
 $lang['email']                 = 'E-Mail';
-$lang['profile']               = 'Užívateľský profil';
-$lang['badlogin']              = 'Zadané užívateľské meno a heslo nie je správne.';
+$lang['profile']               = 'Používateľský profil';
+$lang['badlogin']              = 'Zadané používateľské meno a heslo nie je správne.';
 $lang['badpassconfirm']        = 'Ľutujem, heslo bolo nesprávne.';
 $lang['minoredit']             = 'Menšie zmeny';
 $lang['draftdate']             = 'Koncept automaticky uložený';
 $lang['nosecedit']             = 'Stránka bola medzičasom zmenená, informácie o sekcii sú zastaralé a z tohto dôvodu bola nahraná celá stránka.';
-$lang['searchcreatepage']      = "Pokiaľ ste nenašli, čo hľadáte, skúste požadovanú stránku sami vytvoriť stlačením tlačidla ''Vytvoriť stránku''.";
+$lang['searchcreatepage']      = 'Pokiaľ ste nenašli, čo hľadáte, skúste požadovanú stránku sami vytvoriť stlačením tlačidla \'\'Vytvoriť stránku\'\'.';
 $lang['regmissing']            = 'Musíte vyplniť všetky údaje.';
-$lang['reguexists']            = 'Užívateľ s rovnakým menom je už zaregistrovaný.';
-$lang['regsuccess']            = 'Užívateľský účet bol vytvorený a heslo zaslané emailom.';
-$lang['regsuccess2']           = 'Užívateľský účet bol vytvorený.';
+$lang['reguexists']            = 'Používateľ s rovnakým menom je už zaregistrovaný.';
+$lang['regsuccess']            = 'Používateľský účet bol vytvorený a heslo zaslané emailom.';
+$lang['regsuccess2']           = 'Používateľský účet bol vytvorený.';
+$lang['regfail']               = 'Používateľský účet nemôže byť vytvorený.';
 $lang['regmailfail']           = 'Zdá sa, že nastala chyba pri posielaní mailu s heslom. Skúste kontaktovať správcu.';
 $lang['regbadmail']            = 'Zadaná emailová adresa nie je platná. Pokiaľ si myslíte, že to je zle, skúste kontaktovať správcu.';
 $lang['regbadpass']            = 'Zadané heslá nie sú rovnaké, zadajte ich prosím znovu.';
 $lang['regpwmail']             = 'Vaše heslo do systému DokuWiki';
-$lang['reghere']               = 'Nemáte užívateľský účet? Vytvorte si ho';
+$lang['reghere']               = 'Nemáte používateľský účet? Vytvorte si ho';
 $lang['profna']                = 'Táto wiki nepodporuje zmenu profilu';
 $lang['profnochange']          = 'Žiadne zmeny, nie je čo robiť.';
 $lang['profnoempty']           = 'Prázdne meno alebo mailová adresa nie sú povolené.';
-$lang['profchanged']           = 'Užívateľský účet úspešne zmenený.';
+$lang['profchanged']           = 'Profil požívateľa bol úspešne zmenený.';
 $lang['profnodelete']          = 'Táto wiki neumožňuje zrušenie používateľov.';
 $lang['profdeleteuser']        = 'Zrušiť účet';
 $lang['profdeleted']           = 'Váš účet bol zrušený v tejto wiki.';
 $lang['profconfdelete']        = 'Chcem odstrániť môj účet z tejto wiki. <br/> Táto operácia je nevratná.';
 $lang['profconfdeletemissing'] = 'Nebolo zavolené potvrdzovacie políčko';
+$lang['proffail']              = 'Profil používateľa nebol aktualizovaný.';
 $lang['pwdforget']             = 'Zabudli ste heslo? Získajte nové!';
 $lang['resendna']              = 'Táto wiki nepodporuje opätovné zasielanie hesla.';
 $lang['resendpwd']             = 'Nastaviť nové heslo pre';
 $lang['resendpwdmissing']      = 'Prepáčte, musíte vyplniť všetky polia.';
-$lang['resendpwdnouser']       = 'Prepáčte, nemôžeme nájsť zadaného užívateľa v databáze.';
+$lang['resendpwdnouser']       = 'Prepáčte, nemôžeme nájsť zadaného používateľa v databáze.';
 $lang['resendpwdbadauth']      = 'Prepáčte, tento autorizačný kód nie je platný. Uistite sa, či ste použili celý autorizačný odkaz.';
 $lang['resendpwdconfirm']      = 'Autorizačný odkaz bol zaslaný na e-mail.';
 $lang['resendpwdsuccess']      = 'Vaše nové heslo bolo zaslané na e-mail.';
@@ -149,7 +152,6 @@ $lang['js']['media_overwrt']   = 'Prepísať existujúce súbory';
 $lang['rssfailed']             = 'Nastala chyba pri vytváraní tohto RSS: ';
 $lang['nothingfound']          = 'Nič nenájdené.';
 $lang['mediaselect']           = 'Výber súboru';
-$lang['fileupload']            = 'Nahrávanie súboru';
 $lang['uploadsucc']            = 'Prenos prebehol v poriadku';
 $lang['uploadfail']            = 'Chyba pri nahrávaní. Možno kvôli zle nastaveným právam?';
 $lang['uploadwrong']           = 'Prenos súboru s takouto príponou nie je dovolený.';
@@ -204,7 +206,7 @@ $lang['sidebar']               = 'Bočný panel';
 $lang['mail_newpage']          = 'stránka pridaná:';
 $lang['mail_changed']          = 'stránka zmenená:';
 $lang['mail_subscribe_list']   = 'stránky zmenené v mennom priestore:';
-$lang['mail_new_user']         = 'nový užívateľ:';
+$lang['mail_new_user']         = 'nový používateľ:';
 $lang['mail_upload']           = 'nahraný súbor:';
 $lang['changes_type']          = 'Prehľad zmien';
 $lang['pages_changes']         = 'Stránok';
@@ -235,11 +237,9 @@ $lang['qb_sig']                = 'Vložiť podpis';
 $lang['qb_smileys']            = 'Smajlíky';
 $lang['qb_chars']              = 'Špeciálne znaky';
 $lang['upperns']               = 'návrat do nadradeného menného priestoru';
-$lang['admin_register']        = 'Pridaj nového užívateľa';
 $lang['metaedit']              = 'Upraviť metainformácie';
 $lang['metasaveerr']           = 'Zápis metainformácií zlyhal';
 $lang['metasaveok']            = 'Metainformácie uložené';
-$lang['btn_img_backto']            = 'Späť na %s';
 $lang['img_title']             = 'Titul:';
 $lang['img_caption']           = 'Popis:';
 $lang['img_date']              = 'Dátum:';
@@ -252,7 +252,6 @@ $lang['img_camera']            = 'Fotoaparát:';
 $lang['img_keywords']          = 'Kľúčové slová:';
 $lang['img_width']             = 'Šírka:';
 $lang['img_height']            = 'Výška:';
-$lang['btn_mediaManager']           = 'Prezrieť v správcovi médií';
 $lang['subscr_subscribe_success'] = 'Používateľ %s bol pridaný do zoznamu hlásení o zmenách %s';
 $lang['subscr_subscribe_error'] = 'Chyba pri pridaní používateľa %s do zoznamu hlásení o zmenách %s';
 $lang['subscr_subscribe_noaddress'] = 'Vaše prihlasovacie meno nemá priradenú žiadnu email adresu, nemôžete byť pridaný do zoznamu hlásení o zmenách';
@@ -269,8 +268,7 @@ $lang['subscr_m_receive']      = 'Dostávať';
 $lang['subscr_style_every']    = 'email pri každej zmene';
 $lang['subscr_style_digest']   = 'email so zhrnutím zmien pre každú stránku (perióda %.2f dňa)';
 $lang['subscr_style_list']     = 'zoznam zmenených stránok od posledného emailu (perióda %.2f dňa)';
-$lang['authtempfail']          = 'Užívateľská autentifikácia je dočasne nedostupná. Ak táto situácia pretrváva, prosím informujte správcu systému.';
-$lang['authpwdexpire']         = 'Platnosť hesla vyprší za %d dní, mali by ste ho zmeniť čo najskôr.';
+$lang['authtempfail']          = 'Používateľská autentifikácia je dočasne nedostupná. Ak táto situácia pretrváva, prosím informujte správcu systému.';
 $lang['i_chooselang']          = 'Zvoľte váš jazyk';
 $lang['i_installer']           = 'DokuWiki inštalátor';
 $lang['i_wikiname']            = 'Názov Wiki';
@@ -289,8 +287,8 @@ $lang['i_success']             = 'Konfigurácia bola úspešne ukončená. Teraz
 $lang['i_failure']             = 'Pri zápise konfiguračného súboru nastali nejaké chyby. Potrebujete ich opraviť manuálne pred tým, ako budete môcť používať <a href="doku.php?id=wiki:welcome">vašu novú DokuWiki</a>.';
 $lang['i_policy']              = 'Počiatočná ACL politika';
 $lang['i_pol0']                = 'Otvorená Wiki (čítanie, zápis a nahrávanie pre každého)';
-$lang['i_pol1']                = 'Verejná Wiki (čítanie pre každého, zápis a nahrávanie pre registrovaných užívateľov)';
-$lang['i_pol2']                = 'Uzatvorená Wiki (čítanie, zápis a nahrávanie len pre registrovaných užívateľov)';
+$lang['i_pol1']                = 'Verejná Wiki (čítanie pre každého, zápis a nahrávanie pre registrovaných používateľov)';
+$lang['i_pol2']                = 'Uzatvorená Wiki (čítanie, zápis a nahrávanie len pre registrovaných používateľov)';
 $lang['i_allowreg']            = 'Povolenie samostanej registrácie používateľov';
 $lang['i_retry']               = 'Skúsiť znovu';
 $lang['i_license']             = 'Vyberte licenciu, pod ktorou chcete uložiť váš obsah:';
diff --git a/inc/lang/sk/locked.txt b/inc/lang/sk/locked.txt
index 5063c0605456fc8ea2caf73a19586069e2886428..fae400bcad76df7e02b7851775232b8abea3fdde 100644
--- a/inc/lang/sk/locked.txt
+++ b/inc/lang/sk/locked.txt
@@ -1,3 +1,3 @@
 ====== Stránka je uzamknutá ======
 
-Tato stránka je práve uzamknutá pre úpravy iným užívateľom. Musíte počkať dovtedy, pokiaľ daný užívateľ dokončí svoje úpravy alebo pokiaľ tento zámok stratí platnosť.
+Tato stránka je práve uzamknutá pre úpravy iným používateľom. Musíte počkať dovtedy, pokiaľ daný používateľ dokončí svoje úpravy alebo pokiaľ tento zámok stratí platnosť.
diff --git a/inc/lang/sk/password.txt b/inc/lang/sk/password.txt
index 2b85e9c393f5f8693b1746720280d14f4448ac39..582844f29939254453baec4e8b82e231086b9c66 100644
--- a/inc/lang/sk/password.txt
+++ b/inc/lang/sk/password.txt
@@ -3,7 +3,7 @@ Dobrý deň,
 Tu sú prihlasovacie informácie pre @TITLE@ (@DOKUWIKIURL@)
 
 Meno : @FULLNAME@
-Užívateľské meno : @LOGIN@
+Používateľské meno : @LOGIN@
 Heslo : @PASSWORD@
 
 -- 
diff --git a/inc/lang/sk/register.txt b/inc/lang/sk/register.txt
index 59c225d7c44d175f0c3b26f8eb129f077f2c221c..b939dccca472b1899bf6b5a7d554ee298c052db9 100644
--- a/inc/lang/sk/register.txt
+++ b/inc/lang/sk/register.txt
@@ -1,3 +1,3 @@
 ====== Zaregistrujte sa ako nový užívateľ ======
 
-Aby ste získali užívateľský účet, vyplňte prosím všetky informácie v nasledujúcom formulári. Zadajte **platnú** mailovú adresu, na ktorú bude zaslané heslo. Užívateľské meno musí byť v platnom [[doku>pagename|formáte]] (ktorý je rovnaký ako formát názvu stránky).
+Aby ste získali používateľský účet, vyplňte prosím všetky informácie v nasledujúcom formulári. Zadajte **platnú** mailovú adresu, na ktorú bude zaslané heslo. Používateľské meno musí byť v platnom [[doku>pagename|formáte]] (ktorý je rovnaký ako formát názvu stránky).
diff --git a/inc/lang/sk/registermail.txt b/inc/lang/sk/registermail.txt
index a0bf9e314d60f62fc70ee56ade5ba59f3f11ebae..9cde994a3de82835abdd75841c9ec74b1544df59 100644
--- a/inc/lang/sk/registermail.txt
+++ b/inc/lang/sk/registermail.txt
@@ -1,6 +1,6 @@
-Nový užívateľ bol registrovaný. Tu sú detaily:
+Nový používateľ bol registrovaný. Tu sú detaily:
 
-Užívateľské meno : @NEWUSER@
+Používateľské meno : @NEWUSER@
 Celé meno        : @NEWNAME@
 E-Mail           : @NEWEMAIL@
 
diff --git a/inc/lang/sk/updateprofile.txt b/inc/lang/sk/updateprofile.txt
index 67b823dc5b24874ce4f69441eb85fa28211d11e6..33b5e5b78b8fbef6f1fa5c48471248c0750eb53b 100644
--- a/inc/lang/sk/updateprofile.txt
+++ b/inc/lang/sk/updateprofile.txt
@@ -1,4 +1,4 @@
-====== Zmena vášho užívateľského profilu ======
+====== Zmena vášho používateľského profilu ======
 
 Potrebujete vyplniť len tie polia, ktoré chcete zmeniť. Nemôžete zmeniť prihlasovacie meno.
 
diff --git a/inc/lang/sl/lang.php b/inc/lang/sl/lang.php
index b649d08cb6f1b99de8ae464f17ce26926d2ff242..6f7a081ffb5a711d942b4233ff7bf6d4bf5f96b1 100644
--- a/inc/lang/sl/lang.php
+++ b/inc/lang/sl/lang.php
@@ -42,7 +42,6 @@ $lang['btn_update']            = 'Posodobi';
 $lang['btn_delete']            = 'Izbriši';
 $lang['btn_back']              = 'Nazaj';
 $lang['btn_backlink']          = 'Povratne povezave';
-$lang['btn_backtomedia']       = 'Nazaj na izbiro predstavnih datotek';
 $lang['btn_subscribe']         = 'Urejanje naročnin';
 $lang['btn_profile']           = 'Posodobi profil';
 $lang['btn_reset']             = 'Ponastavi';
@@ -150,7 +149,6 @@ $lang['js']['media_overwrt']   = 'Prepiši obstoječe datoteke';
 $lang['rssfailed']             = 'Prišlo je do napake med pridobivanjem vira: ';
 $lang['nothingfound']          = 'Ni najdenih predmetov.';
 $lang['mediaselect']           = 'Predstavne datoteke';
-$lang['fileupload']            = 'Pošiljanje predstavnih datotek';
 $lang['uploadsucc']            = 'Pošiljanje je bilo uspešno končano.';
 $lang['uploadfail']            = 'Pošiljanje je spodletelo. Morda so uporabljena neustrezna dovoljenja.';
 $lang['uploadwrong']           = 'Pošiljanje je zavrnjeno. Uporabljena pripona datoteke je prepovedana.';
@@ -239,7 +237,6 @@ $lang['qb_sig']                = 'Vstavi podpis';
 $lang['qb_smileys']            = 'Smeški';
 $lang['qb_chars']              = 'Posebni znaki';
 $lang['upperns']               = 'skoči na nadrejeni imenski prostor';
-$lang['admin_register']        = 'Dodaj novega uporabnika';
 $lang['metaedit']              = 'Uredi metapodatke';
 $lang['metasaveerr']           = 'Zapisovanje metapodatkov je spodletelo';
 $lang['metasaveok']            = 'Metapodatki so shranjeni';
@@ -272,7 +269,6 @@ $lang['subscr_style_every']    = 'elektronsko sporočilo ob vsaki spremembi';
 $lang['subscr_style_digest']   = 'strnjeno elektronsko sporočilo sprememb za vsako stran (vsakih %.2f dni)';
 $lang['subscr_style_list']     = 'seznam spremenjenih strani od zadnjega elektronskega sporočila (vsakih %.2f dni)';
 $lang['authtempfail']          = 'Potrditev uporabnika je trenutno nedostopna. Stopite v stik s skrbnikom sistema wiki.';
-$lang['authpwdexpire']         = 'Geslo bo poteklo v %d dneh. Priporočljivo ga je zamenjati.';
 $lang['i_chooselang']          = 'Izberite jezik';
 $lang['i_installer']           = 'DokuWiki namestitev';
 $lang['i_wikiname']            = 'Ime Wiki spletišča';
diff --git a/inc/lang/sq/lang.php b/inc/lang/sq/lang.php
index 4c61b6a70fe07c6dd10e81c438764a8dc6b3b8de..331819a667c42232c9a65035fc791eec89d9b326 100644
--- a/inc/lang/sq/lang.php
+++ b/inc/lang/sq/lang.php
@@ -12,10 +12,10 @@
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
-$lang['doublequoteopening']    = '"';
-$lang['doublequoteclosing']    = '"';
-$lang['singlequoteopening']    = '\'';
-$lang['singlequoteclosing']    = '\'';
+$lang['doublequoteopening']    = '„';
+$lang['doublequoteclosing']    = '“';
+$lang['singlequoteopening']    = '‘';
+$lang['singlequoteclosing']    = '’';
 $lang['apostrophe']            = '\'';
 $lang['btn_edit']              = 'Redaktoni këtë faqe';
 $lang['btn_source']            = 'Trego kodin burim të faqes';
@@ -40,7 +40,6 @@ $lang['btn_update']            = 'Përditëso';
 $lang['btn_delete']            = 'Fshi';
 $lang['btn_back']              = 'Mbrapa';
 $lang['btn_backlink']          = 'Lidhjet këtu';
-$lang['btn_backtomedia']       = 'Mbrapa tek Përzgjedhja e Media-ve';
 $lang['btn_subscribe']         = 'Menaxho Abonimet';
 $lang['btn_profile']           = 'Përditëso Profilin';
 $lang['btn_reset']             = 'Rivendos';
@@ -98,7 +97,6 @@ $lang['js']['notsavedyet']     = 'Ndryshimet e paruajtura do të humbasin.\nVazh
 $lang['rssfailed']             = 'Ndoshi një gabim gjatë kapjes së këtij lajmi:';
 $lang['nothingfound']          = 'Nuk u gjet asgjë.';
 $lang['mediaselect']           = 'Skedarët e Medias';
-$lang['fileupload']            = 'Ngarkoje';
 $lang['uploadsucc']            = 'Ngarkim i suksesshëm';
 $lang['uploadfail']            = 'Ngarkimi dështoi. Ndoshta leje të gabuara?';
 $lang['uploadwrong']           = 'Ngarkimi u refuzua! Prapashtesa e skedarit është e ndaluar!';
@@ -176,7 +174,6 @@ $lang['qb_sig']                = 'Fut Firmën';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Karaktere Speciale';
 $lang['upperns']               = 'kërce tek hapësira e emrit prind';
-$lang['admin_register']        = 'Shto Përdorues të Ri';
 $lang['metaedit']              = 'Redakto Metadata';
 $lang['metasaveerr']           = 'Shkrimi i metadata-ve dështoi';
 $lang['metasaveok']            = 'Metadata u ruajt';
diff --git a/inc/lang/sr/lang.php b/inc/lang/sr/lang.php
index 37a36c82b1343c859a4de4f653f201124ae40c80..46088dca8decfaa71cd35f09c091efd5805a2143 100644
--- a/inc/lang/sr/lang.php
+++ b/inc/lang/sr/lang.php
@@ -37,7 +37,6 @@ $lang['btn_update']            = 'Ажурирај';
 $lang['btn_delete']            = 'Избриши';
 $lang['btn_back']              = 'Натраг';
 $lang['btn_backlink']          = 'Повратне везе';
-$lang['btn_backtomedia']       = 'Врати се на избор медијске датотеке';
 $lang['btn_subscribe']         = 'Пријави се на измене';
 $lang['btn_profile']           = 'Ажурирај профил';
 $lang['btn_reset']             = 'Поништи';
@@ -125,7 +124,6 @@ $lang['js']['del_confirm']     = 'Обриши овај унос?';
 $lang['rssfailed']             = 'Дошло је до грешке приликом преузимања овог довода: ';
 $lang['nothingfound']          = 'Ништа није нађено.';
 $lang['mediaselect']           = 'Избор медијске датотеке';
-$lang['fileupload']            = 'Слање медијске датотеке';
 $lang['uploadsucc']            = 'Успешно слање';
 $lang['uploadfail']            = 'Неуспешно слање. Можда немате дозволу?';
 $lang['uploadwrong']           = 'Слање је забрањено. Овај наставак датотеке је забрањен!';
@@ -198,7 +196,6 @@ $lang['qb_sig']                = 'Убаци потпис';
 $lang['qb_smileys']            = 'Смешко';
 $lang['qb_chars']              = 'Посебни карактери';
 $lang['upperns']               = 'Скочи на виши именски простор';
-$lang['admin_register']        = 'Додај новог корисника';
 $lang['metaedit']              = 'Измени мета-податке';
 $lang['metasaveerr']           = 'Записивање мета-података није било успешно';
 $lang['metasaveok']            = 'Мета-подаци су сачувани';
diff --git a/inc/lang/sv/lang.php b/inc/lang/sv/lang.php
index f22491db10e5b055ce75ce3b235b13222fdd26b7..0d1f30a7a051b748c68960bc2cc1668cbd7367d4 100644
--- a/inc/lang/sv/lang.php
+++ b/inc/lang/sv/lang.php
@@ -52,7 +52,6 @@ $lang['btn_update']            = 'Uppdatera';
 $lang['btn_delete']            = 'Radera';
 $lang['btn_back']              = 'Tillbaka';
 $lang['btn_backlink']          = 'Tillbakalänkar';
-$lang['btn_backtomedia']       = 'Tillbaka till val av Mediafil';
 $lang['btn_subscribe']         = 'Prenumerera på ändringar';
 $lang['btn_profile']           = 'Uppdatera profil';
 $lang['btn_reset']             = 'Återställ';
@@ -164,7 +163,6 @@ $lang['js']['media_overwrt']   = 'Skriv över existerande filer';
 $lang['rssfailed']             = 'Ett fel uppstod när detta RSS-flöde skulle hämtas: ';
 $lang['nothingfound']          = 'Inga filer hittades.';
 $lang['mediaselect']           = 'Mediafiler';
-$lang['fileupload']            = 'Ladda upp mediafiler';
 $lang['uploadsucc']            = 'Uppladdningen lyckades';
 $lang['uploadfail']            = 'Uppladdningen misslyckades, fel filskydd?';
 $lang['uploadwrong']           = 'Uppladdning nekad. Filändelsen är inte tillåten!';
@@ -249,7 +247,6 @@ $lang['qb_sig']                = 'Infoga signatur';
 $lang['qb_smileys']            = 'Smileys';
 $lang['qb_chars']              = 'Specialtecken';
 $lang['upperns']               = 'hoppa till föräldernamnrymd';
-$lang['admin_register']        = 'Lägg till ny användare';
 $lang['metaedit']              = 'Redigera metadata';
 $lang['metasaveerr']           = 'Skrivning av metadata misslyckades';
 $lang['metasaveok']            = 'Metadata sparad';
@@ -280,7 +277,6 @@ $lang['subscr_m_receive']      = 'Ta emot';
 $lang['subscr_style_every']    = 'skicka epost vid varje ändring';
 $lang['subscr_style_list']     = 'lista över ändrade sidor sedan senaste e-post (varje %.2f dag)';
 $lang['authtempfail']          = 'Tillfälligt fel på användarautentisering. Om felet kvarstår, var vänlig meddela wikiadministratören.';
-$lang['authpwdexpire']         = 'Ditt lösenord kommer att bli ogiltigt om %d dagar, du bör ändra det snart.';
 $lang['i_chooselang']          = 'Välj språk';
 $lang['i_installer']           = 'Installation av DokuWiki';
 $lang['i_wikiname']            = 'Wikins namn';
diff --git a/inc/lang/ta/admin.txt b/inc/lang/ta/admin.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2538b45691a707c0f2f83feee6aeae25600a347d
--- /dev/null
+++ b/inc/lang/ta/admin.txt
@@ -0,0 +1,3 @@
+====== நிர்வாகம் ======
+
+கீழே டோகுவிக்கியின் நிர்வாகம் தொடர்பான முறைமைகளைப் பார்க்கலாம்.
\ No newline at end of file
diff --git a/inc/lang/ta/adminplugins.txt b/inc/lang/ta/adminplugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..54a363a8a80db0b915735ae5b762b7f38bb403a8
--- /dev/null
+++ b/inc/lang/ta/adminplugins.txt
@@ -0,0 +1 @@
+===== மேலதிக சொருகிகள் =====
\ No newline at end of file
diff --git a/inc/lang/ta/backlinks.txt b/inc/lang/ta/backlinks.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d8e618fc0920f0e39863f68e8a76fdf8de0269f8
--- /dev/null
+++ b/inc/lang/ta/backlinks.txt
@@ -0,0 +1,3 @@
+====== பின்னிணைப்புக்கள் ======
+
+குறித்த பக்கத்திற்கான இணைப்பைக் கொண்டிருக்கும் அனைத்துப் பக்கங்களும்
\ No newline at end of file
diff --git a/inc/lang/ta/conflict.txt b/inc/lang/ta/conflict.txt
new file mode 100644
index 0000000000000000000000000000000000000000..301c2f07a846e0cb31ff9847b650b3e118ea17fe
--- /dev/null
+++ b/inc/lang/ta/conflict.txt
@@ -0,0 +1,3 @@
+====== புதிய பதிப்பு உண்டு ======
+
+நீங்கள் திருத்திய பக்கத்திற்கு புதிய பதிப்பு உருவாகியுள்ளது. நீங்கள் குறித்த பக்கத்தை திருத்தும் போது, இன்னுமொரு பயனர் அதே பக்கத்தைத் திருத்தினால் இப்படி ஏற்பட வாய்ப்புண்டு.
\ No newline at end of file
diff --git a/inc/lang/ta/diff.txt b/inc/lang/ta/diff.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bbc2876763903052bfb9e3d6904d39f0665546cd
--- /dev/null
+++ b/inc/lang/ta/diff.txt
@@ -0,0 +1,3 @@
+====== வேறுபாடுகள் ======
+
+குறித்த பக்கத்திற்கான இருவேறுபட்ட மாறுதல்களைக்  காட்டுகின்றது.
\ No newline at end of file
diff --git a/inc/lang/ta/draft.txt b/inc/lang/ta/draft.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2bb89219df57c073e65c2f7da6518643ca0ba3f1
--- /dev/null
+++ b/inc/lang/ta/draft.txt
@@ -0,0 +1 @@
+====== பூரணமாகத கோப்பு ======
\ No newline at end of file
diff --git a/inc/lang/ta/edit.txt b/inc/lang/ta/edit.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e2d61d781b3c91552725fba8af1d9e59cf77724b
--- /dev/null
+++ b/inc/lang/ta/edit.txt
@@ -0,0 +1 @@
+பக்கத்தைத் திருத்தி முடிந்தவுடன், "செமி" என்ற பட்டனை அழுத்தவும். விக்கியின் வாக்கிய அமைப்புக்களைப் அறிந்துகொள்ள [[wiki:syntax]] ஐ பார்க்கவும். நீங்கள் விக்கியில் எழுதிப் பயிற்சிபெற [playground:playground|விளையாட்டுத்தாடலை]] பயன்படுத்தவும்.
\ No newline at end of file
diff --git a/inc/lang/ta/jquery.ui.datepicker.js b/inc/lang/ta/jquery.ui.datepicker.js
new file mode 100644
index 0000000000000000000000000000000000000000..113a2084948b29a6cb9091b9d3b27492dd80713e
--- /dev/null
+++ b/inc/lang/ta/jquery.ui.datepicker.js
@@ -0,0 +1,37 @@
+/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by S A Sureshkumar (saskumar@live.com). */
+(function( factory ) {
+	if ( typeof define === "function" && define.amd ) {
+
+		// AMD. Register as an anonymous module.
+		define([ "../datepicker" ], factory );
+	} else {
+
+		// Browser globals
+		factory( jQuery.datepicker );
+	}
+}(function( datepicker ) {
+
+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']);
+
+return datepicker.regional['ta'];
+
+}));
diff --git a/inc/lang/ta/lang.php b/inc/lang/ta/lang.php
index a5b89527a05c468130d5b084934d99fef1743caf..422613ec7bcedd8914e42641b569fe2097677b67 100644
--- a/inc/lang/ta/lang.php
+++ b/inc/lang/ta/lang.php
@@ -2,23 +2,41 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Naveen Venugopal <naveen.venugopal.anu@gmail.com>
+ * @author Sri Saravana <saravanamuthaly@gmail.com>
  */
+$lang['doublequoteopening']    = '&quot;';
+$lang['doublequoteclosing']    = '&quot;';
+$lang['singlequoteopening']    = '\'';
+$lang['singlequoteclosing']    = '\'';
+$lang['apostrophe']            = '\'';
 $lang['btn_edit']              = 'இந்த பக்கத்தை திருத்து ';
+$lang['btn_source']            = 'பக்க மூலத்தைக் காட்டு';
 $lang['btn_show']              = 'பக்கத்தை காண்பி ';
 $lang['btn_create']            = 'இந்த பக்கத்தை உருவாக்கு ';
 $lang['btn_search']            = 'தேடு';
 $lang['btn_save']              = 'சேமி ';
+$lang['btn_preview']           = 'முன்னோட்டம்';
+$lang['btn_top']               = 'மேலே செல்';
 $lang['btn_revs']              = 'பழைய  திருத்தங்கள்';
 $lang['btn_recent']            = 'சமீபத்திய மாற்றங்கள்';
 $lang['btn_upload']            = 'பதிவேற்று';
 $lang['btn_cancel']            = 'ரத்து';
 $lang['btn_index']             = 'தள வரைபடம்';
+$lang['btn_secedit']           = 'தொகு';
+$lang['btn_login']             = 'புகுபதிகை';
+$lang['btn_logout']            = 'விடுபதிகை';
 $lang['btn_admin']             = 'நிர்வாகம்';
 $lang['btn_update']            = 'மேம்படுத்து ';
 $lang['btn_delete']            = 'நீக்கு';
+$lang['btn_back']              = 'பின்';
+$lang['btn_backlink']          = 'பின்னிணைப்புக்கள்';
+$lang['btn_subscribe']         = 'சந்தா நிர்வகிப்பு';
+$lang['btn_profile']           = 'பயனர் கணக்கு மாற்றம்';
+$lang['btn_reset']             = 'மீட்டமை';
 $lang['btn_resendpwd']         = 'புதிய அடையாளச்சொல்லை நியமி';
+$lang['btn_draft']             = 'திருத்த வரைவு';
 $lang['btn_apply']             = 'உபயோகி';
 $lang['user']                  = 'பயனர்பெயர்';
 $lang['pass']                  = 'அடையாளச்சொல்';
diff --git a/inc/lang/th/lang.php b/inc/lang/th/lang.php
index 113431276783fb21fb2ab401cde15139e98df4c9..ee1f1e0783bcee412d1d91c2b4050603d509c743 100644
--- a/inc/lang/th/lang.php
+++ b/inc/lang/th/lang.php
@@ -8,10 +8,11 @@
  * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
  * @author Thanasak Sompaisansin <jombthep@gmail.com>
  * @author Yuthana Tantirungrotechai <yt203y@gmail.com>
+ * @author Amnuay <amnuay@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
-$lang['doublequoteopening']    = '“	';
+$lang['doublequoteopening']    = '“';
 $lang['doublequoteclosing']    = '”';
 $lang['singlequoteopening']    = '‘';
 $lang['singlequoteclosing']    = '’';
@@ -39,7 +40,6 @@ $lang['btn_update']            = 'ปรับปรุง';
 $lang['btn_delete']            = 'ลบ';
 $lang['btn_back']              = 'ย้อนกลับ';
 $lang['btn_backlink']          = 'หน้าที่ลิงก์มา';
-$lang['btn_backtomedia']       = 'กลับไปยังหน้าเลือกไฟล์สื่อ';
 $lang['btn_subscribe']         = 'เฝ้าดู';
 $lang['btn_profile']           = 'แก้ข้อมูลผู้ใช้';
 $lang['btn_reset']             = 'เริ่มใหม่';
@@ -49,6 +49,7 @@ $lang['btn_recover']           = 'กู้คืนเอกสารฉบั
 $lang['btn_draftdel']          = 'ลบเอกสารฉบับร่าง';
 $lang['btn_revert']            = 'กู้คืน';
 $lang['btn_register']          = 'สร้างบัญชีผู้ใช้';
+$lang['btn_apply']             = 'นำไปใช้';
 $lang['btn_media']             = 'ส่วนจัดการสื่อและไฟล์';
 $lang['btn_deleteuser']        = 'ลบบัญชีผู้ใช้งานของฉัน';
 $lang['btn_img_backto']        = 'กลับไปยัง %s';
@@ -73,6 +74,7 @@ $lang['regmissing']            = 'ขออภัย คุณต้องกร
 $lang['reguexists']            = 'ชื่อบัญชีที่ใส่นั้นมีผู้อื่นได้ใช้แล้ว กรุณาเลือกชื่อผู้ใช้อื่น';
 $lang['regsuccess']            = 'ผู้ใช้ถูกสร้างแล้ว และรหัสผ่านได้ถูกส่งไปทางอีเมลแล้ว';
 $lang['regsuccess2']           = 'ชื่อบัญชีได้ถูกสร้างขึ้น';
+$lang['regfail']               = 'การสร้างผู้ใช้ไม่สำเร็จ';
 $lang['regmailfail']           = 'ดูเหมือนจะมีข้อผิดพลาดในการส่งรหัสผ่านทางเมล์ กรุณาติดต่อผู้ดูแลระบบ';
 $lang['regbadmail']            = 'รูปแบบอีเมลไม่ถูกต้อง ให้ใส่อีเมลให้ถูกต้องตามรูปแบบอีเมล หรือให้ทำช่องอีเมลให้ว่างแทน';
 $lang['regbadpass']            = 'รหัสผ่านที่ใส่ไม่ถูกต้อง';
@@ -86,8 +88,11 @@ $lang['profnodelete']          = 'วิกินี้ไม่รองรั
 $lang['profdeleteuser']        = 'ลบบัญชีผู้ใช้งาน';
 $lang['profdeleted']           = 'บัญชีผู้ใช้งานของคุณได้ถูกลบออกจากวิกิแล้ว';
 $lang['profconfdelete']        = 'ฉันอยากลบบัญชีผู้ใช้งานของฉันจากวิกินี้ <br/> การดำเนินการนี้ไม่สามารถแก้ไขคืนได้ ';
+$lang['profconfdeletemissing'] = 'ท่านไม่ได้ยืนยันในช่องยืนยัน';
+$lang['proffail']              = 'ข้อมูลผู้ใช้ไม่เป็นปัจจุบัน';
 $lang['pwdforget']             = 'ลืมรหัสผ่านหรือ? เอาอันใหม่สิ';
 $lang['resendna']              = 'วิกินี้ไม่รองรับการส่งรหัสผ่านซ้ำ';
+$lang['resendpwd']             = 'สร้างรหัสผ่านใหม่สำหรับ';
 $lang['resendpwdmissing']      = 'ขออภัย, คุณต้องกรอกทุกช่อง';
 $lang['resendpwdnouser']       = 'ขออภัย, เราไม่พบผู้ใช้คนนี้ในฐานข้อมูลของเรา';
 $lang['resendpwdbadauth']      = 'ขออภัย, รหัสนี้ยังใช้ไม่ได้ กรุณาตรวจสอบว่าคุณกดลิ้งค์ยืนยันแล้ว';
@@ -100,6 +105,7 @@ $lang['searchmedia_in']        = 'สืบค้นใน %s';
 $lang['txt_upload']            = 'เลือกไฟล์ที่จะอัพโหลด:';
 $lang['txt_filename']          = 'อัพโหลดเป็น(ตัวเลือก):';
 $lang['txt_overwrt']           = 'เขียนทับไฟล์ที่มีอยู่แล้ว';
+$lang['maxuploadsize']         = 'อัพโหลด สูงสุด %s ต่อไฟล์';
 $lang['lockedby']              = 'ตอนนี้ถูกล๊อคโดย:';
 $lang['lockexpire']            = 'การล๊อคจะหมดอายุเมื่อ:';
 $lang['js']['willexpire']      = 'การล๊อคเพื่อแก้ไขหน้านี้กำลังจะหมดเวลาในอีก \n นาที เพื่อที่จะหลีกเลี่ยงข้อขัดแย้งให้ใช้ปุ่ม "Preview" เพื่อรีเซ็ทเวลาใหม่';
@@ -107,6 +113,19 @@ $lang['js']['notsavedyet']     = 'การแก้ไขที่ไม่ไ
 $lang['js']['searchmedia']     = 'ค้นหาไฟล์';
 $lang['js']['keepopen']        = 'เปิดหน้าต่างไว้ระหว่างที่เลือก';
 $lang['js']['hidedetails']     = 'ซ่อนรายละเอียด';
+$lang['js']['mediatitle']      = 'กำหนดข้อมูลลิงค์';
+$lang['js']['mediadisplay']    = 'ชนิดของลิงค์';
+$lang['js']['mediaalign']      = 'การจัดวาง';
+$lang['js']['mediasize']       = 'ขนาดรูปภาพ';
+$lang['js']['mediatarget']     = 'เป้าหมายของลิงค์';
+$lang['js']['mediaclose']      = 'ปิด';
+$lang['js']['mediainsert']     = 'แทรก';
+$lang['js']['mediadisplayimg'] = 'แสดงรูปภาพ';
+$lang['js']['mediadisplaylnk'] = 'แสดงลิงค์ เท่านั้น';
+$lang['js']['mediasmall']      = 'รูปแบบขนาดเล็ก';
+$lang['js']['mediamedium']     = 'รูปแบบขนาดกลาง';
+$lang['js']['medialarge']      = 'รูปแบบขนาดใหญ่';
+$lang['js']['mediaoriginal']   = 'รูปแบบตั้งต้น';
 $lang['js']['nosmblinks']      = 'เชื่อมไปยังหน้าต่างแบ่งปัน ทำงานได้กับเฉพาะไมโครซอฟท์อินเตอร์เน็ตเอ็กซโปรเรอร์(IE) คุณยังคงสามารถคัดลอกและแปะลิ้งค์ได้';
 $lang['js']['linkwiz']         = 'ลิงค์วิเศษ';
 $lang['js']['linkto']          = 'ลิงค์ไป:';
@@ -114,7 +133,6 @@ $lang['js']['del_confirm']     = 'ต้องการลบรายการ
 $lang['rssfailed']             = 'มีข้อผิดพลาดขณะดูดฟีดนี้';
 $lang['nothingfound']          = 'ไม่พบสิ่งใด';
 $lang['mediaselect']           = 'ไฟล์สื่อ';
-$lang['fileupload']            = 'อัปโหลด';
 $lang['uploadsucc']            = 'อัปโหลดสำเร็จ';
 $lang['uploadfail']            = 'เกิดความขัดข้องในการอัปโหลด';
 $lang['uploadwrong']           = 'การอัพโหลดถูกปฏิเสธ ส่วนขยายไฟล์นี้ต้องห้าม!';
@@ -184,7 +202,6 @@ $lang['qb_sig']                = 'ลายเซ็นพร้อมลงเ
 $lang['qb_smileys']            = 'ภาพแสดงอารมณ์';
 $lang['qb_chars']              = 'อักขระพิเศษ';
 $lang['upperns']               = 'กระโดดขึ้นไปยังเนมสเปซแม่';
-$lang['admin_register']        = 'สร้างบัญชีผู้ใช้';
 $lang['metaedit']              = 'แก้ไขข้อมูลเมต้า';
 $lang['metasaveerr']           = 'มีข้อผิดพลาดในการเขียนข้อมูลเมต้า';
 $lang['metasaveok']            = 'บันทึกเมต้าดาต้าแล้ว';
diff --git a/inc/lang/tr/lang.php b/inc/lang/tr/lang.php
index 1676256a58bc7763de9195aec3b18ba612d7b8f7..12d7f7490cee8bedadd18f18cb0ca24600a0de59 100644
--- a/inc/lang/tr/lang.php
+++ b/inc/lang/tr/lang.php
@@ -13,6 +13,7 @@
  * @author huseyin can <huseyincan73@gmail.com>
  * @author ilker rifat kapaç <irifat@gmail.com>
  * @author İlker R. Kapaç <irifat@gmail.com>
+ * @author Mete Cuma <mcumax@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -44,7 +45,6 @@ $lang['btn_update']            = 'Güncelle';
 $lang['btn_delete']            = 'Sil';
 $lang['btn_back']              = 'Geri';
 $lang['btn_backlink']          = 'Geri linkler';
-$lang['btn_backtomedia']       = 'Çokluortam dosyası seçimine dön';
 $lang['btn_subscribe']         = 'Sayfa DeÄŸiÅŸikliklerini Bildir';
 $lang['btn_profile']           = 'Kullanıcı Bilgilerini Güncelle';
 $lang['btn_reset']             = 'Sıfırla';
@@ -74,11 +74,12 @@ $lang['badpassconfirm']        = 'Üzgünüz, parolanız yanlış';
 $lang['minoredit']             = 'Küçük Değişiklikler';
 $lang['draftdate']             = 'Taslak ÅŸu saatte otomatik kaydedildi:';
 $lang['nosecedit']             = 'Sayfa yakın zamanda değiştirilmiştir, bölüm bilgisi eski kalmıştır. Bunun için bölüm yerine tüm sayfa yüklenmiştir.';
-$lang['searchcreatepage']      = "Aradığınız şeyi bulamadıysanız, ''Sayfayı değiştir'' tuşuna tıklayarak girdiğiniz sorgu adıyla yeni bir sayfa oluşturabilirsiniz .";
+$lang['searchcreatepage']      = 'Aradığınız şeyi bulamadıysanız, \'\'Sayfayı değiştir\'\' tuşuna tıklayarak girdiğiniz sorgu adıyla yeni bir sayfa oluşturabilirsiniz .';
 $lang['regmissing']            = 'Üzgünüz, tüm alanları doldurmalısınız.';
 $lang['reguexists']            = 'Üzgünüz, bu isime sahip bir kullanıcı zaten mevcut.';
 $lang['regsuccess']            = 'Kullanıcı oluşturuldu ve şifre e-posta adresine gönderildi.';
 $lang['regsuccess2']           = 'Kullanıcı oluşturuldu.';
+$lang['regfail']               = 'Kullanıcı oluşturulamadı.';
 $lang['regmailfail']           = 'Şifrenizi e-posta ile gönderirken bir hata oluşmuş gibi görünüyor. Lütfen yönetici ile temasa geçiniz!';
 $lang['regbadmail']            = 'Verilen e-posta adresi geçersiz gibi görünüyor - bunun bir hata olduğunu düşünüyorsanız yönetici ile temasa geçiniz.';
 $lang['regbadpass']            = 'Girilen parolalar aynı değil. Lütfen tekrar deneyiniz.';
@@ -93,6 +94,7 @@ $lang['profdeleteuser']        = 'Hesabı Sil';
 $lang['profdeleted']           = 'Bu wiki\'den hesabınız silindi';
 $lang['profconfdelete']        = 'Bu wiki\'den hesabımı silmek istiyorum. <br/>Bu işlem geri alınamaz';
 $lang['profconfdeletemissing'] = 'Onay kutusu iÅŸaretlenmedi';
+$lang['proffail']              = 'Kullanıcı bilgileri güncellenmedi.';
 $lang['pwdforget']             = 'Parolanızı mı unuttunuz? Yeni bir parola alın';
 $lang['resendna']              = 'Bu wiki parolayı tekrar göndermeyi desteklememektedir.';
 $lang['resendpwd']             = 'İçin yeni şifre belirle';
@@ -154,7 +156,6 @@ $lang['js']['media_overwrt']   = 'Var olan dosyaların üzerine yaz';
 $lang['rssfailed']             = 'Bu beslemeyi çekerken hata oluştu: ';
 $lang['nothingfound']          = 'Hiçbir şey yok.';
 $lang['mediaselect']           = 'Çokluortam dosyası seçimi';
-$lang['fileupload']            = 'Çokluortam dosyası yükleme';
 $lang['uploadsucc']            = 'Yükleme tamam';
 $lang['uploadfail']            = 'Yükleme başarısız. Yetki hatası olabilir!';
 $lang['uploadwrong']           = 'Yükleme engellendi. Bu dosya uzantısına izin verilmiyor!';
@@ -186,6 +187,7 @@ $lang['diff']                  = 'Kullanılan sürüm ile farkları göster';
 $lang['diff2']                 = 'Seçili sürümler arasındaki farkı göster';
 $lang['difflink']              = 'Karşılaştırma görünümüne bağlantı';
 $lang['diff_type']             = 'farklı görünüş';
+$lang['diff_inline']           = 'Satır içi';
 $lang['diff_side']             = 'Yan yana';
 $lang['diffprevrev']           = 'Önceki sürüm';
 $lang['diffnextrev']           = 'Sonraki sürüm';
@@ -244,7 +246,6 @@ $lang['qb_sig']                = 'Ä°mza Ekle';
 $lang['qb_smileys']            = 'Gülen Yüzler';
 $lang['qb_chars']              = 'Özel Karakterler';
 $lang['upperns']               = 'ebeveyn isimalanına atla';
-$lang['admin_register']        = 'Yeni kullanıcı ekle...';
 $lang['metaedit']              = 'Metaverileri DeÄŸiÅŸtir';
 $lang['metasaveerr']           = 'Metaveri yazma başarısız ';
 $lang['metasaveok']            = 'Metaveri kaydedildi';
@@ -260,14 +261,22 @@ $lang['img_camera']            = 'Fotoğraf Makinası:';
 $lang['img_keywords']          = 'Anahtar Sözcükler:';
 $lang['img_width']             = 'GeniÅŸlik:';
 $lang['img_height']            = 'Yükseklik:';
+$lang['subscr_subscribe_success'] = '%s,  %s için abonelik listesine eklendi.';
+$lang['subscr_subscribe_error'] = '%s, %s için abonelik listesine eklenirken hata ile karşılaşıldı.';
+$lang['subscr_subscribe_noaddress'] = 'Oturum bilginiz ile ilişkilendirilmiş bir adres olmadığı için abonelik listesine dahil olamazsınız.';
+$lang['subscr_unsubscribe_success'] = '%s,  %s için abonelik listesinden çıkarıldı.';
+$lang['subscr_unsubscribe_error'] = '%s, %s için abonelik listesinden çıkarılırken hata ile karşılaşıldı.';
+$lang['subscr_already_subscribed'] = '%s zaten %s listesine abone.';
+$lang['subscr_not_subscribed'] = '%s, %s listesine abone deÄŸil.';
+$lang['subscr_m_not_subscribed'] = 'Bu sayfa veya isim alanına (namespace) abone değilsiniz.  ';
 $lang['subscr_m_new_header']   = 'Ãœyelik ekle';
 $lang['subscr_m_current_header'] = 'ÃœyeliÄŸini onayla';
 $lang['subscr_m_unsubscribe']  = 'Ãœyelik iptali';
 $lang['subscr_m_subscribe']    = 'Kayıt ol';
 $lang['subscr_m_receive']      = 'Al';
 $lang['subscr_style_every']    = 'her değişiklikte e-posta gönder';
+$lang['subscr_style_list']     = 'Son e-postadan bu yana değiştirilen sayfaların listesi (her %.2f gün)';
 $lang['authtempfail']          = 'Kullanıcı doğrulama geçici olarak yapılamıyor. Eğer bu durum devam ederse lütfen Wiki yöneticine haber veriniz.';
-$lang['authpwdexpire']         = 'Şifreniz %d gün sonra geçersiz hale gelecek, yakın bir zamanda değiştirmelisiniz.';
 $lang['i_chooselang']          = 'Dili seçiniz';
 $lang['i_installer']           = 'Dokuwiki Kurulum Sihirbazı';
 $lang['i_wikiname']            = 'Wiki Adı';
@@ -277,13 +286,14 @@ $lang['i_problems']            = 'Kurulum sihirbazı aşağıda gösterilen soru
 $lang['i_modified']            = 'Güzenlik sebebiyle bu script sadece yeni ve değiştirilmemiş bir Dokuwiki kurulumunda çalışır. Ya indirdiğiniz paketi yeniden açmalı ya da <a href="http://dokuwiki.org/install"> adresindeki Dokuwiki kurulum kılavuzu</a>na bakmalısınız.';
 $lang['i_funcna']              = '<code>%s</code> PHP fonksiyonu bulunmamaktadır. Barındırma(Hosting) hizmetinde bu özellik kapatılmış olabilir.';
 $lang['i_phpver']              = '<code>%s</code> PHP sürümü, gereken <code>%s</code>  sürümünden daha düşük. PHP kurulumunu yükseltmeniz gerekmektedir.';
+$lang['i_mbfuncoverload']      = 'DokuWiki\'nin çalışması için php.ini dosyasında mbstring.func_overload seçeneği kapalı (değeri 0) olarak ayarlanmalıdır.';
 $lang['i_permfail']            = '<code>%s</code> Dokuwiki tarafından yazılabilir değil. İzin ayarlarını bu klasör için düzeltmeniz gerekmektedir!';
 $lang['i_confexists']          = '<code>%s</code> zaten var';
 $lang['i_writeerr']            = '<code>%s</code> oluşturulamadı. Dosya/Klasör izin ayarlarını gözden geçirip dosyayı elle oluşturmalısınız.';
 $lang['i_badhash']             = 'dokuwiki.php tanınamadı ya da değiştirilmiş (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> - Yanlış veya boş değer';
-$lang['i_success']             = 'Kurulum başarıyla tamamlandı. Şimdi install.php dosyasını silebilirsiniz. <a href="doku.php">Yeni DokuWikiniz</a>i kullanabilirsiniz.';
-$lang['i_failure']             = 'Ayar dosyalarını yazarken bazı hatalar oluştu. <a href="doku.php">Yeni DokuWikiniz</a>i kullanmadan önce bu hatalarınızı elle düzeltmeniz gerekebilir.';
+$lang['i_success']             = 'Kurulum başarıyla tamamlandı. Şimdi install.php dosyasını silebilirsiniz. <a href="doku.php?id=wiki:welcome">Yeni DokuWikiniz</a>i kullanabilirsiniz.';
+$lang['i_failure']             = 'Ayar dosyalarını yazarken bazı hatalar oluştu. <a href="doku.php?id=wiki:welcome">Yeni DokuWikiniz</a>i kullanmadan önce bu hatalarınızı elle düzeltmeniz gerekebilir.';
 $lang['i_policy']              = 'İlk ACL ayarı';
 $lang['i_pol0']                = 'Tamamen Açık Wiki (herkes okuyabilir, yazabilir ve dosya yükleyebilir)';
 $lang['i_pol1']                = 'Açık Wiki (herkes okuyabilir, ancak  sadece üye olanlar yazabilir ve dosya yükleyebilir)';
diff --git a/inc/lang/uk/lang.php b/inc/lang/uk/lang.php
index a6b08c905ecf31bfc2a7897cd7b6aaaf584ad18a..7c99b6322c897c31349eaec70007079709578bb0 100644
--- a/inc/lang/uk/lang.php
+++ b/inc/lang/uk/lang.php
@@ -2,14 +2,17 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ * 
  * @author Oleksiy Voronin <ovoronin@gmail.com>
  * @author serg_stetsuk@ukr.net
  * @author Oleksandr Kunytsia <okunia@gmail.com>
  * @author Uko <uko@uar.net>
- * @author Ulrikhe Lukoie  <lukoie@gmail.com>
+ * @author Ulrikhe Lukoie <lukoie@gmail.com>
  * @author Kate Arzamastseva pshns@ukr.net
  * @author Egor Smkv <egorsmkv@gmail.com>
+ * @author Max Lyashuk <m_lyashuk@ukr.net>
+ * @author Pavel <pavelholovko@yandex.ru>
+ * @author Maksim <nikropol@yandex.ru>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -41,7 +44,6 @@ $lang['btn_update']            = 'Оновити';
 $lang['btn_delete']            = 'Видалити';
 $lang['btn_back']              = 'Назад';
 $lang['btn_backlink']          = 'Посилання сюди';
-$lang['btn_backtomedia']       = 'Назад до вибору медіа-файлу';
 $lang['btn_subscribe']         = 'Підписатися';
 $lang['btn_profile']           = 'Оновити профіль';
 $lang['btn_reset']             = 'Очистити';
@@ -52,7 +54,10 @@ $lang['btn_draftdel']          = 'Знищити чернетку';
 $lang['btn_revert']            = 'Відновити';
 $lang['btn_register']          = 'Реєстрація';
 $lang['btn_apply']             = 'Застосувати';
+$lang['btn_media']             = 'Керування медіа-файлами';
 $lang['btn_deleteuser']        = 'Видалити мій аккаунт';
+$lang['btn_img_backto']        = 'Повернутися до %s';
+$lang['btn_mediaManager']      = 'Показати в медіа менеджері';
 $lang['loggedinas']            = 'Ви:';
 $lang['user']                  = 'Користувач';
 $lang['pass']                  = 'Пароль';
@@ -73,6 +78,7 @@ $lang['regmissing']            = 'Необхідно заповнити всі 
 $lang['reguexists']            = 'Користувач з таким іменем вже існує.';
 $lang['regsuccess']            = 'Користувача створено. Пароль відправлено на e-mail.';
 $lang['regsuccess2']           = 'Користувача створено.';
+$lang['regfail']               = 'Користувач не створений';
 $lang['regmailfail']           = 'При відправленні пароля сталась помилка. Зв’яжіться з адміністратором!';
 $lang['regbadmail']            = 'Схоже, що адреса e-mail невірна - якщо ви вважаєте, що це помилка, зв’яжіться з адміністратором';
 $lang['regbadpass']            = 'Надані паролі не співпадають, спробуйте ще раз.';
@@ -83,6 +89,8 @@ $lang['profnochange']          = 'Немає змін, немає що роби
 $lang['profnoempty']           = 'Ім’я або e-mail не можуть бути пустими.';
 $lang['profchanged']           = 'Профіль успішно змінено.';
 $lang['profdeleteuser']        = 'Видалити аккаунт';
+$lang['profdeleted']           = 'Ваш профіль користувача буде видалено з цієї wiki.';
+$lang['proffail']              = 'Профіль користувача не вдалося поновити.';
 $lang['pwdforget']             = 'Забули пароль? Отримайте новий';
 $lang['resendna']              = 'Ця Вікі не підтримує повторне відправлення пароля.';
 $lang['resendpwd']             = 'Встановити новий пароль для';
@@ -98,6 +106,7 @@ $lang['searchmedia_in']        = 'Шукати у %s';
 $lang['txt_upload']            = 'Виберіть файл для завантаження:';
 $lang['txt_filename']          = 'Завантажити як (не обов\'язкове):';
 $lang['txt_overwrt']           = 'Перезаписати існуючий файл';
+$lang['maxuploadsize']         = 'Відвантаження максимум %s на файл.';
 $lang['lockedby']              = 'Заблоковано:';
 $lang['lockexpire']            = 'Блокування завершується в:';
 $lang['js']['willexpire']      = 'Блокування редагування цієї сторінки закінчується через хвилину.\n Щоб уникнути конфліктів використовуйте кнопку перегляду для продовження блокування.';
@@ -132,13 +141,18 @@ $lang['js']['nosmblinks']      = 'Посилання на мережеві па
 $lang['js']['linkwiz']         = 'Чарівник посилань';
 $lang['js']['linkto']          = 'Посилання на:';
 $lang['js']['del_confirm']     = 'Дійсно знищити обрані елементи?';
+$lang['js']['restore_confirm'] = 'Дійсно відновити цю версію?';
+$lang['js']['media_diff']      = 'Переглянути різницю:';
+$lang['js']['media_diff_portions'] = 'Прогорнути';
+$lang['js']['media_select']    = 'Оберіть файли';
 $lang['js']['media_upload_btn'] = 'Завантажити';
 $lang['js']['media_done_btn']  = 'Успішно';
+$lang['js']['media_drop']      = 'Перетягніть сюди файли для відвантаження';
 $lang['js']['media_cancel']    = 'видалити';
+$lang['js']['media_overwrt']   = 'Перезаписати існуючі файли';
 $lang['rssfailed']             = 'Виникла помилка під час отримання RSS-стрічки: ';
 $lang['nothingfound']          = 'Нічого не знайдено.';
 $lang['mediaselect']           = 'Вибір медіа-файлу';
-$lang['fileupload']            = 'Завантаження медіа-файлу';
 $lang['uploadsucc']            = 'Завантаження пройшло успішно';
 $lang['uploadfail']            = 'Помилка при завантаженні. Можливо неправильні права?';
 $lang['uploadwrong']           = 'Завантаження заборонено. Таке розширення файлу не дозволяється!';
@@ -172,11 +186,13 @@ $lang['difflink']              = 'Посилання на цей список з
 $lang['diff_type']             = 'Переглянути відмінності:';
 $lang['diff_inline']           = 'Вбудувати';
 $lang['diff_side']             = 'Поряд';
+$lang['diffprevrev']           = 'Попередня ревізія';
+$lang['diffnextrev']           = 'Наступна ревізія';
+$lang['difflastrev']           = 'Остання ревізія';
 $lang['line']                  = 'Рядок';
 $lang['breadcrumb']            = 'Відвідано:';
 $lang['youarehere']            = 'Ви тут:';
 $lang['lastmod']               = 'В останнє змінено:';
-$lang['by']                    = ' ';
 $lang['deleted']               = 'знищено';
 $lang['created']               = 'створено';
 $lang['restored']              = 'відновлено стару ревізію (%s)';
@@ -194,7 +210,9 @@ $lang['mail_changed']          = 'сторінку змінено:';
 $lang['mail_subscribe_list']   = 'сторінки, що змінено у просторі імен:';
 $lang['mail_new_user']         = 'новий користувач:';
 $lang['mail_upload']           = 'завантажено файл:';
+$lang['changes_type']          = 'Переглянути зміни ';
 $lang['pages_changes']         = 'Сторінок';
+$lang['media_changes']         = 'Медіа-файли';
 $lang['qb_bold']               = 'Напівжирний текст';
 $lang['qb_italic']             = 'Курсив';
 $lang['qb_underl']             = 'Підкреслений текст';
@@ -220,11 +238,9 @@ $lang['qb_sig']                = 'Додати підпис';
 $lang['qb_smileys']            = 'Посмішки';
 $lang['qb_chars']              = 'Спеціальні символи';
 $lang['upperns']               = 'Перейти до батьківського простору імен';
-$lang['admin_register']        = 'Додати нового користувача';
 $lang['metaedit']              = 'Редагувати метадані';
 $lang['metasaveerr']           = 'Помилка запису метаданих';
 $lang['metasaveok']            = 'Метадані збережено';
-$lang['btn_img_backto']            = 'Повернутися до %s';
 $lang['img_title']             = 'Назва:';
 $lang['img_caption']           = 'Підпис:';
 $lang['img_date']              = 'Дата:';
@@ -235,6 +251,8 @@ $lang['img_copyr']             = 'Авторські права:';
 $lang['img_format']            = 'Формат:';
 $lang['img_camera']            = 'Камера:';
 $lang['img_keywords']          = 'Ключові слова:';
+$lang['img_width']             = 'Ширини:';
+$lang['img_height']            = 'Висота:';
 $lang['subscr_subscribe_success'] = 'Додано %s до списку підписки для %s';
 $lang['subscr_subscribe_error'] = 'Помилка при додавані %s до списку підписки для %s';
 $lang['subscr_subscribe_noaddress'] = 'Немає адреси, асоційованої з Вашим логіном, тому Ви не можете бути додані до списку підписки.';
@@ -277,6 +295,7 @@ $lang['i_pol1']                = 'Публічна Вікі (читання дл
 $lang['i_pol2']                = 'Закрита Вікі (читання, запис та завантаження тільки для зареєстрованих користувачів)';
 $lang['i_retry']               = 'Повторити';
 $lang['i_license']             = 'Будь ласка, виберіть тип ліцензії, під якою Ві бажаєте опублікувати матеріал:';
+$lang['i_license_none']        = 'Не показувати жодної інформації про ліцензії.';
 $lang['recent_global']         = 'Ви переглядаєте зміни в межах простору імен <b>%s</b>. Також можна <a href="%s">переглянути зміни в межах усієї Вікі</a>.';
 $lang['years']                 = '%d років тому';
 $lang['months']                = '%d місяців тому';
@@ -286,3 +305,18 @@ $lang['hours']                 = '%d годин тому';
 $lang['minutes']               = '%d хвилин тому';
 $lang['seconds']               = '%d секунд тому';
 $lang['wordblock']             = 'Ваші зміни не збережено, тому що вони розпізнані як такі, що містять заблокований текст(спам).';
+$lang['media_searchtab']       = 'Пошук';
+$lang['media_file']            = 'Файл';
+$lang['media_viewtab']         = 'Огляд';
+$lang['media_edittab']         = 'Редагувати';
+$lang['media_historytab']      = 'Історія';
+$lang['media_sort_name']       = 'Ім’я';
+$lang['media_sort_date']       = 'Дата';
+$lang['media_meta_edited']     = 'метаданні відредаговано';
+$lang['media_perm_read']       = 'Вибачте, у вас не достатньо прав для читання цього файлу.';
+$lang['media_update']          = 'Завантажити нову версію';
+$lang['media_restore']         = 'Відновити цю версію';
+$lang['currentns']             = 'Поточний діапазон імен';
+$lang['searchresult']          = 'Результати пошуку';
+$lang['plainhtml']             = 'Простий HTML';
+$lang['wikimarkup']            = 'Wiki розмітка';
diff --git a/inc/lang/uk/resetpwd.txt b/inc/lang/uk/resetpwd.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b24e88473749b9bb3c0ee8b4d5f6a98944464f0d
--- /dev/null
+++ b/inc/lang/uk/resetpwd.txt
@@ -0,0 +1,3 @@
+====== Встановити новий пароль ======
+
+Будь-ласка, введіть новий пароль для цієї wiki.
\ No newline at end of file
diff --git a/inc/lang/vi/lang.php b/inc/lang/vi/lang.php
index 41a7d590ff6443b94d0b70d0f060384a9e1c90f3..944a9e5d6d4225a2f181a552e24a9dc855118ed7 100644
--- a/inc/lang/vi/lang.php
+++ b/inc/lang/vi/lang.php
@@ -130,7 +130,6 @@ $lang['js']['media_overwrt']   = 'Ghi đè các file trùng';
 $lang['rssfailed']             = 'Nguồn này gặp phải lỗi';
 $lang['nothingfound']          = 'Không tìm được gì';
 $lang['mediaselect']           = 'Xem';
-$lang['fileupload']            = 'Tải lên tệp media';
 $lang['uploadsucc']            = 'Tải lên thành công';
 $lang['uploadfail']            = 'Tải lên thất bại. Có thể vì không đủ quyền?';
 $lang['uploadwrong']           = 'Tải lên bị từ chối. Cấm tải loại tệp này';
diff --git a/inc/lang/zh-tw/lang.php b/inc/lang/zh-tw/lang.php
index c5e7da000ba68e06912cd260e3f186de59a8a5f8..4cd077381f5a7d5cf377de7431f692e07573b142 100644
--- a/inc/lang/zh-tw/lang.php
+++ b/inc/lang/zh-tw/lang.php
@@ -16,6 +16,7 @@
  * @author Stan <talktostan@gmail.com>
  * @author June-Hao Hou <junehao@gmail.com>
  * @author lioujheyu <lioujheyu@gmail.com>
+ * @author Liou, Jhe-Yu <lioujheyu@gmail.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -47,7 +48,6 @@ $lang['btn_update']            = '更新設定';
 $lang['btn_delete']            = '刪除';
 $lang['btn_back']              = '回上一步';
 $lang['btn_backlink']          = '反向連結';
-$lang['btn_backtomedia']       = '重新選擇圖檔';
 $lang['btn_subscribe']         = '訂閱更動通知';
 $lang['btn_profile']           = '更新個人資料';
 $lang['btn_reset']             = '資料重設';
@@ -159,7 +159,6 @@ $lang['js']['media_overwrt']   = '覆蓋已存在的檔案';
 $lang['rssfailed']             = '擷取 RSS 饋送檔時發生錯誤:';
 $lang['nothingfound']          = '沒找到任何結果。';
 $lang['mediaselect']           = '媒體檔案';
-$lang['fileupload']            = '上傳媒體檔案';
 $lang['uploadsucc']            = '已上傳';
 $lang['uploadfail']            = '無法上傳。是否因權限錯誤?';
 $lang['uploadwrong']           = '拒絕上傳。這個副檔名被禁止了!';
@@ -250,7 +249,6 @@ $lang['qb_sig']                = '插入簽名';
 $lang['qb_smileys']            = '表情符號';
 $lang['qb_chars']              = '特殊字元';
 $lang['upperns']               = '前往父分類名稱';
-$lang['admin_register']        = '新增使用者';
 $lang['metaedit']              = '編輯後設資料';
 $lang['metasaveerr']           = '後設資料無法寫入';
 $lang['metasaveok']            = '後設資料已儲存';
@@ -283,7 +281,6 @@ $lang['subscr_style_every']    = '每次更改都發送信件';
 $lang['subscr_style_digest']   = '對每個頁面發送更改的摘要信件 (每 %.2f 天)';
 $lang['subscr_style_list']     = '自上次發信以來更改的頁面的列表 (每 %.2f 天)';
 $lang['authtempfail']          = '暫不提供帳號認證。若本狀況持續,請通知本 wiki 管理員。';
-$lang['authpwdexpire']         = '您的密碼將在 %d 天內到期,請馬上更換新密碼。';
 $lang['i_chooselang']          = '選擇您的語系';
 $lang['i_installer']           = 'DokuWiki 安裝工具';
 $lang['i_wikiname']            = '本 wiki 的名稱';
@@ -300,8 +297,8 @@ $lang['i_writeerr']            = '無法建立 <code>%s</code>。您必須檢查
 $lang['i_badhash']             = '無法辨識或已遭修改的 dokuwiki.php (hash=<code>%s</code>)';
 $lang['i_badval']              = '<code>%s</code> —— 非法或空白的值';
 $lang['i_success']             = '設定已完成。您現在可以刪除 install.php 檔案。繼續到
-<a href="doku.php">您的新 DokuWiki</a>.';
-$lang['i_failure']             = '寫入設定檔時發生了一些錯誤。您必須在使用<a href="doku.php">您的新 Dokuwiki</a> 之前手動修正它們。';
+<a href="doku.php?id=wiki:welcome">您的新 DokuWiki</a>.';
+$lang['i_failure']             = '寫入設定檔時發生了一些錯誤。您必須在使用<a href="doku.php?id=wiki:welcome">您的新 Dokuwiki</a> 之前手動修正它們。';
 $lang['i_policy']              = '初步的 ACL 政策';
 $lang['i_pol0']                = '開放的 wiki (任何人可讀取、寫入、上傳)';
 $lang['i_pol1']                = '公開的 wiki (任何人可讀取,註冊使用者可寫入與上傳)';
diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php
index d960eb799992373c48b7df481f92754ccebe6c5c..03b1823903f955fb19bc6c4ab42377e578be4ca3 100644
--- a/inc/lang/zh/lang.php
+++ b/inc/lang/zh/lang.php
@@ -24,6 +24,8 @@
  * @author xiqingongzi <Xiqingongzi@Gmail.com>
  * @author qinghao <qingxianhao@gmail.com>
  * @author Yuwei Sun <yuwei@hrz.tu-chemnitz.de>
+ * @author Errol <errol@hotmail.com>
+ * @author Garfield <garfield_550@outlook.com>
  */
 $lang['encoding']              = 'utf-8';
 $lang['direction']             = 'ltr';
@@ -55,7 +57,6 @@ $lang['btn_update']            = 'æ›´æ–°';
 $lang['btn_delete']            = '删除';
 $lang['btn_back']              = '返回';
 $lang['btn_backlink']          = '反向链接';
-$lang['btn_backtomedia']       = '返回到媒体文件选择工具';
 $lang['btn_subscribe']         = '订阅本页更改';
 $lang['btn_profile']           = '更新个人信息';
 $lang['btn_reset']             = '重设';
@@ -90,6 +91,7 @@ $lang['regmissing']            = '对不起,您必须填写所有的字段。'
 $lang['reguexists']            = '对不起,该用户名已经存在。';
 $lang['regsuccess']            = '新用户已建立,密码将通过电子邮件发送给您。';
 $lang['regsuccess2']           = '新用户已建立';
+$lang['regfail']               = '用户不能被创建。';
 $lang['regmailfail']           = '发送密码邮件时产生错误。请联系管理员!';
 $lang['regbadmail']            = '您输入的邮件地址有问题——如果您认为这是系统错误,请联系管理员。';
 $lang['regbadpass']            = '您输入的密码与系统产生的不符,请重试。';
@@ -104,6 +106,7 @@ $lang['profdeleteuser']        = '删除账号';
 $lang['profdeleted']           = '你的用户已经从这个 wiki 中删除';
 $lang['profconfdelete']        = '我希望删除我的账户。<br/>这项操作无法撤销。';
 $lang['profconfdeletemissing'] = '确认框未勾选';
+$lang['proffail']              = '用户设置没有更新。';
 $lang['pwdforget']             = '忘记密码?立即获取新密码';
 $lang['resendna']              = '本维基不支持二次发送密码。';
 $lang['resendpwd']             = '设置新密码用于';
@@ -168,7 +171,6 @@ $lang['js']['media_overwrt']   = '覆盖已存在的文件';
 $lang['rssfailed']             = '获取该 RSS 信息时产生错误:';
 $lang['nothingfound']          = '什么都没有找到。';
 $lang['mediaselect']           = '媒体文件';
-$lang['fileupload']            = '上传媒体文件';
 $lang['uploadsucc']            = '上传成功';
 $lang['uploadfail']            = '上传失败。也许是上传权限错误。';
 $lang['uploadwrong']           = '上传失败。该扩展名被禁止。';
@@ -259,7 +261,6 @@ $lang['qb_sig']                = '插入签名';
 $lang['qb_smileys']            = '表情符号';
 $lang['qb_chars']              = '特殊字符';
 $lang['upperns']               = '跳转到父级名空间';
-$lang['admin_register']        = '添加新用户';
 $lang['metaedit']              = '编辑元数据';
 $lang['metasaveerr']           = '写入元数据失败';
 $lang['metasaveok']            = '元数据已保存';
@@ -292,7 +293,6 @@ $lang['subscr_style_every']    = '对每次更改发送邮件';
 $lang['subscr_style_digest']   = '对每个页面发送更改的摘要邮件(每 %.2f 天)';
 $lang['subscr_style_list']     = '自上封邮件以来更改的页面的列表(每 %.2f 天)';
 $lang['authtempfail']          = '用户认证暂时无法使用。如果该状态一直存在,请通知维基管理员。';
-$lang['authpwdexpire']         = '您的密码将在 %d 天内过期,请尽快更改';
 $lang['i_chooselang']          = '选择您的语言';
 $lang['i_installer']           = 'DokuWiki 安装工具';
 $lang['i_wikiname']            = '维基名称';
@@ -356,7 +356,10 @@ $lang['media_perm_read']       = '抱歉,您没有足够权限读取这些文
 $lang['media_perm_upload']     = '抱歉,您没有足够权限来上传文件。';
 $lang['media_update']          = '上传新版本';
 $lang['media_restore']         = '恢复这个版本';
+$lang['media_acl_warning']     = '此列表可能不完全是由ACL限制和隐藏的页面。';
 $lang['currentns']             = '当前命名空间';
 $lang['searchresult']          = '搜索结果';
 $lang['plainhtml']             = '纯HTML';
 $lang['wikimarkup']            = 'Wiki Markup 语言';
+$lang['page_nonexist_rev']     = '页面在 %s 不存在。它曾创建于 <a href="%s">%s</a>。';
+$lang['unable_to_parse_date']  = '无法解析参数 "%s"。';
diff --git a/inc/load.php b/inc/load.php
index 18786dc79c56805cd69827c4382c84e11fc62d35..99e004b23ec577e2198540bb4dade4e6ddd97d30 100644
--- a/inc/load.php
+++ b/inc/load.php
@@ -70,9 +70,7 @@ function load_autoload($name){
         'IXR_Client'            => DOKU_INC.'inc/IXR_Library.php',
         'IXR_IntrospectionServer' => DOKU_INC.'inc/IXR_Library.php',
         'Doku_Plugin_Controller'=> DOKU_INC.'inc/plugincontroller.class.php',
-        'GeSHi'                 => DOKU_INC.'inc/geshi.php',
         'Tar'                   => DOKU_INC.'inc/Tar.class.php',
-        'TarLib'                => DOKU_INC.'inc/TarLib.class.php',
         'ZipLib'                => DOKU_INC.'inc/ZipLib.class.php',
         'DokuWikiFeedCreator'   => DOKU_INC.'inc/feedcreator.class.php',
         'Doku_Parser_Mode'      => DOKU_INC.'inc/parser/parser.php',
@@ -109,8 +107,15 @@ function load_autoload($name){
     );
 
     if(isset($classes[$name])){
-        require_once($classes[$name]);
-        return;
+        require ($classes[$name]);
+        return true;
+    }
+
+    // our own namespace
+    $name = str_replace('\\', '/', $name);
+    if(substr($name, 0, 9) == 'dokuwiki/') {
+        require substr($name, 9) . '.php';
+        return true;
     }
 
     // Plugin loading
@@ -120,9 +125,10 @@ function load_autoload($name){
         $c = ((count($m) === 4) ? "/{$m[3]}" : '');
         $plg = DOKU_PLUGIN . "{$m[2]}/{$m[1]}$c.php";
         if(file_exists($plg)){
-            include_once DOKU_PLUGIN . "{$m[2]}/{$m[1]}$c.php";
+            require $plg;
         }
-        return;
+        return true;
     }
+    return false;
 }
 
diff --git a/inc/mail.php b/inc/mail.php
index 9f1b1f3d633d5047acbfb0f98310127422b346e7..e4d06fd8625c8b5606fbbfd28cb803a1667faaf3 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -96,15 +96,23 @@ function mail_setup(){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  * @see    mail()
+ *
+ * @deprecated User the Mailer:: class instead
  */
 function mail_send($to, $subject, $body, $from='', $cc='', $bcc='', $headers=null, $params=null){
-
+    dbg_deprecated('class Mailer::');
     $message = compact('to','subject','body','from','cc','bcc','headers','params');
     return trigger_event('MAIL_MESSAGE_SEND',$message,'_mail_send_action');
 }
 
+/**
+ * @param $data
+ * @return bool
+ *
+ * @deprecated User the Mailer:: class instead
+ */
 function _mail_send_action($data) {
-
+    dbg_deprecated('class Mailer::');
     // retrieve parameters from event data, $to, $subject, $body, $from, $cc, $bcc, $headers, $params
     $to = $data['to'];
     $subject = $data['subject'];
@@ -177,8 +185,11 @@ function _mail_send_action($data) {
  * @param string  $string Multiple adresses separated by commas
  * @param string  $header Name of the header (To,Bcc,Cc,...)
  * @param boolean $names  Allow named Recipients?
+ *
+ * @deprecated User the Mailer:: class instead
  */
 function mail_encode_address($string,$header='',$names=true){
+    dbg_deprecated('class Mailer::');
     $headers = '';
     $parts = explode(',',$string);
     foreach ($parts as $part){
diff --git a/inc/media.php b/inc/media.php
index 81081d5dc9cf7e96a832992f204bd0f61889a6c7..e9fff14895e09fd7de578461f021a44a4aad6e53 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -1860,7 +1860,6 @@ function media_searchform($ns,$query='',$fullscreen=false){
     $form->addHidden('ns', $ns);
     $form->addHidden($fullscreen ? 'mediado' : 'do', 'searchlist');
 
-    if (!$fullscreen) $form->addElement('<div class="upload">' . $lang['mediasearch'] . '</div>'.NL);
     $form->addElement(form_makeOpenTag('p'));
     $form->addElement(form_makeTextField('q', $query,$lang['searchmedia'],'','',array('title'=>sprintf($lang['searchmedia_in'],hsc($ns).':*'))));
     $form->addElement(form_makeButton('submit', '', $lang['btn_search']));
diff --git a/inc/pageutils.php b/inc/pageutils.php
index 3757126610c259f8b26de4e867b60a120d2fe1bd..a5bf039d50215548416701516afb25906a3f6006 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -243,7 +243,6 @@ function sectionID($title,&$check) {
     return $title;
 }
 
-
 /**
  * Wiki page existence check
  *
@@ -251,9 +250,10 @@ function sectionID($title,&$check) {
  *
  * @author Chris Smith <chris@jalakai.co.uk>
  *
- * @param string     $id     page id
- * @param string|int $rev    empty or revision timestamp
- * @param bool       $clean  flag indicating that $id should be cleaned (see wikiFN as well)
+ * @param string $id page id
+ * @param string|int $rev empty or revision timestamp
+ * @param bool $clean flag indicating that $id should be cleaned (see wikiFN as well)
+ * @param bool $date_at
  * @return bool exists?
  */
 function page_exists($id,$rev='',$clean=true, $date_at=false) {
@@ -489,9 +489,11 @@ function resolve_id($ns,$id,$clean=true){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  *
- * @param string  $ns     namespace which is context of id
- * @param string &$page   (reference) relative media id, updated to resolved id
- * @param bool   &$exists (reference) updated with existance of media
+ * @param string $ns namespace which is context of id
+ * @param string &$page (reference) relative media id, updated to resolved id
+ * @param bool &$exists (reference) updated with existance of media
+ * @param int|string $rev
+ * @param bool $date_at
  */
 function resolve_mediaid($ns,&$page,&$exists,$rev='',$date_at=false){
     $page   = resolve_id($ns,$page);
@@ -502,7 +504,7 @@ function resolve_mediaid($ns,&$page,&$exists,$rev='',$date_at=false){
             $rev = $medialog_rev;
         }
     }
-    
+
     $file   = mediaFN($page,$rev);
     $exists = file_exists($file);
 }
@@ -512,9 +514,11 @@ function resolve_mediaid($ns,&$page,&$exists,$rev='',$date_at=false){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  *
- * @param string  $ns     namespace which is context of id
- * @param string &$page   (reference) relative page id, updated to resolved id
- * @param bool   &$exists (reference) updated with existance of media
+ * @param string $ns namespace which is context of id
+ * @param string &$page (reference) relative page id, updated to resolved id
+ * @param bool &$exists (reference) updated with existance of media
+ * @param string $rev
+ * @param bool $date_at
  */
 function resolve_pageid($ns,&$page,&$exists,$rev='',$date_at=false ){
     global $conf;
diff --git a/inc/parser/code.php b/inc/parser/code.php
index 00b956c277df503efa584535c8c59722aa30a2ab..2353e0dfaf1eff91150cb6b7a420d726eafa9470 100644
--- a/inc/parser/code.php
+++ b/inc/parser/code.php
@@ -21,6 +21,11 @@ class Doku_Renderer_code extends Doku_Renderer {
         $filename = utf8_basename($filename);
         $filename = utf8_stripspecials($filename, '_');
 
+        // send CRLF to Windows clients
+        if(strpos($INPUT->server->str('HTTP_USER_AGENT'), 'Windows') !== false) {
+            $text = str_replace("\n", "\r\n", $text);
+        }
+
         if($this->_codeblock == $INPUT->str('codeblock')) {
             header("Content-Type: text/plain; charset=utf-8");
             header("Content-Disposition: attachment; filename=$filename");
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index b8e2de82ae48f372e4d6faf1b878b00d444bc2ba..815ac39c5d343dd57c16a992b504c5f21cd72182 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -17,7 +17,7 @@ class Doku_Handler {
 
     var $rewriteBlocks = true;
 
-    function Doku_Handler() {
+    function __construct() {
         $this->CallWriter = new Doku_Handler_CallWriter($this);
     }
 
@@ -295,7 +295,7 @@ class Doku_Handler {
         switch ( $state ) {
             case DOKU_LEXER_ENTER:
                 $ReWriter = new Doku_Handler_Preformatted($this->CallWriter);
-                $this->CallWriter = & $ReWriter;
+                $this->CallWriter = $ReWriter;
                 $this->_addCall('preformatted_start',array(), $pos);
             break;
             case DOKU_LEXER_EXIT:
@@ -715,15 +715,21 @@ function Doku_Handler_Parse_Media($match) {
 }
 
 //------------------------------------------------------------------------
-class Doku_Handler_CallWriter {
+interface Doku_Handler_CallWriter_Interface {
+    public function writeCall($call);
+    public function writeCalls($calls);
+    public function finalise();
+}
+
+class Doku_Handler_CallWriter implements Doku_Handler_CallWriter_Interface {
 
     var $Handler;
 
     /**
      * @param Doku_Handler $Handler
      */
-    function Doku_Handler_CallWriter(& $Handler) {
-        $this->Handler = & $Handler;
+    function __construct(Doku_Handler $Handler) {
+        $this->Handler = $Handler;
     }
 
     function writeCall($call) {
@@ -748,7 +754,7 @@ class Doku_Handler_CallWriter {
  *
  * @author    Chris Smith <chris@jalakai.co.uk>
  */
-class Doku_Handler_Nest {
+class Doku_Handler_Nest implements Doku_Handler_CallWriter_Interface {
 
     var $CallWriter;
     var $calls = array();
@@ -762,8 +768,8 @@ class Doku_Handler_Nest {
      * @param  string     $close          closing instruction name, this is required to properly terminate the
      *                                    syntax mode if the document ends without a closing pattern
      */
-    function Doku_Handler_Nest(& $CallWriter, $close="nest_close") {
-        $this->CallWriter = & $CallWriter;
+    function __construct(Doku_Handler_CallWriter_Interface $CallWriter, $close="nest_close") {
+        $this->CallWriter = $CallWriter;
 
         $this->closingInstruction = $close;
     }
@@ -808,7 +814,7 @@ class Doku_Handler_Nest {
     }
 }
 
-class Doku_Handler_List {
+class Doku_Handler_List implements Doku_Handler_CallWriter_Interface {
 
     var $CallWriter;
 
@@ -818,8 +824,8 @@ class Doku_Handler_List {
 
     const NODE = 1;
 
-    function Doku_Handler_List(& $CallWriter) {
-        $this->CallWriter = & $CallWriter;
+    function __construct(Doku_Handler_CallWriter_Interface $CallWriter) {
+        $this->CallWriter = $CallWriter;
     }
 
     function writeCall($call) {
@@ -1018,7 +1024,7 @@ class Doku_Handler_List {
 }
 
 //------------------------------------------------------------------------
-class Doku_Handler_Preformatted {
+class Doku_Handler_Preformatted implements Doku_Handler_CallWriter_Interface {
 
     var $CallWriter;
 
@@ -1028,8 +1034,8 @@ class Doku_Handler_Preformatted {
 
 
 
-    function Doku_Handler_Preformatted(& $CallWriter) {
-        $this->CallWriter = & $CallWriter;
+    function __construct(Doku_Handler_CallWriter_Interface $CallWriter) {
+        $this->CallWriter = $CallWriter;
     }
 
     function writeCall($call) {
@@ -1078,7 +1084,7 @@ class Doku_Handler_Preformatted {
 }
 
 //------------------------------------------------------------------------
-class Doku_Handler_Quote {
+class Doku_Handler_Quote implements Doku_Handler_CallWriter_Interface {
 
     var $CallWriter;
 
@@ -1086,8 +1092,8 @@ class Doku_Handler_Quote {
 
     var $quoteCalls = array();
 
-    function Doku_Handler_Quote(& $CallWriter) {
-        $this->CallWriter = & $CallWriter;
+    function __construct(Doku_Handler_CallWriter_Interface $CallWriter) {
+        $this->CallWriter = $CallWriter;
     }
 
     function writeCall($call) {
@@ -1170,7 +1176,7 @@ class Doku_Handler_Quote {
 }
 
 //------------------------------------------------------------------------
-class Doku_Handler_Table {
+class Doku_Handler_Table implements Doku_Handler_CallWriter_Interface {
 
     var $CallWriter;
 
@@ -1185,8 +1191,8 @@ class Doku_Handler_Table {
     var $currentRow = array('tableheader' => 0, 'tablecell' => 0);
     var $countTableHeadRows = 0;
 
-    function Doku_Handler_Table(& $CallWriter) {
-        $this->CallWriter = & $CallWriter;
+    function __construct(Doku_Handler_CallWriter_Interface $CallWriter) {
+        $this->CallWriter = $CallWriter;
     }
 
     function writeCall($call) {
@@ -1551,7 +1557,7 @@ class Doku_Handler_Block {
      *
      * @author Andreas Gohr <andi@splitbrain.org>
      */
-    function Doku_Handler_Block(){
+    function __construct(){
         global $DOKU_PLUGINS;
         //check if syntax plugins were loaded
         if(empty($DOKU_PLUGINS['syntax'])) return;
diff --git a/inc/parser/lexer.php b/inc/parser/lexer.php
index b46a5f505c38207dfefd6c2295482cba64773d49..17aa6c17058671c20b3c188b1bd3567b4711911d 100644
--- a/inc/parser/lexer.php
+++ b/inc/parser/lexer.php
@@ -46,7 +46,7 @@ class Doku_LexerParallelRegex {
      *                         for insensitive.
      * @access public
      */
-    function Doku_LexerParallelRegex($case) {
+    function __construct($case) {
         $this->_case = $case;
         $this->_patterns = array();
         $this->_labels = array();
@@ -232,7 +232,7 @@ class Doku_LexerStateStack {
      * @param string $start        Starting state name.
      * @access public
      */
-    function Doku_LexerStateStack($start) {
+    function __construct($start) {
         $this->_stack = array($start);
     }
 
@@ -296,11 +296,11 @@ class Doku_Lexer {
      * @param boolean $case            True for case sensitive.
      * @access public
      */
-    function Doku_Lexer(&$parser, $start = "accept", $case = false) {
+    function __construct($parser, $start = "accept", $case = false) {
         $this->_case = $case;
         /** @var Doku_LexerParallelRegex[] _regexes */
         $this->_regexes = array();
-        $this->_parser = &$parser;
+        $this->_parser = $parser;
         $this->_mode = new Doku_LexerStateStack($start);
         $this->_mode_handlers = array();
     }
diff --git a/inc/parser/parser.php b/inc/parser/parser.php
index 5f86cf5c4ebf8be1505d1520936fae62cd0c5066..7814e94f6104b11647e9016fd9cc573d28e11a23 100644
--- a/inc/parser/parser.php
+++ b/inc/parser/parser.php
@@ -64,24 +64,24 @@ class Doku_Parser {
     /**
      * @param Doku_Parser_Mode_base $BaseMode
      */
-    function addBaseMode(& $BaseMode) {
-        $this->modes['base'] =& $BaseMode;
+    function addBaseMode($BaseMode) {
+        $this->modes['base'] = $BaseMode;
         if ( !$this->Lexer ) {
             $this->Lexer = new Doku_Lexer($this->Handler,'base', true);
         }
-        $this->modes['base']->Lexer =& $this->Lexer;
+        $this->modes['base']->Lexer = $this->Lexer;
     }
 
     /**
      * PHP preserves order of associative elements
      * Mode sequence is important
      */
-    function addMode($name, & $Mode) {
+    function addMode($name, Doku_Parser_Mode_Interface $Mode) {
         if ( !isset($this->modes['base']) ) {
             $this->addBaseMode(new Doku_Parser_Mode_base());
         }
-        $Mode->Lexer = & $this->Lexer;
-        $this->modes[$name] =& $Mode;
+        $Mode->Lexer = $this->Lexer;
+        $this->modes[$name] = $Mode;
     }
 
     function connectModes() {
@@ -226,7 +226,7 @@ class Doku_Parser_Mode_Plugin extends DokuWiki_Plugin implements Doku_Parser_Mod
 //-------------------------------------------------------------------
 class Doku_Parser_Mode_base extends Doku_Parser_Mode {
 
-    function Doku_Parser_Mode_base() {
+    function __construct() {
         global $PARSER_MODES;
 
         $this->allowedModes = array_merge (
@@ -248,7 +248,7 @@ class Doku_Parser_Mode_base extends Doku_Parser_Mode {
 //-------------------------------------------------------------------
 class Doku_Parser_Mode_footnote extends Doku_Parser_Mode {
 
-    function Doku_Parser_Mode_footnote() {
+    function __construct() {
         global $PARSER_MODES;
 
         $this->allowedModes = array_merge (
@@ -416,7 +416,7 @@ class Doku_Parser_Mode_formatting extends Doku_Parser_Mode {
     /**
      * @param string $type
      */
-    function Doku_Parser_Mode_formatting($type) {
+    function __construct($type) {
         global $PARSER_MODES;
 
         if ( !array_key_exists($type, $this->formatting) ) {
@@ -470,7 +470,7 @@ class Doku_Parser_Mode_formatting extends Doku_Parser_Mode {
 //-------------------------------------------------------------------
 class Doku_Parser_Mode_listblock extends Doku_Parser_Mode {
 
-    function Doku_Parser_Mode_listblock() {
+    function __construct() {
         global $PARSER_MODES;
 
         $this->allowedModes = array_merge (
@@ -504,7 +504,7 @@ class Doku_Parser_Mode_listblock extends Doku_Parser_Mode {
 //-------------------------------------------------------------------
 class Doku_Parser_Mode_table extends Doku_Parser_Mode {
 
-    function Doku_Parser_Mode_table() {
+    function __construct() {
         global $PARSER_MODES;
 
         $this->allowedModes = array_merge (
@@ -648,7 +648,7 @@ class Doku_Parser_Mode_file extends Doku_Parser_Mode {
 //-------------------------------------------------------------------
 class Doku_Parser_Mode_quote extends Doku_Parser_Mode {
 
-    function Doku_Parser_Mode_quote() {
+    function __construct() {
         global $PARSER_MODES;
 
         $this->allowedModes = array_merge (
@@ -682,7 +682,7 @@ class Doku_Parser_Mode_acronym extends Doku_Parser_Mode {
     var $acronyms = array();
     var $pattern = '';
 
-    function Doku_Parser_Mode_acronym($acronyms) {
+    function __construct($acronyms) {
         usort($acronyms,array($this,'_compare'));
         $this->acronyms = $acronyms;
     }
@@ -729,7 +729,7 @@ class Doku_Parser_Mode_smiley extends Doku_Parser_Mode {
     var $smileys = array();
     var $pattern = '';
 
-    function Doku_Parser_Mode_smiley($smileys) {
+    function __construct($smileys) {
         $this->smileys = $smileys;
     }
 
@@ -762,7 +762,7 @@ class Doku_Parser_Mode_wordblock extends Doku_Parser_Mode {
     var $badwords = array();
     var $pattern = '';
 
-    function Doku_Parser_Mode_wordblock($badwords) {
+    function __construct($badwords) {
         $this->badwords = $badwords;
     }
 
@@ -797,7 +797,7 @@ class Doku_Parser_Mode_entity extends Doku_Parser_Mode {
     var $entities = array();
     var $pattern = '';
 
-    function Doku_Parser_Mode_entity($entities) {
+    function __construct($entities) {
         $this->entities = $entities;
     }
 
diff --git a/inc/parser/renderer.php b/inc/parser/renderer.php
index e1d28267a1fab6c5c052bece3f3e312316686e6d..d7a3faef88fde27ff39ad214eba717f8ce9aee23 100644
--- a/inc/parser/renderer.php
+++ b/inc/parser/renderer.php
@@ -707,6 +707,18 @@ class Doku_Renderer extends DokuWiki_Plugin {
     function tablethead_close() {
     }
 
+    /**
+     * Open a table body
+     */
+    function tabletbody_open() {
+    }
+
+    /**
+     * Close a table body
+     */
+    function tabletbody_close() {
+    }
+
     /**
      * Open a table row
      */
@@ -794,18 +806,26 @@ class Doku_Renderer extends DokuWiki_Plugin {
             $url = $this->interwiki[$shortcut];
         } else {
             // Default to Google I'm feeling lucky
-            $url      = 'http://www.google.com/search?q={URL}&amp;btnI=lucky';
+            $url      = 'https://www.google.com/search?q={URL}&amp;btnI=lucky';
             $shortcut = 'go';
         }
 
         //split into hash and url part
-        @list($reference, $hash) = explode('#', $reference, 2);
+        $hash = strrchr($reference, '#');
+        if($hash) {
+            $reference = substr($reference, 0, -strlen($hash));
+            $hash = substr($hash, 1);
+        }
 
         //replace placeholder
         if(preg_match('#\{(URL|NAME|SCHEME|HOST|PORT|PATH|QUERY)\}#', $url)) {
             //use placeholders
             $url    = str_replace('{URL}', rawurlencode($reference), $url);
-            $url    = str_replace('{NAME}', $reference, $url);
+            //wiki names will be cleaned next, otherwise urlencode unsafe chars
+            $url    = str_replace('{NAME}', ($url{0} === ':') ? $reference :
+                                  preg_replace_callback('/[[\\\\\]^`{|}#%]/', function($match) {
+                                    return rawurlencode($match[0]);
+                                  }, $reference), $url);
             $parsed = parse_url($reference);
             if(!$parsed['port']) $parsed['port'] = 80;
             $url = str_replace('{SCHEME}', $parsed['scheme'], $url);
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index c68d206be449b07d2a957a695371eba727d5573f..9d7613f32cbd7e0565f2e2a1e42e204aa2ab2487 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -761,27 +761,40 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
     /**
      * Render a CamelCase link
      *
-     * @param string $link The link name
+     * @param string $link       The link name
+     * @param bool   $returnonly whether to return html or write to doc attribute
      * @see http://en.wikipedia.org/wiki/CamelCase
      */
-    function camelcaselink($link) {
-        $this->internallink($link, $link);
+    function camelcaselink($link, $returnonly = false) {
+        if($returnonly) {
+          return $this->internallink($link, $link, null, true);
+        } else {
+          $this->internallink($link, $link);
+        }
     }
 
     /**
      * Render a page local link
      *
-     * @param string $hash hash link identifier
-     * @param string $name name for the link
+     * @param string $hash       hash link identifier
+     * @param string $name       name for the link
+     * @param bool   $returnonly whether to return html or write to doc attribute
      */
-    function locallink($hash, $name = null) {
+    function locallink($hash, $name = null, $returnonly = false) {
         global $ID;
         $name  = $this->_getLinkTitle($name, $hash, $isImage);
         $hash  = $this->_headerToLink($hash);
         $title = $ID.' ↵';
-        $this->doc .= '<a href="#'.$hash.'" title="'.$title.'" class="wikilink1">';
-        $this->doc .= $name;
-        $this->doc .= '</a>';
+
+        $doc = '<a href="#'.$hash.'" title="'.$title.'" class="wikilink1">';
+        $doc .= $name;
+        $doc .= '</a>';
+
+        if($returnonly) {
+          return $doc;
+        } else {
+          $this->doc .= $doc;
+        }
     }
 
     /**
@@ -884,10 +897,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
     /**
      * Render an external link
      *
-     * @param string       $url  full URL with scheme
-     * @param string|array $name name for the link, array for media file
+     * @param string       $url        full URL with scheme
+     * @param string|array $name       name for the link, array for media file
+     * @param bool         $returnonly whether to return html or write to doc attribute
      */
-    function externallink($url, $name = null) {
+    function externallink($url, $name = null, $returnonly = false) {
         global $conf;
 
         $name = $this->_getLinkTitle($name, $url, $isImage);
@@ -900,7 +914,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
 
         // is there still an URL?
         if(!$url) {
-            $this->doc .= $name;
+            if($returnonly) {
+                return $name;
+            } else {
+                $this->doc .= $name;
+            }
             return;
         }
 
@@ -926,7 +944,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
         if($conf['relnofollow']) $link['more'] .= ' rel="nofollow"';
 
         //output formatted
-        $this->doc .= $this->_formatLink($link);
+        if($returnonly) {
+            return $this->_formatLink($link);
+        } else {
+            $this->doc .= $this->_formatLink($link);
+        }
     }
 
     /**
@@ -934,12 +956,13 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
      *
      * You may want to use $this->_resolveInterWiki() here
      *
-     * @param string       $match     original link - probably not much use
-     * @param string|array $name      name for the link, array for media file
-     * @param string       $wikiName  indentifier (shortcut) for the remote wiki
-     * @param string       $wikiUri   the fragment parsed from the original link
+     * @param string       $match      original link - probably not much use
+     * @param string|array $name       name for the link, array for media file
+     * @param string       $wikiName   indentifier (shortcut) for the remote wiki
+     * @param string       $wikiUri    the fragment parsed from the original link
+     * @param bool         $returnonly whether to return html or write to doc attribute
      */
-    function interwikilink($match, $name = null, $wikiName, $wikiUri) {
+    function interwikilink($match, $name = null, $wikiName, $wikiUri, $returnonly = false) {
         global $conf;
 
         $link           = array();
@@ -977,16 +1000,21 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
         $link['title'] = htmlspecialchars($link['url']);
 
         //output formatted
-        $this->doc .= $this->_formatLink($link);
+        if($returnonly) {
+            return $this->_formatLink($link);
+        } else {
+            $this->doc .= $this->_formatLink($link);
+        }
     }
 
     /**
      * Link to windows share
      *
-     * @param string       $url  the link
-     * @param string|array $name name for the link, array for media file
+     * @param string       $url        the link
+     * @param string|array $name       name for the link, array for media file
+     * @param bool         $returnonly whether to return html or write to doc attribute
      */
-    function windowssharelink($url, $name = null) {
+    function windowssharelink($url, $name = null, $returnonly = false) {
         global $conf;
 
         //simple setup
@@ -1005,12 +1033,15 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
 
         $link['title'] = $this->_xmlEntities($url);
         $url           = str_replace('\\', '/', $url);
-        $url           = ltrim($url,'/');
         $url           = 'file:///'.$url;
         $link['url']   = $url;
 
         //output formatted
-        $this->doc .= $this->_formatLink($link);
+        if($returnonly) {
+            return $this->_formatLink($link);
+        } else {
+            $this->doc .= $this->_formatLink($link);
+        }
     }
 
     /**
@@ -1018,10 +1049,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
      *
      * Honors $conf['mailguard'] setting
      *
-     * @param string       $address Email-Address
-     * @param string|array $name    name for the link, array for media file
+     * @param string       $address    Email-Address
+     * @param string|array $name       name for the link, array for media file
+     * @param bool         $returnonly whether to return html or write to doc attribute
      */
-    function emaillink($address, $name = null) {
+    function emaillink($address, $name = null, $returnonly = false) {
         global $conf;
         //simple setup
         $link           = array();
@@ -1053,7 +1085,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
         $link['title'] = $title;
 
         //output formatted
-        $this->doc .= $this->_formatLink($link);
+        if($returnonly) {
+            return $this->_formatLink($link);
+        } else {
+            $this->doc .= $this->_formatLink($link);
+        }
     }
 
     /**
@@ -1289,6 +1325,20 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
         $this->doc .= DOKU_TAB.'</thead>'.DOKU_LF;
     }
 
+    /**
+     * Open a table body
+     */
+    function tabletbody_open() {
+        $this->doc .= DOKU_TAB.'<tbody>'.DOKU_LF;
+    }
+
+    /**
+     * Close a table body
+     */
+    function tabletbody_close() {
+        $this->doc .= DOKU_TAB.'</tbody>'.DOKU_LF;
+    }
+
     /**
      * Open a table row
      */
@@ -1753,7 +1803,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
         $out .= '</audio>'.NL;
         return $out;
     }
-    
+
     /**
      * _getLastMediaRevisionAt is a helperfunction to internalmedia() and _media()
      * which returns an existing media revision less or equal to rev or date_at
diff --git a/inc/parserutils.php b/inc/parserutils.php
index 17c331ef5a9dc6b57901736f04695ef95b004047..5b96d39feba76a558d2189d6323319516aa4d92a 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -121,15 +121,21 @@ function p_cached_output($file, $format='xhtml', $id='') {
     $cache = new cache_renderer($id, $file, $format);
     if ($cache->useCache()) {
         $parsed = $cache->retrieveCache(false);
-        if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- cachefile {$cache->cache} used -->\n";
+        if($conf['allowdebug'] && $format=='xhtml') {
+            $parsed .= "\n<!-- cachefile {$cache->cache} used -->\n";
+        }
     } else {
         $parsed = p_render($format, p_cached_instructions($file,false,$id), $info);
 
         if ($info['cache'] && $cache->storeCache($parsed)) {              // storeCache() attempts to save cachefile
-            if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- no cachefile used, but created {$cache->cache} -->\n";
+            if($conf['allowdebug'] && $format=='xhtml') {
+                $parsed .= "\n<!-- no cachefile used, but created {$cache->cache} -->\n";
+            }
         }else{
             $cache->removeCache();                     //try to delete cachefile
-            if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- no cachefile used, caching forbidden -->\n";
+            if($conf['allowdebug'] && $format=='xhtml') {
+                $parsed .= "\n<!-- no cachefile used, caching forbidden -->\n";
+            }
         }
     }
 
@@ -616,8 +622,9 @@ function p_sort_modes($a, $b){
  * @author Andreas Gohr <andi@splitbrain.org>
  *
  * @param string $mode
- * @param array|null|false  $instructions
- * @param array  $info returns render info like enabled toc and cache
+ * @param array|null|false $instructions
+ * @param array $info returns render info like enabled toc and cache
+ * @param string $date_at
  * @return null|string rendered output
  */
 function p_render($mode,$instructions,&$info,$date_at=''){
@@ -632,7 +639,7 @@ function p_render($mode,$instructions,&$info,$date_at=''){
     if($date_at) {
         $Renderer->date_at = $date_at;
     }
-    
+
     $Renderer->smileys = getSmileys();
     $Renderer->entities = getEntities();
     $Renderer->acronyms = getAcronyms();
@@ -746,14 +753,13 @@ function p_xhtml_cached_geshi($code, $language, $wrapper='pre') {
     $cache = getCacheName($language.$code,".code");
     $ctime = @filemtime($cache);
     if($ctime && !$INPUT->bool('purge') &&
-            $ctime > filemtime(DOKU_INC.'inc/geshi.php') &&                 // geshi changed
-            $ctime > @filemtime(DOKU_INC.'inc/geshi/'.$language.'.php') &&  // language syntax definition changed
+            $ctime > filemtime(DOKU_INC.'vendor/composer/installed.json') &&  // libraries changed
             $ctime > filemtime(reset($config_cascade['main']['default']))){ // dokuwiki changed
         $highlighted_code = io_readFile($cache, false);
 
     } else {
 
-        $geshi = new GeSHi($code, $language, DOKU_INC . 'inc/geshi');
+        $geshi = new GeSHi($code, $language);
         $geshi->set_encoding('utf-8');
         $geshi->enable_classes();
         $geshi->set_header_type(GESHI_HEADER_PRE);
diff --git a/inc/phpseclib/Crypt_AES.php b/inc/phpseclib/Crypt_AES.php
index 81fa2feab66bc09569a807fbffbf470a4097b20c..f2df78351090d9138c7fca39a1a69012d46ef3ad 100644
--- a/inc/phpseclib/Crypt_AES.php
+++ b/inc/phpseclib/Crypt_AES.php
@@ -164,9 +164,9 @@ class Crypt_AES extends Crypt_Rijndael {
      * @param optional Integer $mode
      * @access public
      */
-    function Crypt_AES($mode = CRYPT_AES_MODE_CBC)
+    function __construct($mode = CRYPT_AES_MODE_CBC)
     {
-        parent::Crypt_Rijndael($mode);
+        parent::__construct($mode);
     }
 
     /**
diff --git a/inc/phpseclib/Crypt_Base.php b/inc/phpseclib/Crypt_Base.php
index 7c650ca729b1d93f5aeeae621498e98713b5cde6..4fb9990c75372e16c2a62d5f39b1c3ce91fe3bab 100644
--- a/inc/phpseclib/Crypt_Base.php
+++ b/inc/phpseclib/Crypt_Base.php
@@ -445,7 +445,7 @@ class Crypt_Base {
      * @param optional Integer $mode
      * @access public
      */
-    function Crypt_Base($mode = CRYPT_MODE_CBC)
+    function __construct($mode = CRYPT_MODE_CBC)
     {
         $const_crypt_mode = 'CRYPT_' . $this->const_namespace . '_MODE';
 
diff --git a/inc/phpseclib/Crypt_Hash.php b/inc/phpseclib/Crypt_Hash.php
index 840fcd5088fa4c8e64e5f572d948fda2a3d40610..61825d3c3936834324fa7ff87e88b8146aaf55d2 100644
--- a/inc/phpseclib/Crypt_Hash.php
+++ b/inc/phpseclib/Crypt_Hash.php
@@ -143,7 +143,7 @@ class Crypt_Hash {
      * @return Crypt_Hash
      * @access public
      */
-    function Crypt_Hash($hash = 'sha1')
+    function __construct($hash = 'sha1')
     {
         if ( !defined('CRYPT_HASH_MODE') ) {
             switch (true) {
diff --git a/inc/phpseclib/Crypt_Rijndael.php b/inc/phpseclib/Crypt_Rijndael.php
index c63e0ff7e3f4c7ef07add63b4b72886ea0675c2a..33f42da173a5cd386136ae7b04823d9bfefc2018 100644
--- a/inc/phpseclib/Crypt_Rijndael.php
+++ b/inc/phpseclib/Crypt_Rijndael.php
@@ -699,9 +699,9 @@ class Crypt_Rijndael extends Crypt_Base {
      * @param optional Integer $mode
      * @access public
      */
-    function Crypt_Rijndael($mode = CRYPT_RIJNDAEL_MODE_CBC)
+    function __construct($mode = CRYPT_RIJNDAEL_MODE_CBC)
     {
-        parent::Crypt_Base($mode);
+        parent::__construct($mode);
     }
 
     /**
diff --git a/inc/pluginutils.php b/inc/pluginutils.php
index 4d591869d53eaaad88f23b6960ff2484f9dd90d8..60f79869fa3a62633e15a7c58d070f81d3868963 100644
--- a/inc/pluginutils.php
+++ b/inc/pluginutils.php
@@ -103,3 +103,34 @@ function plugin_getcascade() {
     global $plugin_controller;
     return $plugin_controller->getCascade();
 }
+
+
+/**
+ * Return the currently operating admin plugin or null
+ * if not on an admin plugin page
+ *
+ * @return Doku_Plugin_Admin
+ */
+function plugin_getRequestAdminPlugin(){
+    static $admin_plugin = false;
+    global $ACT,$INPUT,$INFO;
+
+    if ($admin_plugin === false) {
+        if (($ACT == 'admin') && ($page = $INPUT->str('page', '', true)) != '') {
+            $pluginlist = plugin_list('admin');
+            if (in_array($page, $pluginlist)) {
+                // attempt to load the plugin
+                /** @var $admin_plugin DokuWiki_Admin_Plugin */
+                $admin_plugin = plugin_load('admin', $page);
+                // verify
+                if ($admin_plugin && $admin_plugin->forAdminOnly() && !$INFO['isadmin']) {
+                    $admin_plugin = null;
+                    $INPUT->remove('page');
+                    msg('For admins only',-1);
+                }
+            }
+        }
+    }
+
+    return $admin_plugin;
+}
diff --git a/inc/remote.php b/inc/remote.php
index 861353a190b74fb0d1a4f5e693ee6d5d565e5185..3e032049d8e82343fca30dfe44083233edc6e48e 100644
--- a/inc/remote.php
+++ b/inc/remote.php
@@ -234,7 +234,7 @@ class RemoteAPI {
         global $INPUT;
 
         if (!$conf['remote']) {
-            return false;
+            throw new RemoteAccessDeniedException('server error. RPC server not enabled.',-32604); //should not be here,just throw
         }
         if(!$conf['useacl']) {
             return true;
diff --git a/inc/search.php b/inc/search.php
index 935969d3f2fb2871b79e15c76826e07dddcbbb3b..cc3579c3c787d554b82cbd580d1d0bc1f46604ca 100644
--- a/inc/search.php
+++ b/inc/search.php
@@ -28,6 +28,11 @@ function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort='natural'){
     $files  = array();
     $filepaths = array();
 
+    // safeguard against runaways #1452
+    if($base == '' || $base == '/') {
+        throw new RuntimeException('No valid $base passed to search() - possible misconfiguration or bug');
+    }
+
     //read in directories and files
     $dh = @opendir($base.'/'.$dir);
     if(!$dh) return;
diff --git a/inc/subscription.php b/inc/subscription.php
index 8b6dcb27edb9ecd69488340a0a24cc18ca8f4f04..74bec656dd57bc41664470b44a47ac9103a6dc0d 100644
--- a/inc/subscription.php
+++ b/inc/subscription.php
@@ -691,19 +691,3 @@ class Subscription {
         $data['addresslist'] = trim($addresslist.','.implode(',', $result), ',');
     }
 }
-
-/**
- * Compatibility wrapper around Subscription:notifyaddresses
- *
- * for plugins emitting COMMON_NOTIFY_ADDRESSLIST themselves and relying on on this to
- * be the default handler
- *
- * @param array $data event data for
- *
- * @deprecated 2012-12-07
- */
-function subscription_addresslist(&$data) {
-    dbg_deprecated('class Subscription');
-    $sub = new Subscription();
-    $sub->notifyaddresses($data);
-}
diff --git a/inc/template.php b/inc/template.php
index 646f0873a7bf76d88743746c8550d495ecd7edf9..a1bdc8d640f29c48cae89ccd7ec86aa3eece9923 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -218,18 +218,9 @@ function tpl_toc($return = false) {
             $toc = array();
         }
     } elseif($ACT == 'admin') {
-        // try to load admin plugin TOC FIXME: duplicates code from tpl_admin
-        $plugin = null;
-        $class  = $INPUT->str('page');
-        if(!empty($class)) {
-            $pluginlist = plugin_list('admin');
-            if(in_array($class, $pluginlist)) {
-                // attempt to load the plugin
-                /** @var $plugin DokuWiki_Admin_Plugin */
-                $plugin = plugin_load('admin', $class);
-            }
-        }
-        if( ($plugin !== null) && (!$plugin->forAdminOnly() || $INFO['isadmin']) ) {
+        // try to load admin plugin TOC
+        /** @var $plugin DokuWiki_Admin_Plugin */
+        if ($plugin = plugin_getRequestAdminPlugin()) {
             $toc = $plugin->getTOC();
             $TOC = $toc; // avoid later rebuild
         }
@@ -306,6 +297,7 @@ function tpl_metaheaders($alt = true) {
     // prepare seed for js and css
     $tseed   = $updateVersion;
     $depends = getConfigFiles('main');
+    $depends[] = DOKU_CONF."tpl/".$conf['template']."/style.ini";
     foreach($depends as $f) $tseed .= @filemtime($f);
     $tseed   = md5($tseed);
 
@@ -402,7 +394,7 @@ function tpl_metaheaders($alt = true) {
     // load stylesheets
     $head['link'][] = array(
         'rel' => 'stylesheet', 'type'=> 'text/css',
-        'href'=> DOKU_BASE.'lib/exe/css.php?t='.$conf['template'].'&tseed='.$tseed
+        'href'=> DOKU_BASE.'lib/exe/css.php?t='.rawurlencode($conf['template']).'&tseed='.$tseed
     );
 
     // make $INFO and other vars available to JavaScripts
@@ -417,7 +409,7 @@ function tpl_metaheaders($alt = true) {
     // load external javascript
     $head['script'][] = array(
         'type'=> 'text/javascript', 'charset'=> 'utf-8', '_data'=> '',
-        'src' => DOKU_BASE.'lib/exe/js.php'.'?tseed='.$tseed
+        'src' => DOKU_BASE.'lib/exe/js.php'.'?t='.rawurlencode($conf['template']).'&tseed='.$tseed
     );
 
     // trigger event here
@@ -655,6 +647,8 @@ function tpl_get_action($type) {
     $params      = array('do' => $type);
     $nofollow    = true;
     $replacement = '';
+
+    $unknown = false;
     switch($type) {
         case 'edit':
             // most complicated type - we need to decide on current action
@@ -779,9 +773,23 @@ function tpl_get_action($type) {
             //$type = 'media';
             break;
         default:
-            return '[unknown %s type]';
+            //unknown type
+            $unknown = true;
+    }
+
+    $data = compact('accesskey', 'type', 'id', 'method', 'params', 'nofollow', 'replacement');
+
+    $evt = new Doku_Event('TPL_ACTION_GET', $data);
+    if($evt->advise_before()) {
+        //handle unknown types
+        if($unknown) {
+            $data = '[unknown %s type]';
+        }
     }
-    return compact('accesskey', 'type', 'id', 'method', 'params', 'nofollow', 'replacement');
+    $evt->advise_after();
+    unset($evt);
+
+    return $data;
 }
 
 /**
@@ -840,9 +848,10 @@ function tpl_searchform($ajax = true, $autocomplete = true) {
     print '<input type="hidden" name="do" value="search" />';
     print '<input type="text" ';
     if($ACT == 'search') print 'value="'.htmlspecialchars($QUERY).'" ';
+    print 'placeholder="'.$lang['btn_search'].'" ';
     if(!$autocomplete) print 'autocomplete="off" ';
     print 'id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" />';
-    print '<input type="submit" value="'.$lang['btn_search'].'" class="button" title="'.$lang['btn_search'].'" />';
+    print '<button type="submit" title="'.$lang['btn_search'].'">'.$lang['btn_search'].'</button>';
     if($ajax) print '<div id="qsearch__out" class="ajax_qsearch JSpopup"></div>';
     print '</div></form>';
     return true;
@@ -1034,6 +1043,8 @@ function tpl_pageinfo($ret = false) {
  * @return bool|string
  */
 function tpl_pagetitle($id = null, $ret = false) {
+    global $ACT, $INPUT, $conf, $lang;
+
     if(is_null($id)) {
         global $ID;
         $id = $ID;
@@ -1041,14 +1052,60 @@ function tpl_pagetitle($id = null, $ret = false) {
 
     $name = $id;
     if(useHeading('navigation')) {
-        $title = p_get_first_heading($id);
-        if($title) $name = $title;
+        $first_heading = p_get_first_heading($id);
+        if($first_heading) $name = $first_heading;
+    }
+
+    // default page title is the page name, modify with the current action
+    switch ($ACT) {
+        // admin functions
+        case 'admin' :
+            $page_title = $lang['btn_admin'];
+            // try to get the plugin name
+            /** @var $plugin DokuWiki_Admin_Plugin */
+            if ($plugin = plugin_getRequestAdminPlugin()){
+                $plugin_title = $plugin->getMenuText($conf['lang']);
+                $page_title = $plugin_title ? $plugin_title : $plugin->getPluginName();
+            }
+            break;
+
+        // user functions
+        case 'login' :
+        case 'profile' :
+        case 'register' :
+        case 'resendpwd' :
+            $page_title = $lang['btn_'.$ACT];
+            break;
+
+         // wiki functions
+        case 'search' :
+        case 'index' :
+            $page_title = $lang['btn_'.$ACT];
+            break;
+
+        // page functions
+        case 'edit' :
+            $page_title = "✎ ".$name;
+            break;
+
+        case 'revisions' :
+            $page_title = $name . ' - ' . $lang['btn_revs'];
+            break;
+
+        case 'backlink' :
+        case 'recent' :
+        case 'subscribe' :
+            $page_title = $name . ' - ' . $lang['btn_'.$ACT];
+            break;
+
+        default : // SHOW and anything else not included
+            $page_title = $name;
     }
 
     if($ret) {
-        return hsc($name);
+        return hsc($page_title);
     } else {
-        print hsc($name);
+        print hsc($page_title);
         return true;
     }
 }
@@ -1573,6 +1630,12 @@ function tpl_actiondropdown($empty = '', $button = '&gt;') {
     /** @var Input $INPUT */
     global $INPUT;
 
+    $action_structure = array(
+        'page_tools' => array('edit', 'revert', 'revisions', 'backlink', 'subscribe'),
+        'site_tools' => array('recent', 'media', 'index'),
+        'user_tools' => array('login', 'register', 'profile', 'admin'),
+    );
+
     echo '<form action="'.script().'" method="get" accept-charset="utf-8">';
     echo '<div class="no">';
     echo '<input type="hidden" name="id" value="'.$ID.'" />';
@@ -1584,50 +1647,17 @@ function tpl_actiondropdown($empty = '', $button = '&gt;') {
     echo '<select name="do" class="edit quickselect" title="'.$lang['tools'].'">';
     echo '<option value="">'.$empty.'</option>';
 
-    echo '<optgroup label="'.$lang['page_tools'].'">';
-    $act = tpl_get_action('edit');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('revert');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('revisions');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('backlink');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('subscribe');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-    echo '</optgroup>';
-
-    echo '<optgroup label="'.$lang['site_tools'].'">';
-    $act = tpl_get_action('recent');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('media');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('index');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-    echo '</optgroup>';
-
-    echo '<optgroup label="'.$lang['user_tools'].'">';
-    $act = tpl_get_action('login');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('register');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('profile');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-
-    $act = tpl_get_action('admin');
-    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-    echo '</optgroup>';
+    foreach($action_structure as $tools => $actions) {
+        echo '<optgroup label="'.$lang[$tools].'">';
+        foreach($actions as $action) {
+            $act = tpl_get_action($action);
+            if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+        }
+        echo '</optgroup>';
+    }
 
     echo '</select>';
-    echo '<input type="submit" value="'.$button.'" />';
+    echo '<button type="submit">'.$button.'</button>';
     echo '</div>';
     echo '</form>';
 }
@@ -1968,5 +1998,27 @@ function tpl_classes() {
     return join(' ', $classes);
 }
 
+/**
+ * Create event for tools menues
+ *
+ * @author Anika Henke <anika@selfthinker.org>
+ * @param string $toolsname name of menu
+ * @param array $items
+ * @param string $view e.g. 'main', 'detail', ...
+ */
+function tpl_toolsevent($toolsname, $items, $view = 'main') {
+    $data = array(
+        'view' => $view,
+        'items' => $items
+    );
+
+    $hook = 'TEMPLATE_' . strtoupper($toolsname) . '_DISPLAY';
+    $evt = new Doku_Event($hook, $data);
+    if($evt->advise_before()) {
+        foreach($evt->data['items'] as $k => $html) echo $html;
+    }
+    $evt->advise_after();
+}
+
 //Setup VIM: ex: et ts=4 :
 
diff --git a/inc/utf8.php b/inc/utf8.php
index f86217686e219f0321cb34be948858920e8a90a1..2b6a0c4989752575155ad6565fdd47a821e87d4a 100644
--- a/inc/utf8.php
+++ b/inc/utf8.php
@@ -356,8 +356,12 @@ if(!function_exists('utf8_strtolower')){
      * @return string
      */
     function utf8_strtolower($string){
-        if(UTF8_MBSTRING) return mb_strtolower($string,'utf-8');
-
+        if(UTF8_MBSTRING) {
+            if (class_exists("Normalizer", $autoload = false)) 
+                return normalizer::normalize(mb_strtolower($string,'utf-8'));
+            else
+                return (mb_strtolower($string,'utf-8'));
+        }
         global $UTF8_UPPER_TO_LOWER;
         return strtr($string,$UTF8_UPPER_TO_LOWER);
     }
@@ -1066,11 +1070,11 @@ if(!UTF8_MBSTRING){
             "z"=>"Z","y"=>"Y","x"=>"X","w"=>"W","v"=>"V","u"=>"U","t"=>"T","s"=>"S","r"=>"R","q"=>"Q",
             "p"=>"P","o"=>"O","n"=>"N","m"=>"M","l"=>"L","k"=>"K","j"=>"J","i"=>"I","h"=>"H","g"=>"G",
             "f"=>"F","e"=>"E","d"=>"D","c"=>"C","b"=>"B","a"=>"A","ῳ"=>"ῼ","ῥ"=>"Ῥ","ῡ"=>"Ῡ","ῑ"=>"Ῑ",
-            "ῐ"=>"Ῐ","ῃ"=>"ῌ","ι"=>"Ι","ᾳ"=>"ᾼ","ᾱ"=>"Ᾱ","ᾰ"=>"Ᾰ","ᾧ"=>"ᾯ","ᾦ"=>"ᾮ","ᾥ"=>"ᾭ","ᾤ"=>"ᾬ",
+            "ῐ"=>"Ῐ","ῃ"=>"ῌ","ι"=>"Ι","ᾳ"=>"ᾼ","ᾱ"=>"Ᾱ","ᾰ"=>"Ᾰ","ᾧ"=>"ᾯ","ᾦ"=>"ᾮ","ᾥ"=>"ᾭ","ᾤ"=>"ᾬ",
             "ᾣ"=>"ᾫ","ᾢ"=>"ᾪ","ᾡ"=>"ᾩ","ᾗ"=>"ᾟ","ᾖ"=>"ᾞ","ᾕ"=>"ᾝ","ᾔ"=>"ᾜ","ᾓ"=>"ᾛ","ᾒ"=>"ᾚ","ᾑ"=>"ᾙ",
-            "ᾐ"=>"ᾘ","ᾇ"=>"ᾏ","ᾆ"=>"ᾎ","ᾅ"=>"ᾍ","ᾄ"=>"ᾌ","ᾃ"=>"ᾋ","ᾂ"=>"ᾊ","ᾁ"=>"ᾉ","ᾀ"=>"ᾈ","ώ"=>"Ώ",
-            "ὼ"=>"Ὼ","ύ"=>"Ύ","ὺ"=>"Ὺ","ό"=>"Ό","ὸ"=>"Ὸ","ί"=>"Ί","ὶ"=>"Ὶ","ή"=>"Ή","ὴ"=>"Ὴ","έ"=>"Έ",
-            "ὲ"=>"Ὲ","ά"=>"Ά","ὰ"=>"Ὰ","ὧ"=>"Ὧ","ὦ"=>"Ὦ","ὥ"=>"Ὥ","ὤ"=>"Ὤ","ὣ"=>"Ὣ","ὢ"=>"Ὢ","ὡ"=>"Ὡ",
+            "ᾐ"=>"ᾘ","ᾇ"=>"ᾏ","ᾆ"=>"ᾎ","ᾅ"=>"ᾍ","ᾄ"=>"ᾌ","ᾃ"=>"ᾋ","ᾂ"=>"ᾊ","ᾁ"=>"ᾉ","ᾀ"=>"ᾈ","ώ"=>"Ώ",
+            "ὼ"=>"Ὼ","ύ"=>"Ύ","ὺ"=>"Ὺ","ό"=>"Ό","ὸ"=>"Ὸ","ί"=>"Ί","ὶ"=>"Ὶ","ή"=>"Ή","ὴ"=>"Ὴ","έ"=>"Έ",
+            "ὲ"=>"Ὲ","ά"=>"Ά","ὰ"=>"Ὰ","ὧ"=>"Ὧ","ὦ"=>"Ὦ","ὥ"=>"Ὥ","ὤ"=>"Ὤ","ὣ"=>"Ὣ","ὢ"=>"Ὢ","ὡ"=>"Ὡ",
             "ὗ"=>"Ὗ","ὕ"=>"Ὕ","ὓ"=>"Ὓ","ὑ"=>"Ὑ","ὅ"=>"Ὅ","ὄ"=>"Ὄ","ὃ"=>"Ὃ","ὂ"=>"Ὂ","ὁ"=>"Ὁ","ὀ"=>"Ὀ",
             "ἷ"=>"Ἷ","ἶ"=>"Ἶ","ἵ"=>"Ἵ","ἴ"=>"Ἴ","ἳ"=>"Ἳ","ἲ"=>"Ἲ","ἱ"=>"Ἱ","ἰ"=>"Ἰ","ἧ"=>"Ἧ","ἦ"=>"Ἦ",
             "ἥ"=>"Ἥ","ἤ"=>"Ἤ","ἣ"=>"Ἣ","ἢ"=>"Ἢ","ἡ"=>"Ἡ","ἕ"=>"Ἕ","ἔ"=>"Ἔ","ἓ"=>"Ἓ","ἒ"=>"Ἒ","ἑ"=>"Ἑ",
@@ -1145,11 +1149,11 @@ if(!UTF8_MBSTRING){
             "Z"=>"z","Y"=>"y","X"=>"x","W"=>"w","V"=>"v","U"=>"u","T"=>"t","S"=>"s","R"=>"r","Q"=>"q",
             "P"=>"p","O"=>"o","N"=>"n","M"=>"m","L"=>"l","K"=>"k","J"=>"j","I"=>"i","H"=>"h","G"=>"g",
             "F"=>"f","E"=>"e","D"=>"d","C"=>"c","B"=>"b","A"=>"a","ῼ"=>"ῳ","Ῥ"=>"ῥ","Ῡ"=>"ῡ","Ῑ"=>"ῑ",
-            "Ῐ"=>"ῐ","ῌ"=>"ῃ","Ι"=>"ι","ᾼ"=>"ᾳ","Ᾱ"=>"ᾱ","Ᾰ"=>"ᾰ","ᾯ"=>"ᾧ","ᾮ"=>"ᾦ","ᾭ"=>"ᾥ","ᾬ"=>"ᾤ",
+            "Ῐ"=>"ῐ","ῌ"=>"ῃ","Ι"=>"ι","ᾼ"=>"ᾳ","Ᾱ"=>"ᾱ","Ᾰ"=>"ᾰ","ᾯ"=>"ᾧ","ᾮ"=>"ᾦ","ᾭ"=>"ᾥ","ᾬ"=>"ᾤ",
             "ᾫ"=>"ᾣ","ᾪ"=>"ᾢ","ᾩ"=>"ᾡ","ᾟ"=>"ᾗ","ᾞ"=>"ᾖ","ᾝ"=>"ᾕ","ᾜ"=>"ᾔ","ᾛ"=>"ᾓ","ᾚ"=>"ᾒ","ᾙ"=>"ᾑ",
-            "ᾘ"=>"ᾐ","ᾏ"=>"ᾇ","ᾎ"=>"ᾆ","ᾍ"=>"ᾅ","ᾌ"=>"ᾄ","ᾋ"=>"ᾃ","ᾊ"=>"ᾂ","ᾉ"=>"ᾁ","ᾈ"=>"ᾀ","Ώ"=>"ώ",
-            "Ὼ"=>"ὼ","Ύ"=>"ύ","Ὺ"=>"ὺ","Ό"=>"ό","Ὸ"=>"ὸ","Ί"=>"ί","Ὶ"=>"ὶ","Ή"=>"ή","Ὴ"=>"ὴ","Έ"=>"έ",
-            "Ὲ"=>"ὲ","Ά"=>"ά","Ὰ"=>"ὰ","Ὧ"=>"ὧ","Ὦ"=>"ὦ","Ὥ"=>"ὥ","Ὤ"=>"ὤ","Ὣ"=>"ὣ","Ὢ"=>"ὢ","Ὡ"=>"ὡ",
+            "ᾘ"=>"ᾐ","ᾏ"=>"ᾇ","ᾎ"=>"ᾆ","ᾍ"=>"ᾅ","ᾌ"=>"ᾄ","ᾋ"=>"ᾃ","ᾊ"=>"ᾂ","ᾉ"=>"ᾁ","ᾈ"=>"ᾀ","Ώ"=>"ώ",
+            "Ὼ"=>"ὼ","Ύ"=>"ύ","Ὺ"=>"ὺ","Ό"=>"ό","Ὸ"=>"ὸ","Ί"=>"ί","Ὶ"=>"ὶ","Ή"=>"ή","Ὴ"=>"ὴ","Έ"=>"έ",
+            "Ὲ"=>"ὲ","Ά"=>"ά","Ὰ"=>"ὰ","Ὧ"=>"ὧ","Ὦ"=>"ὦ","Ὥ"=>"ὥ","Ὤ"=>"ὤ","Ὣ"=>"ὣ","Ὢ"=>"ὢ","Ὡ"=>"ὡ",
             "Ὗ"=>"ὗ","Ὕ"=>"ὕ","Ὓ"=>"ὓ","Ὑ"=>"ὑ","Ὅ"=>"ὅ","Ὄ"=>"ὄ","Ὃ"=>"ὃ","Ὂ"=>"ὂ","Ὁ"=>"ὁ","Ὀ"=>"ὀ",
             "Ἷ"=>"ἷ","Ἶ"=>"ἶ","Ἵ"=>"ἵ","Ἴ"=>"ἴ","Ἳ"=>"ἳ","Ἲ"=>"ἲ","Ἱ"=>"ἱ","Ἰ"=>"ἰ","Ἧ"=>"ἧ","Ἦ"=>"ἦ",
             "Ἥ"=>"ἥ","Ἤ"=>"ἤ","Ἣ"=>"ἣ","Ἢ"=>"ἢ","Ἡ"=>"ἡ","Ἕ"=>"ἕ","Ἔ"=>"ἔ","Ἓ"=>"ἓ","Ἒ"=>"ἒ","Ἑ"=>"ἑ",
@@ -1355,11 +1359,11 @@ global $UTF8_SPECIAL_CHARS2;
 if(empty($UTF8_SPECIAL_CHARS2)) $UTF8_SPECIAL_CHARS2 =
     "\x1A".' !"#$%&\'()+,/;<=>?@[\]^`{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•�'.
     '�—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½�'.
-    '�¿×÷ˇ˘˙˚˛˜˝̣̀́̃̉΄΅·ϖְֱֲֳִֵֶַָֹֻּֽ־ֿ�'.
+    '�¿×÷ˇ˘˙˚˛˜˝̣̀́̃̉΄΅·ϖְֱֲֳִֵֶַָֹֻּֽ־ֿ�'.
     '�ׁׂ׃׳״،؛؟ـًٌٍَُِّْ٪฿‌‍‎‏–—―‗‘’‚“”�'.
-    '��†‡•…‰′″‹›⁄₧₪₫€№℘™Ωℵ←↑→↓↔↕↵'.
+    '��†‡•…‰′″‹›⁄₧₪₫€№℘™Ωℵ←↑→↓↔↕↵'.
     '⇐⇑⇒⇓⇔∀∂∃∅∆∇∈∉∋∏∑−∕∗∙√∝∞∠∧∨�'.
-    '�∪∫∴∼≅≈≠≡≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅⌐⌠⌡〈〉⑩─�'.
+    '�∪∫∴∼≅≈≠≡≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅⌐⌠⌡〈〉⑩─�'.
     '��┌┐└┘├┤┬┴┼═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠'.
     '╡╢╣╤╥╦╧╨╩╪╫╬▀▄█▌▐░▒▓■▲▼◆◊●�'.
     '�★☎☛☞♠♣♥♦✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕�'.
diff --git a/index.php b/index.php
index ad0807727c4afb4092c595346e2fc0c570ee3798..689ce1779b6209787e4d55adbeec3bce4e4dd1af 100644
--- a/index.php
+++ b/index.php
@@ -1,8 +1,68 @@
 <?php
 /**
- * Forwarder to doku.php
+ * Forwarder/Router to doku.php
+ *
+ * In normal usage, this script simply redirects to doku.php. However it can also be used as a routing
+ * script with PHP's builtin webserver. It takes care of .htaccess compatible rewriting, directory/file
+ * access permission checking and passing on static files.
+ *
+ * Usage example:
+ *
+ *   php -S localhost:8000 index.php
  *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author     Andreas Gohr <andi@splitbrain.org>
  */
-header("Location: doku.php");
+if(php_sapi_name() != 'cli-server') {
+    header("Location: doku.php");
+    exit;
+}
+
+# ROUTER starts below
+
+# avoid path traversal
+$_SERVER['SCRIPT_NAME'] = str_replace('/../', '/', $_SERVER['SCRIPT_NAME']);
+
+# routing aka. rewriting
+if(preg_match('/^\/_media\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
+    # media dispatcher
+    $_GET['media'] = $m[1];
+    require $_SERVER['DOCUMENT_ROOT'] . '/lib/exe/fetch.php';
+
+} else if(preg_match('/^\/_detail\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
+    # image detail view
+    $_GET['media'] = $m[1];
+    require $_SERVER['DOCUMENT_ROOT'] . '/lib/exe/detail.php';
+
+} else if(preg_match('/^\/_media\/(.*)/', $_SERVER['SCRIPT_NAME'], $m)) {
+    # exports
+    $_GET['do'] = 'export_' . $m[1];
+    $_GET['id'] = $m[2];
+    require $_SERVER['DOCUMENT_ROOT'] . '/doku.php';
+
+} elseif($_SERVER['SCRIPT_NAME'] == '/index.php') {
+    # 404s are automatically mapped to index.php
+    if(isset($_SERVER['PATH_INFO'])) {
+        $_GET['id'] = $_SERVER['PATH_INFO'];
+    }
+    require $_SERVER['DOCUMENT_ROOT'] . '/doku.php';
+
+} else if(file_exists($_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_NAME'])) {
+    # existing files
+
+    # access limitiations
+    if(preg_match('/\/([\._]ht|README$|VERSION$|COPYING$)/', $_SERVER['SCRIPT_NAME']) or
+        preg_match('/^\/(data|conf|bin|inc)\//', $_SERVER['SCRIPT_NAME'])
+    ) {
+        die('Access denied');
+    }
+
+    if(substr($_SERVER['SCRIPT_NAME'], -4) == '.php') {
+        # php scripts
+        require $_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_NAME'];
+    } else {
+        # static files
+        return false;
+    }
+}
+# 404
diff --git a/install.php b/install.php
index 1a2d03dff8372a56efb5e804fa09ff05a87e518d..6002ec88cb8699177d09f79b6beaf5130c325ea2 100644
--- a/install.php
+++ b/install.php
@@ -58,6 +58,7 @@ $dokuwiki_hash = array(
     '2013-05-10'   => '7b62b75245f57f122d3e0f8ed7989623',
     '2013-12-08'   => '263c76af309fbf083867c18a34ff5214',
     '2014-05-05'   => '263c76af309fbf083867c18a34ff5214',
+    '2015-08-10'   => '263c76af309fbf083867c18a34ff5214'
 );
 
 
@@ -243,7 +244,7 @@ function print_form($d){
 
     </fieldset>
     <fieldset id="process">
-        <input class="button" type="submit" name="submit" value="<?php echo $lang['btn_save']?>" />
+        <button type="submit" name="submit"><?php echo $lang['btn_save']?></button>
     </fieldset>
     </form>
     <?php
@@ -256,7 +257,7 @@ function print_retry() {
     <form action="" method="get">
       <fieldset>
         <input type="hidden" name="l" value="<?php echo $LC ?>" />
-        <input class="button" type="submit" value="<?php echo $lang['i_retry'];?>" />
+        <button type="submit"><?php echo $lang['i_retry'];?></button>
       </fieldset>
     </form>
     <?php
@@ -619,7 +620,7 @@ function langsel(){
         echo '<option value="'.$l.'" '.$sel.'>'.$l.'</option>';
     }
     echo '</select> ';
-    echo '<input type="submit" value="'.$lang['btn_update'].'" />';
+    echo '<button type="submit">'.$lang['btn_update'].'</button>';
     echo '</form>';
 }
 
diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php
index a200a3dedd2fde7302dfa1d17114ca5e2954cc1f..b3e9a618f565143707904fd89770accba787111f 100644
--- a/lib/exe/ajax.php
+++ b/lib/exe/ajax.php
@@ -303,7 +303,8 @@ function ajax_mediaupload(){
         );
     }
     $json = new JSON;
-    echo htmlspecialchars($json->encode($result), ENT_NOQUOTES);
+    header('Content-Type: application/json');
+    echo $json->encode($result);
 }
 
 /**
@@ -428,7 +429,7 @@ function ajax_linkwiz(){
 
         echo '<a href="'.$link.'" title="'.htmlspecialchars($item['id']).'" class="wikilink1">'.$name.'</a>';
 
-        if($item['title']){
+        if(!blank($item['title'])){
             echo '<span>'.htmlspecialchars($item['title']).'</span>';
         }
         echo '</div>';
diff --git a/lib/exe/css.php b/lib/exe/css.php
index 701cebaed2c517c9f2b21ab63805ca2f1a78aaa6..507a687371798b97d0aefe22bbfd215b2817fdf1 100644
--- a/lib/exe/css.php
+++ b/lib/exe/css.php
@@ -32,24 +32,23 @@ function css_out(){
     global $config_cascade;
     global $INPUT;
 
-    // decide from where to get the template
-    $tpl = trim(preg_replace('/[^\w-]+/','',$INPUT->str('t')));
-    if(!$tpl) $tpl = $conf['template'];
-
-    // load style.ini
-    $styleini = css_styleini($tpl);
-    
-    // find mediatypes
     if ($INPUT->str('s') == 'feed') {
         $mediatypes = array('feed');
         $type = 'feed';
     } else {
-        $mediatypes = array_unique(array_merge(array('screen', 'all', 'print'), array_keys($styleini['stylesheets'])));
+        $mediatypes = array('screen', 'all', 'print');
         $type = '';
     }
 
+    // decide from where to get the template
+    $tpl = trim(preg_replace('/[^\w-]+/','',$INPUT->str('t')));
+    if(!$tpl) $tpl = $conf['template'];
+
     // The generated script depends on some dynamic options
-    $cache = new cache('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tpl.$type,'.css');
+    $cache = new cache('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].$INPUT->int('preview').DOKU_BASE.$tpl.$type,'.css');
+
+    // load styl.ini
+    $styleini = css_styleini($tpl, $INPUT->bool('preview'));
 
     // if old 'default' userstyle setting exists, make it 'screen' userstyle for backwards compatibility
     if (isset($config_cascade['userstyle']['default'])) {
@@ -60,9 +59,9 @@ function css_out(){
     $tplinc = tpl_incdir($tpl);
     $cache_files = getConfigFiles('main');
     $cache_files[] = $tplinc.'style.ini';
-    $cache_files[] = $tplinc.'style.local.ini'; // @deprecated
     $cache_files[] = DOKU_CONF."tpl/$tpl/style.ini";
     $cache_files[] = __FILE__;
+    if($INPUT->bool('preview')) $cache_files[] = $conf['cachedir'].'/preview.ini';
 
     // Array of needed files and their web locations, the latter ones
     // are needed to fix relative paths in the stylesheets
@@ -262,9 +261,12 @@ function css_applystyle($css, $replacements) {
  * @author Andreas Gohr <andi@splitbrain.org>
  *
  * @param string $tpl the used template
+ * @param bool   $preview load preview replacements
  * @return array with keys 'stylesheets' and 'replacements'
  */
-function css_styleini($tpl) {
+function css_styleini($tpl, $preview=false) {
+    global $conf;
+
     $stylesheets = array(); // mode, file => base
     $replacements = array(); // placeholder => value
 
@@ -286,23 +288,6 @@ function css_styleini($tpl) {
         }
     }
 
-    // load template's style.local.ini
-    // @deprecated 2013-08-03
-    $ini = $incbase.'style.local.ini';
-    if(file_exists($ini)){
-        $data = parse_ini_file($ini, true);
-
-        // stylesheets
-        if(is_array($data['stylesheets'])) foreach($data['stylesheets'] as $file => $mode){
-            $stylesheets[$mode][$incbase.$file] = $webbase;
-        }
-
-        // replacements
-        if(is_array($data['replacements'])){
-            $replacements = array_merge($replacements, css_fixreplacementurls($data['replacements'],$webbase));
-        }
-    }
-
     // load configs's style.ini
     $webbase = DOKU_BASE;
     $ini = DOKU_CONF."tpl/$tpl/style.ini";
@@ -311,16 +296,29 @@ function css_styleini($tpl) {
         $data = parse_ini_file($ini, true);
 
         // stylesheets
-        if(is_array($data['stylesheets'])) foreach($data['stylesheets'] as $file => $mode){
+        if(isset($data['stylesheets']) && is_array($data['stylesheets'])) foreach($data['stylesheets'] as $file => $mode){
             $stylesheets[$mode][$incbase.$file] = $webbase;
         }
 
         // replacements
-        if(is_array($data['replacements'])){
+        if(isset($data['replacements']) && is_array($data['replacements'])){
             $replacements = array_merge($replacements, css_fixreplacementurls($data['replacements'],$webbase));
         }
     }
 
+    // allow replacement overwrites in preview mode
+    if($preview) {
+        $webbase = DOKU_BASE;
+        $ini     = $conf['cachedir'].'/preview.ini';
+        if(file_exists($ini)) {
+            $data = parse_ini_file($ini, true);
+            // replacements
+            if(is_array($data['replacements'])) {
+                $replacements = array_merge($replacements, css_fixreplacementurls($data['replacements'], $webbase));
+            }
+        }
+    }
+
     return array(
         'stylesheets' => $stylesheets,
         'replacements' => $replacements
diff --git a/lib/exe/indexer.php b/lib/exe/indexer.php
index 330b8498df6555628c67d3a48610a6e521d81712..d2a4d45f79339c046696a143bfc748f819d3f66c 100644
--- a/lib/exe/indexer.php
+++ b/lib/exe/indexer.php
@@ -199,7 +199,7 @@ function sendGIF(){
     header('Content-Length: '.strlen($img));
     header('Connection: Close');
     print $img;
-    flush();
+    tpl_flush();
     // Browser should drop connection after this
     // Thinks it's got the whole image
 }
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 3f9781e3493ba0830cbb3523518ded3de1847728..e850218cf522d95e4f1e804ce9d7b632ce3fd37f 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -14,7 +14,7 @@ require_once(DOKU_INC.'inc/init.php');
 
 // Main (don't run when UNIT test)
 if(!defined('SIMPLE_TEST')){
-    header('Content-Type: text/javascript; charset=utf-8');
+    header('Content-Type: application/javascript; charset=utf-8');
     js_out();
 }
 
@@ -30,9 +30,14 @@ function js_out(){
     global $conf;
     global $lang;
     global $config_cascade;
+    global $INPUT;
+
+    // decide from where to get the template
+    $tpl = trim(preg_replace('/[^\w-]+/','',$INPUT->str('t')));
+    if(!$tpl) $tpl = $conf['template'];
 
     // The generated script depends on some dynamic options
-    $cache = new cache('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.js');
+    $cache = new cache('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tpl,'.js');
     $cache->_event = 'JS_CACHE_USE';
 
     // load minified version for some files
@@ -51,11 +56,9 @@ function js_out(){
                 DOKU_INC.'lib/scripts/delay.js',
                 DOKU_INC.'lib/scripts/cookie.js',
                 DOKU_INC.'lib/scripts/script.js',
-                DOKU_INC.'lib/scripts/tw-sack.js',
                 DOKU_INC.'lib/scripts/qsearch.js',
                 DOKU_INC.'lib/scripts/tree.js',
                 DOKU_INC.'lib/scripts/index.js',
-                DOKU_INC.'lib/scripts/drag.js',
                 DOKU_INC.'lib/scripts/textselection.js',
                 DOKU_INC.'lib/scripts/toolbar.js',
                 DOKU_INC.'lib/scripts/edit.js',
@@ -63,11 +66,11 @@ function js_out(){
                 DOKU_INC.'lib/scripts/locktimer.js',
                 DOKU_INC.'lib/scripts/linkwiz.js',
                 DOKU_INC.'lib/scripts/media.js',
-# deprecated                DOKU_INC.'lib/scripts/compatibility.js',
+                DOKU_INC.'lib/scripts/compatibility.js',
 # disabled for FS#1958                DOKU_INC.'lib/scripts/hotkeys.js',
                 DOKU_INC.'lib/scripts/behaviour.js',
                 DOKU_INC.'lib/scripts/page.js',
-                tpl_incdir().'script.js',
+                tpl_incdir($tpl).'script.js',
             );
 
     // add possible plugin scripts and userscript
@@ -92,7 +95,7 @@ function js_out(){
     $json = new JSON();
     // add some global variables
     print "var DOKU_BASE   = '".DOKU_BASE."';";
-    print "var DOKU_TPL    = '".tpl_basedir()."';";
+    print "var DOKU_TPL    = '".tpl_basedir($tpl)."';";
     print "var DOKU_COOKIE_PARAM = " . $json->encode(
             array(
                  'path' => empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'],
@@ -104,7 +107,7 @@ function js_out(){
 
     // load JS specific translations
     $lang['js']['plugins'] = js_pluginstrings();
-    $templatestrings = js_templatestrings();
+    $templatestrings = js_templatestrings($tpl);
     if(!empty($templatestrings)) {
         $lang['js']['template'] = $templatestrings;
     }
@@ -170,7 +173,7 @@ function js_load($file){
         // is it a include_once?
         if($match[1]){
             $base = utf8_basename($ifile);
-            if($loaded[$base]){
+            if(array_key_exists($base, $loaded) && $loaded[$base] === true){
                 $data  = str_replace($match[0], '' ,$data);
                 continue;
             }
@@ -240,19 +243,20 @@ function js_pluginstrings() {
  * - $lang['js'] must be an array.
  * - Nothing is returned for template without an entry for $lang['js']
  *
+ * @param string $tpl
  * @return array
  */
-function js_templatestrings() {
+function js_templatestrings($tpl) {
     global $conf;
     $templatestrings = array();
-    if (file_exists(tpl_incdir()."lang/en/lang.php")) {
-        include tpl_incdir()."lang/en/lang.php";
+    if (file_exists(tpl_incdir($tpl)."lang/en/lang.php")) {
+        include tpl_incdir($tpl)."lang/en/lang.php";
     }
-    if (isset($conf['lang']) && $conf['lang']!='en' && file_exists(tpl_incdir()."lang/".$conf['lang']."/lang.php")) {
-        include tpl_incdir()."lang/".$conf['lang']."/lang.php";
+    if (isset($conf['lang']) && $conf['lang']!='en' && file_exists(tpl_incdir($tpl)."lang/".$conf['lang']."/lang.php")) {
+        include tpl_incdir($tpl)."lang/".$conf['lang']."/lang.php";
     }
     if (isset($lang['js'])) {
-        $templatestrings[$conf['template']] = $lang['js'];
+        $templatestrings[$tpl] = $lang['js'];
     }
     return $templatestrings;
 }
@@ -415,9 +419,9 @@ function js_compress($s){
 
             // Only consider deleting whitespace if the signs before and after
             // are not equal and are not an operator which may not follow itself.
-            if ((!$lch || $s[$i+1] == ' ')
+            if ($i+1 < $slen && ((!$lch || $s[$i+1] == ' ')
                 || $lch != $s[$i+1]
-                || strpos($ops,$s[$i+1]) === false) {
+                || strpos($ops,$s[$i+1]) === false)) {
                 // leading spaces
                 if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){
                     $i = $i + 1;
diff --git a/lib/exe/xmlrpc.php b/lib/exe/xmlrpc.php
index 61a68281f417f0be8547e559ba7d195c145a7b9e..6a0163106507f01d2d1ec5bb98b6b0ce86090b68 100644
--- a/lib/exe/xmlrpc.php
+++ b/lib/exe/xmlrpc.php
@@ -20,7 +20,7 @@ class dokuwiki_xmlrpc_server extends IXR_Server {
         $this->remote = new RemoteAPI();
         $this->remote->setDateTransformation(array($this, 'toDate'));
         $this->remote->setFileTransformation(array($this, 'toFile'));
-        $this->IXR_Server();
+        parent::__construct();
     }
 
     /**
diff --git a/lib/images/admin/README b/lib/images/admin/README
index 90bab95784b001e0fe0c72c66521e84bdf2ae710..53e7d839ae988c9dc3d6a3d7c0f43a3482df3718 100644
--- a/lib/images/admin/README
+++ b/lib/images/admin/README
@@ -1,2 +1,4 @@
 These icons were taken from the nuvoX KDE icon theme and are GPL licensed
 See http://www.kde-look.org/content/show.php/nuvoX?content=38467
+
+styling.png from https://openclipart.org/detail/25595/brush Public Domain
diff --git a/lib/images/admin/acl.png b/lib/images/admin/acl.png
index c8f610c12df1ee977d82fd4af08e084ddff67058..542e10899183cb0b367cc27b61d1a2dd09d3e807 100644
Binary files a/lib/images/admin/acl.png and b/lib/images/admin/acl.png differ
diff --git a/lib/images/admin/config.png b/lib/images/admin/config.png
index 3ec3923d114d829f57eafec58a1e525ddb65edb6..679a673722b8df339289f70b200d05be11905be2 100644
Binary files a/lib/images/admin/config.png and b/lib/images/admin/config.png differ
diff --git a/lib/images/admin/plugin.png b/lib/images/admin/plugin.png
index f71124e5c83f8ded2ad6a31ba2c2ff60b2d4d61a..27bd154102123cb11b02376a4591045855a11622 100644
Binary files a/lib/images/admin/plugin.png and b/lib/images/admin/plugin.png differ
diff --git a/lib/images/admin/popularity.png b/lib/images/admin/popularity.png
index 19392367a6d2024d5847921ef54e836b5c48785b..e18a8cb444bb9f3e579edabca92303f914ea9c6b 100644
Binary files a/lib/images/admin/popularity.png and b/lib/images/admin/popularity.png differ
diff --git a/lib/images/admin/revert.png b/lib/images/admin/revert.png
index 5304f1b7628bd09d3a2903c6a5aeb2192d5ff5dd..c74c7928b919edd26d075167c4c1395184adef58 100644
Binary files a/lib/images/admin/revert.png and b/lib/images/admin/revert.png differ
diff --git a/lib/images/admin/styling.png b/lib/images/admin/styling.png
new file mode 100644
index 0000000000000000000000000000000000000000..859c8c9ef4f465333cae13ea7a33c50af4ee3d8a
Binary files /dev/null and b/lib/images/admin/styling.png differ
diff --git a/lib/images/admin/usermanager.png b/lib/images/admin/usermanager.png
index 898544ce9b489ddd1454fb362a4e3f5f51f9a686..e6f72e077db42e9e1b5d269b5f02a62374320934 100644
Binary files a/lib/images/admin/usermanager.png and b/lib/images/admin/usermanager.png differ
diff --git a/lib/images/bullet.png b/lib/images/bullet.png
index 5e557b334a36b3f1274edd6c7b9d70ff24347c02..b8ec60c74ee86e648646af84d6611ccd3c5075f5 100644
Binary files a/lib/images/bullet.png and b/lib/images/bullet.png differ
diff --git a/lib/images/closed-rtl.png b/lib/images/closed-rtl.png
index caa027e341541f00572a80f103413950e731a37b..016a3c370245ae211e243b4cf7ef23d8daa24f2c 100644
Binary files a/lib/images/closed-rtl.png and b/lib/images/closed-rtl.png differ
diff --git a/lib/images/closed.png b/lib/images/closed.png
index e3bd0f9e94cb25e2fe5db97ce4ff9743cbf3e06f..927bfc57ff7d734f41f2f66a3f8298849b20dfa7 100644
Binary files a/lib/images/closed.png and b/lib/images/closed.png differ
diff --git a/lib/images/diff.png b/lib/images/diff.png
index 657b109994d3c2d3f3f74c2a761cdf854f942c91..04fab07b737f3d74fd0c3f164aaa915078bc160f 100644
Binary files a/lib/images/diff.png and b/lib/images/diff.png differ
diff --git a/lib/images/email.png b/lib/images/email.png
index d1d4a5fd5db9f90c4f07dd98cb774cbc3a45db9f..575b8314209ddee37692fd0910971d410218d887 100644
Binary files a/lib/images/email.png and b/lib/images/email.png differ
diff --git a/lib/images/error.png b/lib/images/error.png
index 7bd84f7a36dedfa8107314e54836462ab93e5f7a..da0692429e404d4620f23a496890f09f6c8fc8ec 100644
Binary files a/lib/images/error.png and b/lib/images/error.png differ
diff --git a/lib/images/external-link.png b/lib/images/external-link.png
index a4d5de17c3ba2a00e4cd79fe10dc165044682148..fecac61c9204efb9a55a77b83a46c4da5cef8cc4 100644
Binary files a/lib/images/external-link.png and b/lib/images/external-link.png differ
diff --git a/lib/images/fileicons/32x32/7z.png b/lib/images/fileicons/32x32/7z.png
index 9ba7da94a99e3cbf5535d25a991ad71640c235ff..2537cb96d6ee151e70ef93659a2eceb86084ad45 100644
Binary files a/lib/images/fileicons/32x32/7z.png and b/lib/images/fileicons/32x32/7z.png differ
diff --git a/lib/images/fileicons/32x32/asm.png b/lib/images/fileicons/32x32/asm.png
index f1a1f322b16fe9cdf5de311e9db0f4ba89dc1aa2..17e74d0b21d113ab568f22921f4b91f43444a585 100644
Binary files a/lib/images/fileicons/32x32/asm.png and b/lib/images/fileicons/32x32/asm.png differ
diff --git a/lib/images/fileicons/32x32/bash.png b/lib/images/fileicons/32x32/bash.png
index c28404ed12e851a420e8ffb637038f42608314de..a31ee688bc95c745573b2ed93da10cd011c7b546 100644
Binary files a/lib/images/fileicons/32x32/bash.png and b/lib/images/fileicons/32x32/bash.png differ
diff --git a/lib/images/fileicons/32x32/bz2.png b/lib/images/fileicons/32x32/bz2.png
index 7be9b7c0627d15f23e2359f515b3aba10f6c7d0e..c780316526fb1a2f8b5339dadb2f9c4c21fc8749 100644
Binary files a/lib/images/fileicons/32x32/bz2.png and b/lib/images/fileicons/32x32/bz2.png differ
diff --git a/lib/images/fileicons/32x32/c.png b/lib/images/fileicons/32x32/c.png
index 0a01f8f3a69d59b17d7e2c13328f3ed5cca45fd4..d8032d07599664c0125fb93e072da4b86327f33c 100644
Binary files a/lib/images/fileicons/32x32/c.png and b/lib/images/fileicons/32x32/c.png differ
diff --git a/lib/images/fileicons/32x32/cc.png b/lib/images/fileicons/32x32/cc.png
index b09b3357fc591566f6f190a3ce52b755ba244b8f..241ebd4e80166887b2a050687df29a4e0bb7c1e3 100644
Binary files a/lib/images/fileicons/32x32/cc.png and b/lib/images/fileicons/32x32/cc.png differ
diff --git a/lib/images/fileicons/32x32/conf.png b/lib/images/fileicons/32x32/conf.png
index 91a8a10de17ddd89b4944e0468cfba9555ef474e..9797c2ad800ae3d048181eb3bbca55887b32cd15 100644
Binary files a/lib/images/fileicons/32x32/conf.png and b/lib/images/fileicons/32x32/conf.png differ
diff --git a/lib/images/fileicons/32x32/cpp.png b/lib/images/fileicons/32x32/cpp.png
index 1ce35422cdb9446e93ef8f5393d630eb3560e578..1289065283639fb99ec31f0de9f8b9fe84e7df8c 100644
Binary files a/lib/images/fileicons/32x32/cpp.png and b/lib/images/fileicons/32x32/cpp.png differ
diff --git a/lib/images/fileicons/32x32/cs.png b/lib/images/fileicons/32x32/cs.png
index d300f755167e2171ab3ff74854cd479f08a32075..6c2aae2727d8dd77fae10eb9c1f4ba7636ef12b7 100644
Binary files a/lib/images/fileicons/32x32/cs.png and b/lib/images/fileicons/32x32/cs.png differ
diff --git a/lib/images/fileicons/32x32/csh.png b/lib/images/fileicons/32x32/csh.png
index 72ecbcc52f6f897c3d70313e0a5c64501c3ff6e6..e43584c7e6ac409574ee183cf758642647b9c5bd 100644
Binary files a/lib/images/fileicons/32x32/csh.png and b/lib/images/fileicons/32x32/csh.png differ
diff --git a/lib/images/fileicons/32x32/css.png b/lib/images/fileicons/32x32/css.png
index 638957637a29c868f5a373e0f4b2b93d45e8a585..786f304718bdac6cfa3782740f6f935dc3bd8ac1 100644
Binary files a/lib/images/fileicons/32x32/css.png and b/lib/images/fileicons/32x32/css.png differ
diff --git a/lib/images/fileicons/32x32/csv.png b/lib/images/fileicons/32x32/csv.png
index 3ee42f04709e443a2363117e798d3ff3443cb419..e5cdbf94064d821f348bb72460c29053147c65ea 100644
Binary files a/lib/images/fileicons/32x32/csv.png and b/lib/images/fileicons/32x32/csv.png differ
diff --git a/lib/images/fileicons/32x32/deb.png b/lib/images/fileicons/32x32/deb.png
index 8d625ccf2ec0d00a0e43bb29a6636782d64c68c5..e2828a347189959098b577985d5df24ddcb0224d 100644
Binary files a/lib/images/fileicons/32x32/deb.png and b/lib/images/fileicons/32x32/deb.png differ
diff --git a/lib/images/fileicons/32x32/diff.png b/lib/images/fileicons/32x32/diff.png
index 4dd98e7cc15ab34d85768e4ed4f9de5347585939..9e413cb6ee9279dc638cf83c159f5a7480fbf418 100644
Binary files a/lib/images/fileicons/32x32/diff.png and b/lib/images/fileicons/32x32/diff.png differ
diff --git a/lib/images/fileicons/32x32/doc.png b/lib/images/fileicons/32x32/doc.png
index 8369c1f7327709761e9f5d34611ef5504ee6c3b1..43ec354163fe4e6c1a34a5da35429e87c6daf8a8 100644
Binary files a/lib/images/fileicons/32x32/doc.png and b/lib/images/fileicons/32x32/doc.png differ
diff --git a/lib/images/fileicons/32x32/docx.png b/lib/images/fileicons/32x32/docx.png
index ce5dfb3d38430e362ce0d055321f33d58713bf56..a25f260c66744fbd67642b2dc6c8f7ba53bde70e 100644
Binary files a/lib/images/fileicons/32x32/docx.png and b/lib/images/fileicons/32x32/docx.png differ
diff --git a/lib/images/fileicons/32x32/file.png b/lib/images/fileicons/32x32/file.png
index 52318f6e2c7fa4b9450f7deecffdbf1332e8b0f2..7f6d51a0982ba202d424b18c3ae1e289909f2fde 100644
Binary files a/lib/images/fileicons/32x32/file.png and b/lib/images/fileicons/32x32/file.png differ
diff --git a/lib/images/fileicons/32x32/gif.png b/lib/images/fileicons/32x32/gif.png
index e39af08cccf99f7380bf5a51e93deb10211d0f83..dde2d84143a5e9f4f42346b118cfdd95b10b10af 100644
Binary files a/lib/images/fileicons/32x32/gif.png and b/lib/images/fileicons/32x32/gif.png differ
diff --git a/lib/images/fileicons/32x32/gz.png b/lib/images/fileicons/32x32/gz.png
index 573ce7afd3620a2c4b2979baa3beac65f5469f20..5bddffb6daf1f29fc8e8a4b42bee195a36eae77a 100644
Binary files a/lib/images/fileicons/32x32/gz.png and b/lib/images/fileicons/32x32/gz.png differ
diff --git a/lib/images/fileicons/32x32/h.png b/lib/images/fileicons/32x32/h.png
index 27c8ceaf3f47bc849325298ef34f69bd6035d8b4..5c169a33b4c556d0381fe40a616d8cd8aea4c10f 100644
Binary files a/lib/images/fileicons/32x32/h.png and b/lib/images/fileicons/32x32/h.png differ
diff --git a/lib/images/fileicons/32x32/hpp.png b/lib/images/fileicons/32x32/hpp.png
index 04876a5d5e72feeff58662a1f3d61e28fcadd188..128110d5b764bf3092d22ba902856a351d992bf5 100644
Binary files a/lib/images/fileicons/32x32/hpp.png and b/lib/images/fileicons/32x32/hpp.png differ
diff --git a/lib/images/fileicons/32x32/htm.png b/lib/images/fileicons/32x32/htm.png
index ec4f15ac6c109ce5ccc48982449045f50de455c5..79096dc7e253209ffc1bec2705a004768189a428 100644
Binary files a/lib/images/fileicons/32x32/htm.png and b/lib/images/fileicons/32x32/htm.png differ
diff --git a/lib/images/fileicons/32x32/html.png b/lib/images/fileicons/32x32/html.png
index ec4f15ac6c109ce5ccc48982449045f50de455c5..79096dc7e253209ffc1bec2705a004768189a428 100644
Binary files a/lib/images/fileicons/32x32/html.png and b/lib/images/fileicons/32x32/html.png differ
diff --git a/lib/images/fileicons/32x32/ico.png b/lib/images/fileicons/32x32/ico.png
index 0a219e6f26095b55903cf7f84bed8c04fb7d33a3..60f73bd38fcc76c3d475b79893663bcffcbff1f4 100644
Binary files a/lib/images/fileicons/32x32/ico.png and b/lib/images/fileicons/32x32/ico.png differ
diff --git a/lib/images/fileicons/32x32/java.png b/lib/images/fileicons/32x32/java.png
index ee9cc4ccb720913b0dc57ce4c6d39e58d51306ad..1d8694996146c3c495787fc42d1d3615672aeaa6 100644
Binary files a/lib/images/fileicons/32x32/java.png and b/lib/images/fileicons/32x32/java.png differ
diff --git a/lib/images/fileicons/32x32/jpeg.png b/lib/images/fileicons/32x32/jpeg.png
index 5fb71dd735297e4d390c83d5f90618cd9d936ba7..4b5c425ad32977533e6167cfbc43d57798cf8289 100644
Binary files a/lib/images/fileicons/32x32/jpeg.png and b/lib/images/fileicons/32x32/jpeg.png differ
diff --git a/lib/images/fileicons/32x32/jpg.png b/lib/images/fileicons/32x32/jpg.png
index 5fb71dd735297e4d390c83d5f90618cd9d936ba7..4b5c425ad32977533e6167cfbc43d57798cf8289 100644
Binary files a/lib/images/fileicons/32x32/jpg.png and b/lib/images/fileicons/32x32/jpg.png differ
diff --git a/lib/images/fileicons/32x32/js.png b/lib/images/fileicons/32x32/js.png
index 9bbbfb709943eef4e5f7a1a983229dba318a50ee..5a8dabe81eee2d25c82b146ed6589abab3e8bee0 100644
Binary files a/lib/images/fileicons/32x32/js.png and b/lib/images/fileicons/32x32/js.png differ
diff --git a/lib/images/fileicons/32x32/json.png b/lib/images/fileicons/32x32/json.png
index 583ece68309cab4b2bff7b5659245e2f421b0c71..e4a55e634ba78e0ca7bc2efa40b9723c2324c9c7 100644
Binary files a/lib/images/fileicons/32x32/json.png and b/lib/images/fileicons/32x32/json.png differ
diff --git a/lib/images/fileicons/32x32/lua.png b/lib/images/fileicons/32x32/lua.png
index 9e8fc9517176be27aa4cb5c888f906d893013bb9..c8e0bf208c75080f6a93b33d589ba40db068ff23 100644
Binary files a/lib/images/fileicons/32x32/lua.png and b/lib/images/fileicons/32x32/lua.png differ
diff --git a/lib/images/fileicons/32x32/mp3.png b/lib/images/fileicons/32x32/mp3.png
index 1acd8327683146530e37feedc431426e43f1ca90..9bf1695533c2cab1cfceb70e518b15cd71c20e3f 100644
Binary files a/lib/images/fileicons/32x32/mp3.png and b/lib/images/fileicons/32x32/mp3.png differ
diff --git a/lib/images/fileicons/32x32/mp4.png b/lib/images/fileicons/32x32/mp4.png
index 03db6f45093564d224381de7010ca5873bb3e5c8..071abc324ac4c8bf960dbf1125f6509c96ae5067 100644
Binary files a/lib/images/fileicons/32x32/mp4.png and b/lib/images/fileicons/32x32/mp4.png differ
diff --git a/lib/images/fileicons/32x32/odc.png b/lib/images/fileicons/32x32/odc.png
index 9a34f21291c5a47d90916d9ba9f88764a6a9d345..3ad6a3c2d98f0aec616fea49db221d9e7bc9d822 100644
Binary files a/lib/images/fileicons/32x32/odc.png and b/lib/images/fileicons/32x32/odc.png differ
diff --git a/lib/images/fileicons/32x32/odf.png b/lib/images/fileicons/32x32/odf.png
index e3b4333adb8acb8a1d064c63903c16fe162de5d1..8dd89eac608abe3d38636276201d6203d9244a77 100644
Binary files a/lib/images/fileicons/32x32/odf.png and b/lib/images/fileicons/32x32/odf.png differ
diff --git a/lib/images/fileicons/32x32/odg.png b/lib/images/fileicons/32x32/odg.png
index c3b192b2def39718deef1d586ba8a92b60f3a349..7020d1396596e123d8e34d7c380125f45339038c 100644
Binary files a/lib/images/fileicons/32x32/odg.png and b/lib/images/fileicons/32x32/odg.png differ
diff --git a/lib/images/fileicons/32x32/odi.png b/lib/images/fileicons/32x32/odi.png
index 6baa6940728716979a718dbf82738694bc6a9558..9a08a426ac1134f379a1f80bdcdc6a1820e6a544 100644
Binary files a/lib/images/fileicons/32x32/odi.png and b/lib/images/fileicons/32x32/odi.png differ
diff --git a/lib/images/fileicons/32x32/odp.png b/lib/images/fileicons/32x32/odp.png
index 8e09dd6e4d65835eabbcdbf0ba8a0c19eb1d3993..e6b538d277705497146432585d86d3a34b0bd51e 100644
Binary files a/lib/images/fileicons/32x32/odp.png and b/lib/images/fileicons/32x32/odp.png differ
diff --git a/lib/images/fileicons/32x32/ods.png b/lib/images/fileicons/32x32/ods.png
index 90892f3d4a7f510609ec1d78f3868bb687c6137b..cf4a226ff601f342420df9305fb2d1cad3129655 100644
Binary files a/lib/images/fileicons/32x32/ods.png and b/lib/images/fileicons/32x32/ods.png differ
diff --git a/lib/images/fileicons/32x32/odt.png b/lib/images/fileicons/32x32/odt.png
index 22ec1fffbaf89d24787a6341f805476508547936..1eae19cc757b761b97fd5fd4a0edea1818e333c3 100644
Binary files a/lib/images/fileicons/32x32/odt.png and b/lib/images/fileicons/32x32/odt.png differ
diff --git a/lib/images/fileicons/32x32/ogg.png b/lib/images/fileicons/32x32/ogg.png
index f988fabc36bf4280d16f04ad51d8a33e1ba830a3..d7b0553f65b2da51a1c946e4f77df0fadb0c4344 100644
Binary files a/lib/images/fileicons/32x32/ogg.png and b/lib/images/fileicons/32x32/ogg.png differ
diff --git a/lib/images/fileicons/32x32/ogv.png b/lib/images/fileicons/32x32/ogv.png
index 1083455fb401b621f12d818836b249c10ca772f9..4fdedbaeef530d683a093eef4717e1699d941d92 100644
Binary files a/lib/images/fileicons/32x32/ogv.png and b/lib/images/fileicons/32x32/ogv.png differ
diff --git a/lib/images/fileicons/32x32/pas.png b/lib/images/fileicons/32x32/pas.png
index c2c05d2d1fbae8e8779efa364f69a2cd247d6b88..8d2999e98071d029876165fa032a12ab7b841cdd 100644
Binary files a/lib/images/fileicons/32x32/pas.png and b/lib/images/fileicons/32x32/pas.png differ
diff --git a/lib/images/fileicons/32x32/pdf.png b/lib/images/fileicons/32x32/pdf.png
index 0efa0dc3115f9eea5950bf2713a0d4242c54d5a6..09ae62e6ab3063f8de6093a12f56d01a581cfdae 100644
Binary files a/lib/images/fileicons/32x32/pdf.png and b/lib/images/fileicons/32x32/pdf.png differ
diff --git a/lib/images/fileicons/32x32/php.png b/lib/images/fileicons/32x32/php.png
index 8f3c84e32bed483f4de91a1a3299aa17fdf57f1c..1f4cabf6f491c0401f7745b6c2aea78e61c31b84 100644
Binary files a/lib/images/fileicons/32x32/php.png and b/lib/images/fileicons/32x32/php.png differ
diff --git a/lib/images/fileicons/32x32/pl.png b/lib/images/fileicons/32x32/pl.png
index 88aa2723fe5b11f29dbb997c7412516e8be9695c..038e9f3a72fd789e18f6c01031b25f04e852ce28 100644
Binary files a/lib/images/fileicons/32x32/pl.png and b/lib/images/fileicons/32x32/pl.png differ
diff --git a/lib/images/fileicons/32x32/png.png b/lib/images/fileicons/32x32/png.png
index 0ecd2969101d7adec9a0f85c80f22372743c77e9..e3ea1c3a046f456b335cfe718f7269f2217cadc9 100644
Binary files a/lib/images/fileicons/32x32/png.png and b/lib/images/fileicons/32x32/png.png differ
diff --git a/lib/images/fileicons/32x32/ppt.png b/lib/images/fileicons/32x32/ppt.png
index 84b523a23cb28bab1b5d31160f798dc94ffd1234..acee9457144bba235ed5f24e9d90c2623f80cba9 100644
Binary files a/lib/images/fileicons/32x32/ppt.png and b/lib/images/fileicons/32x32/ppt.png differ
diff --git a/lib/images/fileicons/32x32/pptx.png b/lib/images/fileicons/32x32/pptx.png
index 1446cf4debc97babdf9c52605a29f2ad4934ed9e..b57b09173ef14ed6dd46872779e4c44c9f0123f2 100644
Binary files a/lib/images/fileicons/32x32/pptx.png and b/lib/images/fileicons/32x32/pptx.png differ
diff --git a/lib/images/fileicons/32x32/ps.png b/lib/images/fileicons/32x32/ps.png
index e1a74988d873823c5729b9a4c04fecd89a1c27e2..523a0be30cd36c442c115ce8494aff2f46b09434 100644
Binary files a/lib/images/fileicons/32x32/ps.png and b/lib/images/fileicons/32x32/ps.png differ
diff --git a/lib/images/fileicons/32x32/py.png b/lib/images/fileicons/32x32/py.png
index cf6e412f08cf3458bfe54c9df72510934bd5f68d..ae6e06ad5d30e2ffb2854811a77103db66bb7016 100644
Binary files a/lib/images/fileicons/32x32/py.png and b/lib/images/fileicons/32x32/py.png differ
diff --git a/lib/images/fileicons/32x32/rar.png b/lib/images/fileicons/32x32/rar.png
index 4af2a4d4603291b588b4b2ed05e160fa8da8326a..5b1cfcbee33ddea026821fd86cf0b6182fa3f372 100644
Binary files a/lib/images/fileicons/32x32/rar.png and b/lib/images/fileicons/32x32/rar.png differ
diff --git a/lib/images/fileicons/32x32/rb.png b/lib/images/fileicons/32x32/rb.png
index b0dfd898018b92e27d4e6e9206a81ab0afaa1ffe..398f2080277af9f712be686f4de59da159e6cb9f 100644
Binary files a/lib/images/fileicons/32x32/rb.png and b/lib/images/fileicons/32x32/rb.png differ
diff --git a/lib/images/fileicons/32x32/rpm.png b/lib/images/fileicons/32x32/rpm.png
index 2ec5f4e1bf49ebb15f6a113c9647dc009eafb0b1..c66a907415973e264639cfc04b5781f5862e0e92 100644
Binary files a/lib/images/fileicons/32x32/rpm.png and b/lib/images/fileicons/32x32/rpm.png differ
diff --git a/lib/images/fileicons/32x32/rtf.png b/lib/images/fileicons/32x32/rtf.png
index 82add4fd7d9520b342649f6c764bbef3f4f637d1..43182f3493fdf8142ebc8fbb85ce6a8df373cd81 100644
Binary files a/lib/images/fileicons/32x32/rtf.png and b/lib/images/fileicons/32x32/rtf.png differ
diff --git a/lib/images/fileicons/32x32/sh.png b/lib/images/fileicons/32x32/sh.png
index 93c093ea40a5612e77fba79565fcc34c3ce47487..52e3f952cebdff10387d84a351fa846fc306eb91 100644
Binary files a/lib/images/fileicons/32x32/sh.png and b/lib/images/fileicons/32x32/sh.png differ
diff --git a/lib/images/fileicons/32x32/sql.png b/lib/images/fileicons/32x32/sql.png
index f6436e7259a028543f2e37a0b2aa58c86feebc29..bb23e56b9bc8572dd827c0591bed7fe7431ecb7f 100644
Binary files a/lib/images/fileicons/32x32/sql.png and b/lib/images/fileicons/32x32/sql.png differ
diff --git a/lib/images/fileicons/32x32/swf.png b/lib/images/fileicons/32x32/swf.png
index b436429058ff31a71581f5a088e22fe4aafe476e..be8f5460ee426ae9ef80726cc02c162cca91aaba 100644
Binary files a/lib/images/fileicons/32x32/swf.png and b/lib/images/fileicons/32x32/swf.png differ
diff --git a/lib/images/fileicons/32x32/sxc.png b/lib/images/fileicons/32x32/sxc.png
index 50676be6afcb59893271b117a9475239ce4ad52e..cc45ffa8e545ff9675ed306482a9f827b74c6dcf 100644
Binary files a/lib/images/fileicons/32x32/sxc.png and b/lib/images/fileicons/32x32/sxc.png differ
diff --git a/lib/images/fileicons/32x32/sxd.png b/lib/images/fileicons/32x32/sxd.png
index f715a8ff0c59797d0268639304e0ea7e87ab7038..26f44c2153d6618e2789b474dacdaf30894dee98 100644
Binary files a/lib/images/fileicons/32x32/sxd.png and b/lib/images/fileicons/32x32/sxd.png differ
diff --git a/lib/images/fileicons/32x32/sxi.png b/lib/images/fileicons/32x32/sxi.png
index 3d9f31d3bc097cc3e02e84738e9dd0690129cb69..62e90bc97f9b35a92d0359c0f6fd92cc8b54d20f 100644
Binary files a/lib/images/fileicons/32x32/sxi.png and b/lib/images/fileicons/32x32/sxi.png differ
diff --git a/lib/images/fileicons/32x32/sxw.png b/lib/images/fileicons/32x32/sxw.png
index bd8ab14363ebf58d5248e420d51752003c467678..5196307df64c21c79ddd2dc3c126758abfbf9530 100644
Binary files a/lib/images/fileicons/32x32/sxw.png and b/lib/images/fileicons/32x32/sxw.png differ
diff --git a/lib/images/fileicons/32x32/tar.png b/lib/images/fileicons/32x32/tar.png
index 4a420a22acca07582b4b82a0eac030ad6aa5605c..8eb0ef489c7019f4acd8966c6211ee3749744ce5 100644
Binary files a/lib/images/fileicons/32x32/tar.png and b/lib/images/fileicons/32x32/tar.png differ
diff --git a/lib/images/fileicons/32x32/tgz.png b/lib/images/fileicons/32x32/tgz.png
index 8cf6af41ac83d7db8fc2c7171f6194422f5cb60f..77faacb92bd6fba45acef5faa05b31b66838bbb4 100644
Binary files a/lib/images/fileicons/32x32/tgz.png and b/lib/images/fileicons/32x32/tgz.png differ
diff --git a/lib/images/fileicons/32x32/txt.png b/lib/images/fileicons/32x32/txt.png
index d9ff7d59551b769882f69027ab5604f03b00819f..5d09e3c93a9cb49d4ef196b3da6982c6d24b6914 100644
Binary files a/lib/images/fileicons/32x32/txt.png and b/lib/images/fileicons/32x32/txt.png differ
diff --git a/lib/images/fileicons/32x32/wav.png b/lib/images/fileicons/32x32/wav.png
index c39a8445fe91d2a21ec62d6a3c800647639eaca9..37b871be4423664741938f3db2ac1f127ac161e6 100644
Binary files a/lib/images/fileicons/32x32/wav.png and b/lib/images/fileicons/32x32/wav.png differ
diff --git a/lib/images/fileicons/32x32/webm.png b/lib/images/fileicons/32x32/webm.png
index 99b9c87b2626168ea98ce86783892ddd230c0173..9044845b9625b57481d05852a33215949ae41f36 100644
Binary files a/lib/images/fileicons/32x32/webm.png and b/lib/images/fileicons/32x32/webm.png differ
diff --git a/lib/images/fileicons/32x32/xls.png b/lib/images/fileicons/32x32/xls.png
index 7447d9cdfc71f21d0c7418b1d7519c31947ebf47..1c21a6ed3b29b42c2b172bf6fbf1e0a03652ab09 100644
Binary files a/lib/images/fileicons/32x32/xls.png and b/lib/images/fileicons/32x32/xls.png differ
diff --git a/lib/images/fileicons/32x32/xlsx.png b/lib/images/fileicons/32x32/xlsx.png
index 920217267c3909214dbf367ed4e5fc418c284dfe..cba5937abdcb6ab8ef4e463d45c2e3291dcf7a72 100644
Binary files a/lib/images/fileicons/32x32/xlsx.png and b/lib/images/fileicons/32x32/xlsx.png differ
diff --git a/lib/images/fileicons/32x32/xml.png b/lib/images/fileicons/32x32/xml.png
index 4ea3b1f6c8569e01bdd93cec6ff6ff65b9fca68f..8eee5839889f55f057ae1fd84a668034ff0f0f59 100644
Binary files a/lib/images/fileicons/32x32/xml.png and b/lib/images/fileicons/32x32/xml.png differ
diff --git a/lib/images/fileicons/32x32/zip.png b/lib/images/fileicons/32x32/zip.png
index f07d18e2c4d733514925d102739f72e9b54e1304..0ce83b6bcc00bc5b3c2179a07f185517b59c0a22 100644
Binary files a/lib/images/fileicons/32x32/zip.png and b/lib/images/fileicons/32x32/zip.png differ
diff --git a/lib/images/fileicons/7z.png b/lib/images/fileicons/7z.png
index 037cd73a04ea542fa79512e7a8808b393ee070d0..fa6abe35be445fa96cfda43cbbd5cf28d3ac7e90 100644
Binary files a/lib/images/fileicons/7z.png and b/lib/images/fileicons/7z.png differ
diff --git a/lib/images/fileicons/asm.png b/lib/images/fileicons/asm.png
index 1281e12b89ff41552e65cf4d261d262bee8d0953..c22c451a19fd374b5d23165e9fa1419089132517 100644
Binary files a/lib/images/fileicons/asm.png and b/lib/images/fileicons/asm.png differ
diff --git a/lib/images/fileicons/bash.png b/lib/images/fileicons/bash.png
index 25758464919d6025affe53bdd12edfef3b56b10e..f352cfdb16cc073c640fb47bce9a74336534a370 100644
Binary files a/lib/images/fileicons/bash.png and b/lib/images/fileicons/bash.png differ
diff --git a/lib/images/fileicons/bz2.png b/lib/images/fileicons/bz2.png
index a4bcc70a115f3f27b62cbce31806d41a28b43fa8..a1b048fc246d31a841a5f4c0314a274aa480489b 100644
Binary files a/lib/images/fileicons/bz2.png and b/lib/images/fileicons/bz2.png differ
diff --git a/lib/images/fileicons/c.png b/lib/images/fileicons/c.png
index f0d4e9aa1184b347a93485fc8cde71f206d96201..51d9c7f154a2c72655f2de3b19e5a2b2b5d67dcf 100644
Binary files a/lib/images/fileicons/c.png and b/lib/images/fileicons/c.png differ
diff --git a/lib/images/fileicons/cc.png b/lib/images/fileicons/cc.png
index e6f4c64574b1319b4b198d6a0ce5839c16d08d7b..8aeae79eb7b98d8969e04af0b17f0ded75620a85 100644
Binary files a/lib/images/fileicons/cc.png and b/lib/images/fileicons/cc.png differ
diff --git a/lib/images/fileicons/conf.png b/lib/images/fileicons/conf.png
index 94ace02cf3c4b7e29c7947068754b0716295c1c7..c845d4962457bedfc082cde05a8e68df343fa04d 100644
Binary files a/lib/images/fileicons/conf.png and b/lib/images/fileicons/conf.png differ
diff --git a/lib/images/fileicons/cpp.png b/lib/images/fileicons/cpp.png
index 4027e4bebdd34aaa3a59d6560da1c46fe615257d..1a04c32914e3bc1111dbc5b5312917a5cd9d03e7 100644
Binary files a/lib/images/fileicons/cpp.png and b/lib/images/fileicons/cpp.png differ
diff --git a/lib/images/fileicons/cs.png b/lib/images/fileicons/cs.png
index 31b7f76610d5c7a9daddf3b062aa3b34a24e8229..740725a30eed89d523f592a88f89f4b7e56094f0 100644
Binary files a/lib/images/fileicons/cs.png and b/lib/images/fileicons/cs.png differ
diff --git a/lib/images/fileicons/csh.png b/lib/images/fileicons/csh.png
index cc21e79952e61b085e897c158f3bb33b54555714..c0131c5f46d46986bb6984e95bc4bfc59451920c 100644
Binary files a/lib/images/fileicons/csh.png and b/lib/images/fileicons/csh.png differ
diff --git a/lib/images/fileicons/css.png b/lib/images/fileicons/css.png
index abd16fa8edd4c81c8f022e2f8d71ca6c00c5851d..89ac36470723bf3bd66eb169e0071d22b2863c03 100644
Binary files a/lib/images/fileicons/css.png and b/lib/images/fileicons/css.png differ
diff --git a/lib/images/fileicons/csv.png b/lib/images/fileicons/csv.png
index af37ba577130991be50f61cff50bb49d48a301d3..837ae295fa43731ee90e4f7d392814c5789de73f 100644
Binary files a/lib/images/fileicons/csv.png and b/lib/images/fileicons/csv.png differ
diff --git a/lib/images/fileicons/deb.png b/lib/images/fileicons/deb.png
index 9eb29019ba324a84366cdcf62b099bf1cb6c597f..1db6fa5b80efe3b048d98398e89fc4c70ff2aafe 100644
Binary files a/lib/images/fileicons/deb.png and b/lib/images/fileicons/deb.png differ
diff --git a/lib/images/fileicons/diff.png b/lib/images/fileicons/diff.png
index 1775da0143b83e108e69ac9fadb8f19ae1b2f292..03e9af94dec06fa21f8888b31b64a97fd077dfbd 100644
Binary files a/lib/images/fileicons/diff.png and b/lib/images/fileicons/diff.png differ
diff --git a/lib/images/fileicons/doc.png b/lib/images/fileicons/doc.png
index 92549457644738605381491be0804663af271e96..dcc070f493fb3306a1a7dd36315ad44854d3d40b 100644
Binary files a/lib/images/fileicons/doc.png and b/lib/images/fileicons/doc.png differ
diff --git a/lib/images/fileicons/docx.png b/lib/images/fileicons/docx.png
index 5bae13f9ef7299489a87d12b484bd9763d871502..1a98a8d4f95000f05589df87dd3bb34128a17cf0 100644
Binary files a/lib/images/fileicons/docx.png and b/lib/images/fileicons/docx.png differ
diff --git a/lib/images/fileicons/file.png b/lib/images/fileicons/file.png
index 8f31d38ac6bedf006a943f8599a9eb91b6fd8024..54fe8abdad1bc26fd09c217f62fc4069f2d6608b 100644
Binary files a/lib/images/fileicons/file.png and b/lib/images/fileicons/file.png differ
diff --git a/lib/images/fileicons/gif.png b/lib/images/fileicons/gif.png
index bcbb8366ba25ecb1ff8704e0daa258283805588d..38bdbf2dca30fc5dfd03b1188b1a988340cabbe0 100644
Binary files a/lib/images/fileicons/gif.png and b/lib/images/fileicons/gif.png differ
diff --git a/lib/images/fileicons/gz.png b/lib/images/fileicons/gz.png
index 0a0a4b94f949ddb8a12426610a222ac27edeaee4..422693a3970cb4a5a82408161c48610cbdf07bf7 100644
Binary files a/lib/images/fileicons/gz.png and b/lib/images/fileicons/gz.png differ
diff --git a/lib/images/fileicons/h.png b/lib/images/fileicons/h.png
index 4afe8f84fc67cd1fa46a1c1bf8b7045c38bd99c7..d65f2f507d8b0aa6f3a118d54d471c8c81e3d93b 100644
Binary files a/lib/images/fileicons/h.png and b/lib/images/fileicons/h.png differ
diff --git a/lib/images/fileicons/hpp.png b/lib/images/fileicons/hpp.png
index 3ee7583d2b5d6e967e23fe3a43d34adcbc5ff8c9..6d314f5c9566470e6dcc6a967d60e5a8f778ee8d 100644
Binary files a/lib/images/fileicons/hpp.png and b/lib/images/fileicons/hpp.png differ
diff --git a/lib/images/fileicons/htm.png b/lib/images/fileicons/htm.png
index 02e81932b399c68e56041a42e5017c4b63e3db85..f45847f7e7d556c43cd602164e685fa5719fa178 100644
Binary files a/lib/images/fileicons/htm.png and b/lib/images/fileicons/htm.png differ
diff --git a/lib/images/fileicons/html.png b/lib/images/fileicons/html.png
index 02e81932b399c68e56041a42e5017c4b63e3db85..f45847f7e7d556c43cd602164e685fa5719fa178 100644
Binary files a/lib/images/fileicons/html.png and b/lib/images/fileicons/html.png differ
diff --git a/lib/images/fileicons/ico.png b/lib/images/fileicons/ico.png
index 93343717c580a26702f6c2212794e4e97dd1f105..38aa34b2c986aca593029cb6a0057124249493fa 100644
Binary files a/lib/images/fileicons/ico.png and b/lib/images/fileicons/ico.png differ
diff --git a/lib/images/fileicons/java.png b/lib/images/fileicons/java.png
index cf6f5b4f5a1eade0b814d9c3f6c83c875a9e5212..0c62347f5c5cd1b3190915558b9b47e624b97a8b 100644
Binary files a/lib/images/fileicons/java.png and b/lib/images/fileicons/java.png differ
diff --git a/lib/images/fileicons/jpeg.png b/lib/images/fileicons/jpeg.png
index 29dea5761c8f247eae054b4d0992134645e01af0..e446dd410b6fee41e2d7be0a81057dfdfff8b171 100644
Binary files a/lib/images/fileicons/jpeg.png and b/lib/images/fileicons/jpeg.png differ
diff --git a/lib/images/fileicons/jpg.png b/lib/images/fileicons/jpg.png
index 29dea5761c8f247eae054b4d0992134645e01af0..e446dd410b6fee41e2d7be0a81057dfdfff8b171 100644
Binary files a/lib/images/fileicons/jpg.png and b/lib/images/fileicons/jpg.png differ
diff --git a/lib/images/fileicons/js.png b/lib/images/fileicons/js.png
index 16e3f95386298373625a8b5d07d5e1556a5e24e5..bee428f200d3b1574f921898534d554b97a978e5 100644
Binary files a/lib/images/fileicons/js.png and b/lib/images/fileicons/js.png differ
diff --git a/lib/images/fileicons/json.png b/lib/images/fileicons/json.png
index 96611cb539d09dcbd6d29664467f3a18306c735d..4d0a3cfb50986878adbb1912b368f4df30f455b4 100644
Binary files a/lib/images/fileicons/json.png and b/lib/images/fileicons/json.png differ
diff --git a/lib/images/fileicons/lua.png b/lib/images/fileicons/lua.png
index 81fdeea403a6d7dc6b88697a759ae025aceee2c5..fcebe3d020fd1d7db2300353f9566ca6f5c7317a 100644
Binary files a/lib/images/fileicons/lua.png and b/lib/images/fileicons/lua.png differ
diff --git a/lib/images/fileicons/mp3.png b/lib/images/fileicons/mp3.png
index 7c6d37184e5f3747364673ab462e4576ac04e25b..2be976f9cd9cb864bde096b1a5aba5077d375adb 100644
Binary files a/lib/images/fileicons/mp3.png and b/lib/images/fileicons/mp3.png differ
diff --git a/lib/images/fileicons/mp4.png b/lib/images/fileicons/mp4.png
index ee5b911502836e4a6acc73cace3eaec93b433cfa..dc6fd0022d2deb6a6dc8e06972ababf3bb4f0552 100644
Binary files a/lib/images/fileicons/mp4.png and b/lib/images/fileicons/mp4.png differ
diff --git a/lib/images/fileicons/odc.png b/lib/images/fileicons/odc.png
index 331140552aaa77de64d29b25ab264f7e08ecafcc..bf3b3a104c280727dc063a6c419fc0a7b21e7334 100644
Binary files a/lib/images/fileicons/odc.png and b/lib/images/fileicons/odc.png differ
diff --git a/lib/images/fileicons/odf.png b/lib/images/fileicons/odf.png
index eccae9e20de149573607af3cad49bdcd4725d09d..fcfc58f76ded0cb0aca1ffdab65dffc02a47ac3a 100644
Binary files a/lib/images/fileicons/odf.png and b/lib/images/fileicons/odf.png differ
diff --git a/lib/images/fileicons/odg.png b/lib/images/fileicons/odg.png
index 5224425e6f3f7f2d43358c413d931048d316bc80..0a8196cbf73055204cb5198d50d23c8aecdef891 100644
Binary files a/lib/images/fileicons/odg.png and b/lib/images/fileicons/odg.png differ
diff --git a/lib/images/fileicons/odi.png b/lib/images/fileicons/odi.png
index b57fd974d92f2b8af4a4bed282501b06e33eed88..0fc8508adc4c3d8af3d40195640d05dfd49d59f0 100644
Binary files a/lib/images/fileicons/odi.png and b/lib/images/fileicons/odi.png differ
diff --git a/lib/images/fileicons/odp.png b/lib/images/fileicons/odp.png
index 81d1023c08c320aa93ce4cc2461d48276446df74..75b1db8e11fc8d302f952fe5c8b3edc2ae42d564 100644
Binary files a/lib/images/fileicons/odp.png and b/lib/images/fileicons/odp.png differ
diff --git a/lib/images/fileicons/ods.png b/lib/images/fileicons/ods.png
index 77e6d5366b5175f6ba5d16041d10a9d313aa71dc..2017426bdefee34eb29e4b75a2e26e500b5df8ae 100644
Binary files a/lib/images/fileicons/ods.png and b/lib/images/fileicons/ods.png differ
diff --git a/lib/images/fileicons/odt.png b/lib/images/fileicons/odt.png
index 8490eec74d286390c3158171be915ed16c0712d2..6f8fae4382552e0b073ab96b1867ec881b78073b 100644
Binary files a/lib/images/fileicons/odt.png and b/lib/images/fileicons/odt.png differ
diff --git a/lib/images/fileicons/ogg.png b/lib/images/fileicons/ogg.png
index 38f615c9903c327f536826d1d57f94ff9a855b8c..8bb50800e61384bbf4c8c88d25fc66ff2d9b8033 100644
Binary files a/lib/images/fileicons/ogg.png and b/lib/images/fileicons/ogg.png differ
diff --git a/lib/images/fileicons/ogv.png b/lib/images/fileicons/ogv.png
index a937dfc4cc5cdaed5fe167b03be3b17417475282..e6b65ac60461f4b6578a8aa4db731d739f5a3eaf 100644
Binary files a/lib/images/fileicons/ogv.png and b/lib/images/fileicons/ogv.png differ
diff --git a/lib/images/fileicons/pas.png b/lib/images/fileicons/pas.png
index 0c14372d0e89a0fa4473b030690efeb1036189ab..19f0a3c6c18e2f4fe7fed3e5a49078d35aaa3a9a 100644
Binary files a/lib/images/fileicons/pas.png and b/lib/images/fileicons/pas.png differ
diff --git a/lib/images/fileicons/pdf.png b/lib/images/fileicons/pdf.png
index 1bc154641484e1aa1a1cac0f0787034eb0ec3762..42fbfd2bba6750c04da9fa694ef30a7126694237 100644
Binary files a/lib/images/fileicons/pdf.png and b/lib/images/fileicons/pdf.png differ
diff --git a/lib/images/fileicons/php.png b/lib/images/fileicons/php.png
index 2deb5d3b17e096c529f247cb64eea5b20530aa44..de0d8eeb925234269a5c0ece0fc6badbaba0fadb 100644
Binary files a/lib/images/fileicons/php.png and b/lib/images/fileicons/php.png differ
diff --git a/lib/images/fileicons/pl.png b/lib/images/fileicons/pl.png
index a4fa92203380580b57b6beb0eec2797ec3e60bfd..d95513d25df87d4e12bf3560a14b6264c1f730c2 100644
Binary files a/lib/images/fileicons/pl.png and b/lib/images/fileicons/pl.png differ
diff --git a/lib/images/fileicons/png.png b/lib/images/fileicons/png.png
index 007270532cb95814b7bcd49de0951a4b35a63d4f..273476daf4cac66ebcc25f2d5cc5a3e093bc5ff8 100644
Binary files a/lib/images/fileicons/png.png and b/lib/images/fileicons/png.png differ
diff --git a/lib/images/fileicons/ppt.png b/lib/images/fileicons/ppt.png
index 3355c2712a3603000fb5590858dd9b4c69e925d0..a03d3c0a6f939558594d99dc259d38c03c43297d 100644
Binary files a/lib/images/fileicons/ppt.png and b/lib/images/fileicons/ppt.png differ
diff --git a/lib/images/fileicons/pptx.png b/lib/images/fileicons/pptx.png
index 269cdb8fccac145a8c7fc2b9fcf1d8d511983a5d..9b5c6332ba8c52f59be09a4e0372801090dec832 100644
Binary files a/lib/images/fileicons/pptx.png and b/lib/images/fileicons/pptx.png differ
diff --git a/lib/images/fileicons/ps.png b/lib/images/fileicons/ps.png
index e61d1aa7e30b723c0d69c3973a5faa367e596ef0..3b7848c8e18dd0c4960556e260eb45cb5fcd1576 100644
Binary files a/lib/images/fileicons/ps.png and b/lib/images/fileicons/ps.png differ
diff --git a/lib/images/fileicons/py.png b/lib/images/fileicons/py.png
index f0ed0258c5571d6d4672b7269f4f0d4e061dbe51..893019ee6355f147e5d5443b806099f572dd6e72 100644
Binary files a/lib/images/fileicons/py.png and b/lib/images/fileicons/py.png differ
diff --git a/lib/images/fileicons/rar.png b/lib/images/fileicons/rar.png
index f15d4ce5b34de6518ac93bcdb29597ee61e62a9d..091a635b7a0055b6b584054dfd1266a48d67d212 100644
Binary files a/lib/images/fileicons/rar.png and b/lib/images/fileicons/rar.png differ
diff --git a/lib/images/fileicons/rb.png b/lib/images/fileicons/rb.png
index 0e59207fc16706dbe608f4f40b365c19162a7e4b..9b58db030a433f28cb2d58968fcf4febe25ce526 100644
Binary files a/lib/images/fileicons/rb.png and b/lib/images/fileicons/rb.png differ
diff --git a/lib/images/fileicons/rpm.png b/lib/images/fileicons/rpm.png
index 831424ff59db13558318e8317e9c7fbb2a2601c7..75da50e0c5fa58b7c424ad06b20b850b2fe7effc 100644
Binary files a/lib/images/fileicons/rpm.png and b/lib/images/fileicons/rpm.png differ
diff --git a/lib/images/fileicons/rtf.png b/lib/images/fileicons/rtf.png
index bbc425ca36b666197cf3248ec312b759850813c7..2e5a6e53ee57fa9518860f43e7b14c7e5d3b4c08 100644
Binary files a/lib/images/fileicons/rtf.png and b/lib/images/fileicons/rtf.png differ
diff --git a/lib/images/fileicons/sh.png b/lib/images/fileicons/sh.png
index 2560671066688162472bd6f9fc30b0cdbdbbdc9d..bc483541451bef7c9fc03c08fdedcd0a14d89ea7 100644
Binary files a/lib/images/fileicons/sh.png and b/lib/images/fileicons/sh.png differ
diff --git a/lib/images/fileicons/sql.png b/lib/images/fileicons/sql.png
index 6697943e2778938f47714ecdf639f6b2a2829920..c36f3a812885de2b4f940d4ea301478790834def 100644
Binary files a/lib/images/fileicons/sql.png and b/lib/images/fileicons/sql.png differ
diff --git a/lib/images/fileicons/swf.png b/lib/images/fileicons/swf.png
index b45a72cc934c7aff5e71d61fae3e1813de39166d..5c8838778fa2321a05bcfb8ae44c6aee807a1270 100644
Binary files a/lib/images/fileicons/swf.png and b/lib/images/fileicons/swf.png differ
diff --git a/lib/images/fileicons/sxc.png b/lib/images/fileicons/sxc.png
index c96cf303f14d9f5cd3348ff90a289eb6b6dd8afd..3b5c71f5972e11f18faaecda6ccdc7e4ad653913 100644
Binary files a/lib/images/fileicons/sxc.png and b/lib/images/fileicons/sxc.png differ
diff --git a/lib/images/fileicons/sxd.png b/lib/images/fileicons/sxd.png
index 124b928e138dd9312edf5bde7bbf6834ed6a4f13..15390cd0ca639567471bf421f547533b60469cc1 100644
Binary files a/lib/images/fileicons/sxd.png and b/lib/images/fileicons/sxd.png differ
diff --git a/lib/images/fileicons/sxi.png b/lib/images/fileicons/sxi.png
index 8a5e23033ee209a94d0e6f00100ed26b57a8fecc..a0fb654312e597052f1fa6d6e2619ec9bbe6edaf 100644
Binary files a/lib/images/fileicons/sxi.png and b/lib/images/fileicons/sxi.png differ
diff --git a/lib/images/fileicons/sxw.png b/lib/images/fileicons/sxw.png
index 9a903791cab3cadebb0ed88879a494dae7107656..865dc0c6e7ae134112b434898b285471262fb50b 100644
Binary files a/lib/images/fileicons/sxw.png and b/lib/images/fileicons/sxw.png differ
diff --git a/lib/images/fileicons/tar.png b/lib/images/fileicons/tar.png
index e57029adc8d4e99917dbca855281eae0ae89c6ac..8f9fd0f08a95ca78cb6ee9ba04730be65c2083fc 100644
Binary files a/lib/images/fileicons/tar.png and b/lib/images/fileicons/tar.png differ
diff --git a/lib/images/fileicons/tgz.png b/lib/images/fileicons/tgz.png
index 25ef9e15a0384cf920ae9d2c0a106792ca2711aa..8423ef08738af90d2cb4d0013cf9fdbc2f54c8a8 100644
Binary files a/lib/images/fileicons/tgz.png and b/lib/images/fileicons/tgz.png differ
diff --git a/lib/images/fileicons/txt.png b/lib/images/fileicons/txt.png
index 4fd9216559e2920a3fe1ecc7821129248d879005..1619cc497bc791d57d0d7515090f952bcedcea95 100644
Binary files a/lib/images/fileicons/txt.png and b/lib/images/fileicons/txt.png differ
diff --git a/lib/images/fileicons/wav.png b/lib/images/fileicons/wav.png
index c8880c62e20a5d6501f0de200e722455d8b77b38..80eac97837e27993566d00264c7124c8aa87856d 100644
Binary files a/lib/images/fileicons/wav.png and b/lib/images/fileicons/wav.png differ
diff --git a/lib/images/fileicons/webm.png b/lib/images/fileicons/webm.png
index 55db6191468b1fcd487c01345e4b055362d0dfb7..cec3e6d5b541a2f1c1cb3daf099d69215d1e2e12 100644
Binary files a/lib/images/fileicons/webm.png and b/lib/images/fileicons/webm.png differ
diff --git a/lib/images/fileicons/xls.png b/lib/images/fileicons/xls.png
index 5ac56f20dfe226d646f8320a3d79beeca09dae96..be9b42fff38f8170a67f5ec886e3e738da6354a3 100644
Binary files a/lib/images/fileicons/xls.png and b/lib/images/fileicons/xls.png differ
diff --git a/lib/images/fileicons/xlsx.png b/lib/images/fileicons/xlsx.png
index 89c84c52287893179a26518f2697563ca9b6fa6a..fd5d4f11729c219da6ff3efd9079eaea9a18db13 100644
Binary files a/lib/images/fileicons/xlsx.png and b/lib/images/fileicons/xlsx.png differ
diff --git a/lib/images/fileicons/xml.png b/lib/images/fileicons/xml.png
index 4480a63854677d93de8205f305b1d96a26519e92..2a96d8b319d3d31b2092aab26fa948538470268e 100644
Binary files a/lib/images/fileicons/xml.png and b/lib/images/fileicons/xml.png differ
diff --git a/lib/images/fileicons/zip.png b/lib/images/fileicons/zip.png
index 4a36a35ff7af6167a697ada2c5a4e77cdab5da6d..4ce08bf7d1c200ef4c004e08e01d98867b1f634c 100644
Binary files a/lib/images/fileicons/zip.png and b/lib/images/fileicons/zip.png differ
diff --git a/lib/images/history.png b/lib/images/history.png
index 82a418d44d01b72ecfb6ffbec87decf58aacf539..f6af0f6f18e0e13d38e024dea6ecb3034075cf9d 100644
Binary files a/lib/images/history.png and b/lib/images/history.png differ
diff --git a/lib/images/icon-list.png b/lib/images/icon-list.png
index ecfeed92d9c042ff0840a30084a092c0c13013c3..4ae738a07065e3bac6deb056fb2c2119097db7ea 100644
Binary files a/lib/images/icon-list.png and b/lib/images/icon-list.png differ
diff --git a/lib/images/icon-sort.png b/lib/images/icon-sort.png
index c6403dd3c4bce08f7ba9487ad15fcfe7a3c04ff0..190397eb6172eeb40cd6de84c1d25e2bf3bce5ab 100644
Binary files a/lib/images/icon-sort.png and b/lib/images/icon-sort.png differ
diff --git a/lib/images/info.png b/lib/images/info.png
index 121c7336dc5d7e72080980b934618d6608ee979f..5e2336435224870a0a09c4154f703c7bdd5c5de6 100644
Binary files a/lib/images/info.png and b/lib/images/info.png differ
diff --git a/lib/images/interwiki.png b/lib/images/interwiki.png
index f957e71e56fd7dc70bf8ba1aa9a39b044e1095b1..10a2bbe1ecb76b5fed2d51476bb1a687d5d781eb 100644
Binary files a/lib/images/interwiki.png and b/lib/images/interwiki.png differ
diff --git a/lib/images/interwiki/coral.gif b/lib/images/interwiki/coral.gif
deleted file mode 100644
index 0f9f67587d8ab56fa861a503543e69a9a6dcb80d..0000000000000000000000000000000000000000
Binary files a/lib/images/interwiki/coral.gif and /dev/null differ
diff --git a/lib/images/interwiki/sb.gif b/lib/images/interwiki/sb.gif
deleted file mode 100644
index 710e4945b404d2fdf2e2fca6c45e36d399abc87f..0000000000000000000000000000000000000000
Binary files a/lib/images/interwiki/sb.gif and /dev/null differ
diff --git a/lib/images/interwiki/tel.gif b/lib/images/interwiki/tel.gif
new file mode 100644
index 0000000000000000000000000000000000000000..60158c5652e9ea5ca6e47abd5e9c668e439c5ce2
Binary files /dev/null and b/lib/images/interwiki/tel.gif differ
diff --git a/lib/images/interwiki/user.png b/lib/images/interwiki/user.png
index 79f35ccbdad44489dbf07d1bf688c411aa3b612c..da84e3ddc17c7fda654aa9738ea8c979813a0a74 100644
Binary files a/lib/images/interwiki/user.png and b/lib/images/interwiki/user.png differ
diff --git a/lib/images/license/badge/cc-by-nc-nd.png b/lib/images/license/badge/cc-by-nc-nd.png
index 94aae9e090438bbfeb3a6f6fea17d8688a9ea8a3..c84aff10492669caa65dc8adb64114c7faf80278 100644
Binary files a/lib/images/license/badge/cc-by-nc-nd.png and b/lib/images/license/badge/cc-by-nc-nd.png differ
diff --git a/lib/images/license/badge/cc-by-nc-sa.png b/lib/images/license/badge/cc-by-nc-sa.png
index 51141f5ec4c37da45a6bc625aa4090be1098cf99..e7b57845bafbc3042c41177ebdf8e9909ca0b6eb 100644
Binary files a/lib/images/license/badge/cc-by-nc-sa.png and b/lib/images/license/badge/cc-by-nc-sa.png differ
diff --git a/lib/images/license/badge/cc-by-nc.png b/lib/images/license/badge/cc-by-nc.png
index aeb8cdc8ca6b64763e938f27d1a356e867deeba0..b422cdcfd0e33af019105667c0ff3e418c44750b 100644
Binary files a/lib/images/license/badge/cc-by-nc.png and b/lib/images/license/badge/cc-by-nc.png differ
diff --git a/lib/images/license/badge/cc-by-nd.png b/lib/images/license/badge/cc-by-nd.png
index 6a2e59a682d54e8716bdc77da5336bdd18f1fea3..18322992c13ebdcebdfad31af9d70ead60dffc33 100644
Binary files a/lib/images/license/badge/cc-by-nd.png and b/lib/images/license/badge/cc-by-nd.png differ
diff --git a/lib/images/license/badge/cc-by-sa.png b/lib/images/license/badge/cc-by-sa.png
index f0aa4aaf07b92e07feb1ac4e2df3731643373df3..5749f65b87fe31911a44d659727db630f735a9e4 100644
Binary files a/lib/images/license/badge/cc-by-sa.png and b/lib/images/license/badge/cc-by-sa.png differ
diff --git a/lib/images/license/badge/cc-by.png b/lib/images/license/badge/cc-by.png
index c7389b2f6938e75215375a2e80871f4922089038..700679a13ef4d50f08b752a26667244be941c9ec 100644
Binary files a/lib/images/license/badge/cc-by.png and b/lib/images/license/badge/cc-by.png differ
diff --git a/lib/images/license/badge/cc-zero.png b/lib/images/license/badge/cc-zero.png
index fd3dff422a3fddc4b72208a29b15740ce2e16d20..e6d82bfabab892d1af27b2ad2256d8104833e331 100644
Binary files a/lib/images/license/badge/cc-zero.png and b/lib/images/license/badge/cc-zero.png differ
diff --git a/lib/images/license/badge/cc.png b/lib/images/license/badge/cc.png
index 8ac73aa4e390ae1e35fdd8e811e447910d242468..e28f32c7936ac9d51e95769466902662f26eaa3c 100644
Binary files a/lib/images/license/badge/cc.png and b/lib/images/license/badge/cc.png differ
diff --git a/lib/images/license/badge/gnufdl.png b/lib/images/license/badge/gnufdl.png
index e9291012894865482b300cb7f6326896b75e2975..635de2bd3aed6f5af9fdf9e71ff2765166ba5f83 100644
Binary files a/lib/images/license/badge/gnufdl.png and b/lib/images/license/badge/gnufdl.png differ
diff --git a/lib/images/license/badge/publicdomain.png b/lib/images/license/badge/publicdomain.png
index 8148d037aa12d499ef662be48f3899361ebf4a6a..fd742cc9d4fc07cc4d2ca7ed7a7d1bc78eca924e 100644
Binary files a/lib/images/license/badge/publicdomain.png and b/lib/images/license/badge/publicdomain.png differ
diff --git a/lib/images/license/button/cc-by-nc-nd.png b/lib/images/license/button/cc-by-nc-nd.png
index ac58d8627734c450039dff71c50cc29ac939e5a5..994025f1576979c4812d928f615871fad261fcf0 100644
Binary files a/lib/images/license/button/cc-by-nc-nd.png and b/lib/images/license/button/cc-by-nc-nd.png differ
diff --git a/lib/images/license/button/cc-by-nc-sa.png b/lib/images/license/button/cc-by-nc-sa.png
index a9d23c0b68a46c558c7c83b72fff141ac0844630..3b896bd5203138c72bf593740580ac4f661fa047 100644
Binary files a/lib/images/license/button/cc-by-nc-sa.png and b/lib/images/license/button/cc-by-nc-sa.png differ
diff --git a/lib/images/license/button/cc-by-nc.png b/lib/images/license/button/cc-by-nc.png
index d936464ad3c8f213642d471ec8a0c760edba7163..d5be8f80341cbb0ff1f3e30c6fc7a0533f20a7f5 100644
Binary files a/lib/images/license/button/cc-by-nc.png and b/lib/images/license/button/cc-by-nc.png differ
diff --git a/lib/images/license/button/cc-by-nd.png b/lib/images/license/button/cc-by-nd.png
index 3fc490870bd03eeb5037f7a9a1d17b3aa4ff37ea..e1918b0cdd7a0ebdfbd1a65adfbd1730b39bd59c 100644
Binary files a/lib/images/license/button/cc-by-nd.png and b/lib/images/license/button/cc-by-nd.png differ
diff --git a/lib/images/license/button/cc-by-sa.png b/lib/images/license/button/cc-by-sa.png
index 3c6270a0dbb2180403183a7f542a26d2221242db..9b9b522abeafa9c9d61323bdef521050aee87df4 100644
Binary files a/lib/images/license/button/cc-by-sa.png and b/lib/images/license/button/cc-by-sa.png differ
diff --git a/lib/images/license/button/cc-by.png b/lib/images/license/button/cc-by.png
index 867daaee4731a49f0190d3baae9c631f7a8076f2..53b1dea0f2b1acbf9316443ff6929670dd56a9c2 100644
Binary files a/lib/images/license/button/cc-by.png and b/lib/images/license/button/cc-by.png differ
diff --git a/lib/images/license/button/cc-zero.png b/lib/images/license/button/cc-zero.png
index 251efcd1cc80f3b852d8f3c79d33ce3c9c950a2b..e6a1a5bf27f1fec007506295bf1051348e8112a3 100644
Binary files a/lib/images/license/button/cc-zero.png and b/lib/images/license/button/cc-zero.png differ
diff --git a/lib/images/license/button/cc.png b/lib/images/license/button/cc.png
index 9c492950ffd50953171106df54d42d6041088ce7..e04958a8bab6168c46dd19da9028b8210ccba0e2 100644
Binary files a/lib/images/license/button/cc.png and b/lib/images/license/button/cc.png differ
diff --git a/lib/images/license/button/gnufdl.png b/lib/images/license/button/gnufdl.png
index 0b52ea12e4427800cc5d857acccffcc51d5f16d5..b0e0793de8568c3f65d44152ec2423df57988ba9 100644
Binary files a/lib/images/license/button/gnufdl.png and b/lib/images/license/button/gnufdl.png differ
diff --git a/lib/images/license/button/publicdomain.png b/lib/images/license/button/publicdomain.png
index 54ea38b64555e895f59570d0ba6b44ea270da7b5..b301baf975424cb3a10e1d1c9bf97366b001ae47 100644
Binary files a/lib/images/license/button/publicdomain.png and b/lib/images/license/button/publicdomain.png differ
diff --git a/lib/images/magnifier.png b/lib/images/magnifier.png
index 89febff1035e680c0ef2b4182f09e46e09949011..014fa921bf17e1122a1bff1953e0a61375ab0f20 100644
Binary files a/lib/images/magnifier.png and b/lib/images/magnifier.png differ
diff --git a/lib/images/media_align_center.png b/lib/images/media_align_center.png
index 807f9d9a883f52156c75d51ffc82e5d376166787..8b30a051b7df348056da5b1601e17d945aaff0e8 100644
Binary files a/lib/images/media_align_center.png and b/lib/images/media_align_center.png differ
diff --git a/lib/images/media_align_left.png b/lib/images/media_align_left.png
index fa6cf33ca0bf10e4ac179c6474939588bb0e02e6..d32bbc235c58fef8a5c694da85d484159a30375a 100644
Binary files a/lib/images/media_align_left.png and b/lib/images/media_align_left.png differ
diff --git a/lib/images/media_align_noalign.png b/lib/images/media_align_noalign.png
index 263e090fed529615aa0606b6acb12c0fa542289a..e6ce85790da66432eb7491ed05cce7de6c7a593a 100644
Binary files a/lib/images/media_align_noalign.png and b/lib/images/media_align_noalign.png differ
diff --git a/lib/images/media_align_right.png b/lib/images/media_align_right.png
index 33539dbdb1f2600d38befe6cd92a539b3c1b6409..32a5cb0a342d45c50bf8ade73a4a5a44ee89147f 100644
Binary files a/lib/images/media_align_right.png and b/lib/images/media_align_right.png differ
diff --git a/lib/images/media_link_direct.png b/lib/images/media_link_direct.png
index 4350b803d0dc0727e7bc206471cf91464d1942e7..13d24ad7c2f41ce68bd5133f26344409e946d7fd 100644
Binary files a/lib/images/media_link_direct.png and b/lib/images/media_link_direct.png differ
diff --git a/lib/images/media_link_displaylnk.png b/lib/images/media_link_displaylnk.png
index 53927566a1be29e67155c4ba4a7dc4878ef2d6a5..102834e7b02f0a1c26d6ff1f38c6668eb9d16e66 100644
Binary files a/lib/images/media_link_displaylnk.png and b/lib/images/media_link_displaylnk.png differ
diff --git a/lib/images/media_link_lnk.png b/lib/images/media_link_lnk.png
index 5ff4ee182f79eb9ca9ce396a0390a16fb4e866c1..5db14ad03466af52175519bdca47e3d704a7cd2e 100644
Binary files a/lib/images/media_link_lnk.png and b/lib/images/media_link_lnk.png differ
diff --git a/lib/images/media_link_nolnk.png b/lib/images/media_link_nolnk.png
index c9378c7fd072761d8f1f724df1fc7b6403ba21fa..d277ac9554af876c4caa810d2f82c6d8ea7b14cb 100644
Binary files a/lib/images/media_link_nolnk.png and b/lib/images/media_link_nolnk.png differ
diff --git a/lib/images/media_size_large.png b/lib/images/media_size_large.png
index 012a418c36fd5f2455c4c7f4b7b23a3284fbc8a5..c4f745e4de4a43423078b2e126af36c512026795 100644
Binary files a/lib/images/media_size_large.png and b/lib/images/media_size_large.png differ
diff --git a/lib/images/media_size_medium.png b/lib/images/media_size_medium.png
index 1469f519fe25bb4ac261075082c072f229497d24..580c63ed57c6ef82989c3458f4ddd9c54e2d5533 100644
Binary files a/lib/images/media_size_medium.png and b/lib/images/media_size_medium.png differ
diff --git a/lib/images/media_size_original.png b/lib/images/media_size_original.png
index f58d056aa5de557f17288828baf8adcf11e0ca31..60d1925f5272d5cc0ac89f01c09fa457bc66f757 100644
Binary files a/lib/images/media_size_original.png and b/lib/images/media_size_original.png differ
diff --git a/lib/images/media_size_small.png b/lib/images/media_size_small.png
index a0aafa4a7f0810b48571ecd1001244d54ee67480..8d5a6293be381ead0426decd1929611bf119ce12 100644
Binary files a/lib/images/media_size_small.png and b/lib/images/media_size_small.png differ
diff --git a/lib/images/mediamanager.png b/lib/images/mediamanager.png
index 822b8458aad4d10125fa0c5201913b59d6a6b07b..5093381b62b3262dcbf8e4b2c031d97954439c68 100644
Binary files a/lib/images/mediamanager.png and b/lib/images/mediamanager.png differ
diff --git a/lib/images/notify.png b/lib/images/notify.png
index c18ef1001be7f5eebc88ad22a3b60938e1860018..f6c56ee5524600c84180cb4d051fdd1dc96bdd1e 100644
Binary files a/lib/images/notify.png and b/lib/images/notify.png differ
diff --git a/lib/images/ns.png b/lib/images/ns.png
index c35e832da26a01c0a1a54ca6c88b8ae9423c8b00..77e03b19e838cfc68ddc8b25e8e05015313b5ccc 100644
Binary files a/lib/images/ns.png and b/lib/images/ns.png differ
diff --git a/lib/images/open.png b/lib/images/open.png
index 5f2d408c53819c8d9519ea9230c119ae0303093f..b9e4fdf97c4cf858f46f75139335b8036c248b31 100644
Binary files a/lib/images/open.png and b/lib/images/open.png differ
diff --git a/lib/images/resizecol.png b/lib/images/resizecol.png
index b5aeec0043800139c75cb212e0c31d5c14c62b3f..91ad7d15a1533bf49711a5fc0448e0f42f338db6 100644
Binary files a/lib/images/resizecol.png and b/lib/images/resizecol.png differ
diff --git a/lib/images/success.png b/lib/images/success.png
index 9241adbb2f94a1f792e150f0284806149d4ae5e5..200142f94d0d5a125c449902f696e3949b675fba 100644
Binary files a/lib/images/success.png and b/lib/images/success.png differ
diff --git a/lib/images/toolbar/bold.png b/lib/images/toolbar/bold.png
index 51ddb8880ea44c574b98c851c79d84d4de316ecb..8f425e9d0e251c46333cce02b241289717814797 100644
Binary files a/lib/images/toolbar/bold.png and b/lib/images/toolbar/bold.png differ
diff --git a/lib/images/toolbar/chars.png b/lib/images/toolbar/chars.png
index bad37e503ea9e21d5f82952bb70e811d94959898..a906bc86142d6482ca6d86e4ae0d88deefcfb5f1 100644
Binary files a/lib/images/toolbar/chars.png and b/lib/images/toolbar/chars.png differ
diff --git a/lib/images/toolbar/h.png b/lib/images/toolbar/h.png
index 6a48cbbc0159248d72c70947667fd0bc6e64bc08..7e43d64218ac93f38ec288f8b75095ef7a130d55 100644
Binary files a/lib/images/toolbar/h.png and b/lib/images/toolbar/h.png differ
diff --git a/lib/images/toolbar/h1.png b/lib/images/toolbar/h1.png
index 85bd06e6cca083f1fb4d2a05e8dccca58d2ef20a..9f1970f4eeea99b611e81d1301c871bd88e3de1e 100644
Binary files a/lib/images/toolbar/h1.png and b/lib/images/toolbar/h1.png differ
diff --git a/lib/images/toolbar/h2.png b/lib/images/toolbar/h2.png
index be2c60031b0de8e1e1a19a50a40f5a136c20ca6b..adec9ec015d7ad0dc469484f0bf2457c0f5a2db2 100644
Binary files a/lib/images/toolbar/h2.png and b/lib/images/toolbar/h2.png differ
diff --git a/lib/images/toolbar/h3.png b/lib/images/toolbar/h3.png
index 350da88b698c9d90a288f837d977122787fefb27..a758b89145909153e993029332fda2fca2a71eb6 100644
Binary files a/lib/images/toolbar/h3.png and b/lib/images/toolbar/h3.png differ
diff --git a/lib/images/toolbar/h4.png b/lib/images/toolbar/h4.png
index bc1b7038f8ad49c4bc29c14e7a8d11cedbd6b254..9cd606133e866043fdbbe670fbbdb46eb5fb45dd 100644
Binary files a/lib/images/toolbar/h4.png and b/lib/images/toolbar/h4.png differ
diff --git a/lib/images/toolbar/h5.png b/lib/images/toolbar/h5.png
index b6c263dfb347a14beef7e4c5a61acfd03a7ba135..86b725991665a71b03e6ec456f481ec7f8c50625 100644
Binary files a/lib/images/toolbar/h5.png and b/lib/images/toolbar/h5.png differ
diff --git a/lib/images/toolbar/hequal.png b/lib/images/toolbar/hequal.png
index da4e921ff33cec7cc51c121ba4608110f124e1a7..869a2ddb3ec95fe06dfc57555f935dbfe7e9a528 100644
Binary files a/lib/images/toolbar/hequal.png and b/lib/images/toolbar/hequal.png differ
diff --git a/lib/images/toolbar/hminus.png b/lib/images/toolbar/hminus.png
index c00f70223fbc8238a1e5722622bb43dcf05f348b..1a99ee4b9ff8fa620aa7d2177e12347028bd68c6 100644
Binary files a/lib/images/toolbar/hminus.png and b/lib/images/toolbar/hminus.png differ
diff --git a/lib/images/toolbar/hplus.png b/lib/images/toolbar/hplus.png
index 6124b5c33a8274de9894ec6a49c01332d8c68e72..92efcdbd1ead1812d171f3b212d9255c8c17a7c8 100644
Binary files a/lib/images/toolbar/hplus.png and b/lib/images/toolbar/hplus.png differ
diff --git a/lib/images/toolbar/hr.png b/lib/images/toolbar/hr.png
index de3a8a55bd0bb30dd5b8fd4539eb41e1b5ddb7b0..40ae21026b052d39594547be7f318aadbcf65f1f 100644
Binary files a/lib/images/toolbar/hr.png and b/lib/images/toolbar/hr.png differ
diff --git a/lib/images/toolbar/image.png b/lib/images/toolbar/image.png
index 70b12fcc21831685ddd5e3e95e77844a0f55946d..5cc7afa698a014631ca2d5b60d09e74eada54a1c 100644
Binary files a/lib/images/toolbar/image.png and b/lib/images/toolbar/image.png differ
diff --git a/lib/images/toolbar/italic.png b/lib/images/toolbar/italic.png
index d69e66070eb0fda4cd24a9e8507cc3de86f2eadf..b37dc2d5205f52a493e9c78ed0b207a48aa5418e 100644
Binary files a/lib/images/toolbar/italic.png and b/lib/images/toolbar/italic.png differ
diff --git a/lib/images/toolbar/link.png b/lib/images/toolbar/link.png
index 01105b0d37b1d5d74980509d8fec7f5ea88f11a1..3d2180a6378c5a5158a7cbd4fa18df099bd147f7 100644
Binary files a/lib/images/toolbar/link.png and b/lib/images/toolbar/link.png differ
diff --git a/lib/images/toolbar/linkextern.png b/lib/images/toolbar/linkextern.png
index acc0c6fc5c9ed87c0b4966de0eb14543efd37d1b..e854572a9300f0d81fe407cb6e273c7aa6dd0ca1 100644
Binary files a/lib/images/toolbar/linkextern.png and b/lib/images/toolbar/linkextern.png differ
diff --git a/lib/images/toolbar/mono.png b/lib/images/toolbar/mono.png
index b91ad2e0dc87b276016b27523da3152706a09bf0..a6f56d6dc7efa6b333ea560b750d50f3da920b5b 100644
Binary files a/lib/images/toolbar/mono.png and b/lib/images/toolbar/mono.png differ
diff --git a/lib/images/toolbar/ol.png b/lib/images/toolbar/ol.png
index 186f1fad4559771d75dc28f3904f126de1f59f74..c12229a972a9d7e23d6b17ff79d2b4804fb41c92 100644
Binary files a/lib/images/toolbar/ol.png and b/lib/images/toolbar/ol.png differ
diff --git a/lib/images/toolbar/smiley.png b/lib/images/toolbar/smiley.png
index 85036c1a8cbfc46db899bcc66f33bac9bf40b068..54f1e6fb49a91dd801b62a9f2720da7eac2c650b 100644
Binary files a/lib/images/toolbar/smiley.png and b/lib/images/toolbar/smiley.png differ
diff --git a/lib/images/toolbar/strike.png b/lib/images/toolbar/strike.png
index e532d1f07526ae3b3d81d668bec6311a8fba0f81..5adbba40247c70b86e162fca7efef2531b3f788b 100644
Binary files a/lib/images/toolbar/strike.png and b/lib/images/toolbar/strike.png differ
diff --git a/lib/images/toolbar/ul.png b/lib/images/toolbar/ul.png
index 008820722a297bc030509fa4ce07398c21fbb48b..39e5d342e37269e514f85d8c2818f54647357934 100644
Binary files a/lib/images/toolbar/ul.png and b/lib/images/toolbar/ul.png differ
diff --git a/lib/images/toolbar/underline.png b/lib/images/toolbar/underline.png
index fa271517cd584fdbc159f7ee9af0aead35f5ae4a..57bf3e25a46db15c7678b43ab700bbbab063062e 100644
Binary files a/lib/images/toolbar/underline.png and b/lib/images/toolbar/underline.png differ
diff --git a/lib/images/unc.png b/lib/images/unc.png
index a552d6e6fafea438226730804df7095021f640ac..145b728bbd1bc3e340ab509802bc475c2da7556a 100644
Binary files a/lib/images/unc.png and b/lib/images/unc.png differ
diff --git a/lib/images/up.png b/lib/images/up.png
index b1eac912d7979b3829d9df3cadd75ae5b39756b9..dbacf3f23e5651e28d977e94055c4158204b6f3c 100644
Binary files a/lib/images/up.png and b/lib/images/up.png differ
diff --git a/lib/plugins/acl/admin.php b/lib/plugins/acl/admin.php
index 814bbfe9c44ff27524cad7b2e6c87c43c5d1b63f..f4baec9941aeca5aaad3ec70eb4ac10c05cc5403 100644
--- a/lib/plugins/acl/admin.php
+++ b/lib/plugins/acl/admin.php
@@ -332,7 +332,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
         echo $this->getLang('acl_perms').' ';
         $inl =  $this->_html_select();
         echo '<input type="text" name="acl_w" class="edit" value="'.(($inl)?'':hsc(ltrim($this->who,'@'))).'" />'.NL;
-        echo '<input type="submit" value="'.$this->getLang('btn_select').'" class="button" />'.NL;
+        echo '<button type="submit">'.$this->getLang('btn_select').'</button>'.NL;
         echo '</div>'.NL;
 
         echo '<div id="acl__info">';
@@ -391,10 +391,10 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
         echo $this->_html_checkboxes($current,empty($this->ns),'acl');
 
         if(is_null($current)){
-            echo '<input type="submit" name="cmd[save]" class="button" value="'.$lang['btn_save'].'" />'.NL;
+            echo '<button type="submit" name="cmd[save]">'.$lang['btn_save'].'</button>'.NL;
         }else{
-            echo '<input type="submit" name="cmd[save]" class="button" value="'.$lang['btn_update'].'" />'.NL;
-            echo '<input type="submit" name="cmd[del]" class="button" value="'.$lang['btn_delete'].'" />'.NL;
+            echo '<button type="submit" name="cmd[save]">'.$lang['btn_update'].'</button>'.NL;
+            echo '<button type="submit" name="cmd[del]">'.$lang['btn_delete'].'</button>'.NL;
         }
 
         echo '</fieldset>';
@@ -641,7 +641,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
 
         echo '<tr>';
         echo '<th class="action" colspan="4">';
-        echo '<input type="submit" value="'.$lang['btn_update'].'" name="cmd[update]" class="button" />';
+        echo '<button type="submit" name="cmd[update]">'.$lang['btn_update'].'</button>';
         echo '</th>';
         echo '</tr>';
         echo '</table>';
@@ -682,7 +682,6 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
      */
     function _acl_add($acl_scope, $acl_user, $acl_level){
         global $config_cascade;
-        $acl_config = file_get_contents($config_cascade['acl']['default']);
         $acl_user = auth_nameencode($acl_user,true);
 
         // max level for pagenames is edit
@@ -692,9 +691,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
 
         $new_acl = "$acl_scope\t$acl_user\t$acl_level\n";
 
-        $new_config = $acl_config.$new_acl;
-
-        return io_saveFile($config_cascade['acl']['default'], $new_config);
+        return io_saveFile($config_cascade['acl']['default'], $new_acl, true);
     }
 
     /**
@@ -704,15 +701,11 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
      */
     function _acl_del($acl_scope, $acl_user){
         global $config_cascade;
-        $acl_config = file($config_cascade['acl']['default']);
         $acl_user = auth_nameencode($acl_user,true);
 
         $acl_pattern = '^'.preg_quote($acl_scope,'/').'[ \t]+'.$acl_user.'[ \t]+[0-8].*$';
 
-        // save all non!-matching
-        $new_config = preg_grep("/$acl_pattern/", $acl_config, PREG_GREP_INVERT);
-
-        return io_saveFile($config_cascade['acl']['default'], join('',$new_config));
+        return io_deleteFromFile($config_cascade['acl']['default'], "/$acl_pattern/", true);
     }
 
     /**
diff --git a/lib/plugins/acl/lang/bg/help.txt b/lib/plugins/acl/lang/bg/help.txt
index 2de45342056180b1a27d547975fc993729b3a96c..ffda1ff7136e8615163a5387975ce0939780612c 100644
--- a/lib/plugins/acl/lang/bg/help.txt
+++ b/lib/plugins/acl/lang/bg/help.txt
@@ -1,11 +1,9 @@
 === Помощ ===
 
 От тук можете да добавяте и премахвате права за именни пространства и страници във вашето Wiki.
-
-Левият панел показва всички налични именни пространства и страници.
-
-Формата отгоре ви позволява да преглеждате и променяте правата на избран потребител или група.
-
-В таблицата отдолу са показани всички актуални правила за контрол на достъпа. Можете да я ползвате за бързо изтриване или промяна на множество правила.
+  * левият панел показва всички налични именни пространства и страници.
+  * формата отгоре ви позволява да преглеждате и променяте правата на избран потребител или група.
+  * в таблицата долу са показани всички актуални правила за контрол на достъпа.
+Можете да я ползвате за бързо изтриване или промяна на множество правила.
 
 За да разберете как работи контрола на достъпа в DokuWiki трябва да прочетете [[doku>acl|документацията относно ACL]].
\ No newline at end of file
diff --git a/lib/plugins/acl/lang/ca/lang.php b/lib/plugins/acl/lang/ca/lang.php
index bead981f00765a74832a316a9bd0cdce7e2b1f01..18a4a3602d9c0269b78632c01e4ff8da36d95064 100644
--- a/lib/plugins/acl/lang/ca/lang.php
+++ b/lib/plugins/acl/lang/ca/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * catalan language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Carles Bellver <carles.bellver@cent.uji.es>
  * @author Carles Bellver <carles.bellver@gmail.com>
  * @author carles.bellver@gmail.com
diff --git a/lib/plugins/acl/lang/cy/help.txt b/lib/plugins/acl/lang/cy/help.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f3d6474f848523e1504258cb3856c3420e5ef871
--- /dev/null
+++ b/lib/plugins/acl/lang/cy/help.txt
@@ -0,0 +1,10 @@
+=== Cymorth Byw: ===
+
+Ar y dudalen hon, gallwch chi ychwanegu a dileu hawliau ar gyfer namespaces a thudalennau yn eich wici.
+  * Mae'r panel ar y chwith yn dangos pob namespace a thudalen.
+  * Mae'r ffurflen uchod yn eich galluogi chi i weld a newid hawliau defnyddiwr neu grŵp a ddewiswyd.
+  * Yn y tabl isod, dengys pob rheol rheoli mynediad sydd wedi'u gosod yn bresennol. Gallwch chi ei ddefnyddio i ddileu neu newid sawl rheol ar y tro.
+
+Gall darllen [[doku>acl|dogfennaeth swyddogol ar ACL]] fod o fudd er mwyn eich helpu chi ddeall yn llawn sut mae rheolaeth mynediad yn gweithio mewn DokuWiki.
+
+
diff --git a/lib/plugins/acl/lang/cy/lang.php b/lib/plugins/acl/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..add3ca40422094c046df8f6ccece1911c3e108fb
--- /dev/null
+++ b/lib/plugins/acl/lang/cy/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * welsh language file
+ *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author     Andreas Gohr <andi@splitbrain.org>
+ * @author     Anika Henke <anika@selfthinker.org>
+ * @author     Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author     Alan Davies <ben.brynsadler@gmail.com>
+ */
+
+$lang['admin_acl']  = 'Rheolaeth Rhestr Rheoli Mynediad';
+$lang['acl_group']  = 'Grŵp:';
+$lang['acl_user']   = 'Defnyddiwr:';
+$lang['acl_perms']  = 'Hawliau';
+$lang['page']       = 'Tudalen';
+$lang['namespace']  = 'Namespace'; //namespace
+
+$lang['btn_select']  = 'Dewis';
+
+$lang['p_user_id']    = 'Mae gan y defnyddiwr <b class="acluser">%s</b> yr hawliau canlynol yn bresennol ar dudalen <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns']    = 'Mae gan y defnyddiwr <b class="acluser">%s</b> yr hawliau canlynol yn bresennol mewn namespace <b class="aclns">%s</b>: <i>%s</i>.';//namespace
+$lang['p_group_id']   = 'Mae gan aelodau grŵp <b class="aclgroup">%s</b> yr hawliau canlynol yn bresennol ar dudalen <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns']   = 'Mae gan aelodau grŵp <b class="aclgroup">%s</b> yr hawliau canlynol yn bresennol mewn namespace <b class="aclns">%s</b>: <i>%s</i>.';//namespace
+
+$lang['p_choose_id']  = 'Rhowch <b>ddefnyddiwr neu grŵp</b> yn y ffurflen uchod i weld neu golugu\'r hawliau sydd wedi\'u gosod ar gyfer y dudalen <b class="aclpage">%s</b>.';
+$lang['p_choose_ns']  = 'Rhowch <b>ddefnyddiwr neu grŵp</b> yn y ffurflen uchod i weld neu golugu\'r hawliau sydd wedi\'u gosod ar gyfer y namespace <b class="aclns">%s</b>.';//namespace
+
+
+$lang['p_inherited']  = 'Sylw: Doedd yr hawliau hynny heb eu gosod yn uniongyrchol ond cawsant eu hetifeddu o grwpiau eraill neu namespaces uwch.';//namespace
+$lang['p_isadmin']    = 'Sylw: Mae gan y grŵp neu\'r defnyddiwr hawliau llawn oherwydd mae wedi\'i ffurfweddu fel uwchddefnyddiwr.';
+$lang['p_include']    = 'Mae hawliau uwch yn cynnwys rhai is. Mae Creu, Lanlwytho a Dileu yn berthnasol i namespaces yn unig, nid tudalennau.';//namespace
+
+$lang['current'] = 'Rheolau ACL Cyfredol';
+$lang['where'] = 'Tudalen/Namespace';//namespace
+$lang['who']   = 'Defnyddiwr/Grŵp';
+$lang['perm']  = 'Hawliau';
+
+$lang['acl_perm0']  = 'Dim';
+$lang['acl_perm1']  = 'Darllen';
+$lang['acl_perm2']  = 'Golygu';
+$lang['acl_perm4']  = 'Creu';
+$lang['acl_perm8']  = 'Lanlwytho';
+$lang['acl_perm16'] = 'Dileu';
+$lang['acl_new']    = 'Ychwanegu Cofnod Newydd';
+$lang['acl_mod']    = 'Newid Cofnod';
+//Setup VIM: ex: et ts=2 :
diff --git a/lib/plugins/acl/lang/de/lang.php b/lib/plugins/acl/lang/de/lang.php
index f25a2ea7159ad72829575f4c0f6eb98b99af4b78..f4d7cc9e26b494d645ba50849a7d7bce7cc4bdb2 100644
--- a/lib/plugins/acl/lang/de/lang.php
+++ b/lib/plugins/acl/lang/de/lang.php
@@ -21,6 +21,7 @@
  * @author Christian Wichmann <nospam@zone0.de>
  * @author Paul Lachewsky <kaeptn.haddock@gmail.com>
  * @author Pierre Corell <info@joomla-praxis.de>
+ * @author Michael Große <grosse@cosmocode.de>
  */
 $lang['admin_acl']             = 'Zugangsverwaltung';
 $lang['acl_group']             = 'Gruppe:';
@@ -36,7 +37,7 @@ $lang['p_group_ns']            = 'Mitglieder der Gruppe <b class="aclgroup">%s</
 $lang['p_choose_id']           = 'Bitte geben Sie in obigem Formular eine <b>einen Benutzer oder eine Gruppe</b> an, um die Berechtigungen für die Seite <b class="aclpage">%s</b> zu sehen oder zu ändern.';
 $lang['p_choose_ns']           = 'Bitte geben Sie in obigem Formular eine <b>einen Benutzer oder eine Gruppe</b> an, um die Berechtigungen für den Namensraum <b class="aclns">%s</b> zu sehen oder zu ändern.';
 $lang['p_inherited']           = 'Hinweis: Diese Berechtigungen wurden nicht explizit gesetzt, sondern von anderen Gruppen oder höher liegenden Namensräumen geerbt.';
-$lang['p_isadmin']             = 'Hinweis: Die ausgewählte Gruppe oder Benutzer haben immer alle Berechtigungen das sie als Superuser konfiguriert wurden.';
+$lang['p_isadmin']             = 'Hinweis: Die ausgewählte Gruppe oder Benutzer haben immer alle Berechtigungen, da sie als Superuser konfiguriert wurden.';
 $lang['p_include']             = 'Höhere Berechtigungen schließen niedrigere mit ein. Anlegen, Hochladen und Entfernen gilt nur für Namensräume, nicht für einzelne Seiten';
 $lang['current']               = 'Momentane Zugriffsregeln';
 $lang['where']                 = 'Seite/Namensraum';
diff --git a/lib/plugins/acl/lang/es/help.txt b/lib/plugins/acl/lang/es/help.txt
index c683477a873b94e6c93bf73f8f25e582e35bf575..01f7a2e79c1d1025a4864df7a2b377c6b3ad3c47 100644
--- a/lib/plugins/acl/lang/es/help.txt
+++ b/lib/plugins/acl/lang/es/help.txt
@@ -2,7 +2,7 @@
 
 En esta página puede agregar o retirar permisos para los espacios de nombres y páginas en su wiki.
 
-El panel de la izquierda muiestra todos los espacios de nombres y páginas
+El panel de la izquierda muestra todos los espacios de nombres y páginas
 
 El formulario inferior permite  ver y modificar los permisos del usuario o grupo elegido.
 
diff --git a/lib/plugins/acl/lang/ja/help.txt b/lib/plugins/acl/lang/ja/help.txt
index f7867f8e256e6b5d32d4ef7e72ec6b7dd773620b..a1f03a3afb52e8315f14747be7edcc2dbb002369 100644
--- a/lib/plugins/acl/lang/ja/help.txt
+++ b/lib/plugins/acl/lang/ja/help.txt
@@ -1,11 +1,8 @@
-=== クイックヘルプ: ===
+=== 操作案内 ===
 
-このページでは、Wiki内の名前空間とページに対する権限を追加・削除することができます。
+このページでは、Wiki 内の名前空間とページに対する権限を追加・削除することができます。
+  * 左側のボックスには存在する名前空間とページが表示されています。
+  * 上部のフォームを使って、選択したユーザーもしくはグループの権限を閲覧・変更することができます。
+  * 下部の一覧は、現在設定されているアクセス制御のルールを表示します。この一覧を使って、複数のルールを素早く変更・削除することが可能です。
 
-左側のボックスには存在する名前空間とページが表示されています。
-
-上記のフォームを使って、選択したユーザーもしくはグループの権限を閲覧・変更することができます。
-
-以下のテープルには、現在設定されているアクセスコントロールのルールが表示されています。このテーブルを使って、複数のルールを素早く変更・削除することが可能です。
-
-DokuWikiのアクセスコントロールについては、[[doku>acl|official documentation on ACL]] をお読み下さい。
\ No newline at end of file
+DokuWiki のアクセス制御については、[[doku>ja:acl|アクセス制御リスト (ACL)の公式解説]]をお読み下さい。
\ No newline at end of file
diff --git a/lib/plugins/acl/lang/ko/lang.php b/lib/plugins/acl/lang/ko/lang.php
index 35563ff6c75fc1fb951fb5333959c997e65a20bf..40b6ff3510aa89669ba1053ebec500ffdc1a8b03 100644
--- a/lib/plugins/acl/lang/ko/lang.php
+++ b/lib/plugins/acl/lang/ko/lang.php
@@ -21,10 +21,10 @@ $lang['acl_perms']             = '권한';
 $lang['page']                  = '문서';
 $lang['namespace']             = '이름공간';
 $lang['btn_select']            = '선택';
-$lang['p_user_id']             = '<b class="acluser">%s</b> 사용자는 현재 <b class="aclpage">%s</b>: <i>%s</i> 문서 접근이 가능합니다.';
-$lang['p_user_ns']             = '<b class="acluser">%s</b> 사용자는 현재 <b class="aclns">%s</b>: <i>%s</i> 이름공간 접근이 가능합니다.';
-$lang['p_group_id']            = '<b class="aclgroup">%s</b> 그룹 구성원은 현재 <b class="aclpage">%s</b>: <i>%s</i> 문서 접근이 가능합니다.';
-$lang['p_group_ns']            = '<b class="aclgroup">%s</b> 그룹 구성원은 현재 <b class="aclns">%s</b>: <i>%s</i> 이름공간 접근이 가능합니다.';
+$lang['p_user_id']             = '<b class="acluser">%s</b> 사용자는 현재 <b class="aclpage">%s</b>: <i>%s</i> 문서에 접근이 가능합니다.';
+$lang['p_user_ns']             = '<b class="acluser">%s</b> 사용자는 현재 <b class="aclns">%s</b>: <i>%s</i> 이름공간에 접근이 가능합니다.';
+$lang['p_group_id']            = '<b class="aclgroup">%s</b> 그룹 구성원은 현재 <b class="aclpage">%s</b>: <i>%s</i> 문서에 접근이 가능합니다.';
+$lang['p_group_ns']            = '<b class="aclgroup">%s</b> 그룹 구성원은 현재 <b class="aclns">%s</b>: <i>%s</i> 이름공간에 접근이 가능합니다.';
 $lang['p_choose_id']           = '<b class="aclpage">%s</b> 문서 접근 권한을 보거나 바꾸려면 <b>사용자</b>나 <b>그룹</b>을 위 양식에 입력하세요.';
 $lang['p_choose_ns']           = '<b class="aclns">%s</b> 이름공간 접근 권한을 보거나 바꾸려면 <b>사용자</b>나 <b>그룹</b>을 위 양식에 입력하세요.';
 $lang['p_inherited']           = '참고: 권한이 명시적으로 설정되지 않았으므로 다른 그룹이나 상위 이름공간으로부터 가져왔습니다.';
diff --git a/lib/plugins/acl/lang/lt/lang.php b/lib/plugins/acl/lang/lt/lang.php
index ef339177b772745a629f69cdf5d2d2ede3c49121..2a1748abc50241d7f3d518fdf3177d620250528c 100644
--- a/lib/plugins/acl/lang/lt/lang.php
+++ b/lib/plugins/acl/lang/lt/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * lithuanian language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Linas Valiukas <shirshegsm@gmail.com>
  * @author audrius.klevas@gmail.com
  * @author Arunas Vaitekunas <aras@fan.lt>
diff --git a/lib/plugins/acl/pix/group.png b/lib/plugins/acl/pix/group.png
index d80eb2606865fabcbc9ee53e2e0d1534df8c6337..348d4e55cee99dd26e62a054641735d571a5d6e4 100644
Binary files a/lib/plugins/acl/pix/group.png and b/lib/plugins/acl/pix/group.png differ
diff --git a/lib/plugins/acl/pix/ns.png b/lib/plugins/acl/pix/ns.png
index c35e832da26a01c0a1a54ca6c88b8ae9423c8b00..77e03b19e838cfc68ddc8b25e8e05015313b5ccc 100644
Binary files a/lib/plugins/acl/pix/ns.png and b/lib/plugins/acl/pix/ns.png differ
diff --git a/lib/plugins/acl/pix/user.png b/lib/plugins/acl/pix/user.png
index 7b4a507a0007c2d7237c9450d344eb51877ad155..8d5d1c2e9bd82220dd8fb533e621f1b2bc113c14 100644
Binary files a/lib/plugins/acl/pix/user.png and b/lib/plugins/acl/pix/user.png differ
diff --git a/lib/plugins/acl/plugin.info.txt b/lib/plugins/acl/plugin.info.txt
index cb8fe7e8e9be26e96c36ddb204e3c4270e858a8d..1b2c82cb307b33c0c2a2c690cbce6316c8a156fa 100644
--- a/lib/plugins/acl/plugin.info.txt
+++ b/lib/plugins/acl/plugin.info.txt
@@ -1,7 +1,7 @@
 base   acl
 author Andreas Gohr
 email  andi@splitbrain.org
-date   2014-06-04
+date   2015-07-25
 name   ACL Manager
 desc   Manage Page Access Control Lists
 url    http://dokuwiki.org/plugin:acl
diff --git a/lib/plugins/acl/remote.php b/lib/plugins/acl/remote.php
index b10c544eeb05bf5007952bbd8e5c257ce06e98d5..031686f959ab1c568b3a597e6060c02eb7fe04cc 100644
--- a/lib/plugins/acl/remote.php
+++ b/lib/plugins/acl/remote.php
@@ -8,7 +8,7 @@ class remote_plugin_acl extends DokuWiki_Remote_Plugin {
     /**
      * Returns details about the remote plugin methods
      *
-     * @return array
+     * @return array Information about all provided methods. {@see RemoteAPI}
      */
     public function _getMethods() {
         return array(
@@ -32,9 +32,14 @@ class remote_plugin_acl extends DokuWiki_Remote_Plugin {
      * @param string $scope
      * @param string $user
      * @param int    $level see also inc/auth.php
+     * @throws RemoteAccessDeniedException
      * @return bool
      */
     public function addAcl($scope, $user, $level){
+        if(!auth_isadmin()) {
+            throw new RemoteAccessDeniedException('You are not allowed to access ACLs, superuser permission is required', 114);
+        }
+
         /** @var admin_plugin_acl $apa */
         $apa = plugin_load('admin', 'acl');
         return $apa->_acl_add($scope, $user, $level);
@@ -45,9 +50,14 @@ class remote_plugin_acl extends DokuWiki_Remote_Plugin {
      *
      * @param string $scope
      * @param string $user
+     * @throws RemoteAccessDeniedException
      * @return bool
      */
     public function delAcl($scope, $user){
+        if(!auth_isadmin()) {
+            throw new RemoteAccessDeniedException('You are not allowed to access ACLs, superuser permission is required', 114);
+        }
+
         /** @var admin_plugin_acl $apa */
         $apa = plugin_load('admin', 'acl');
         return $apa->_acl_del($scope, $user);
diff --git a/lib/plugins/acl/script.js b/lib/plugins/acl/script.js
index 58598b1e04d382cd395194007d93b3e0e248b875..86badffdd66f746a3930793ad3e9b6f826b21cd5 100644
--- a/lib/plugins/acl/script.js
+++ b/lib/plugins/acl/script.js
@@ -16,7 +16,7 @@ var dw_acl = {
         }
 
         jQuery('#acl__user select').change(dw_acl.userselhandler);
-        jQuery('#acl__user input[type=submit]').click(dw_acl.loadinfo);
+        jQuery('#acl__user button').click(dw_acl.loadinfo);
 
         $tree = jQuery('#acl__tree');
         $tree.dw_tree({toggle_selector: 'img',
diff --git a/lib/plugins/acl/style.css b/lib/plugins/acl/style.css
index a53a03450cc7e82a3de156edeab61229f87cff06..4233cd30bea4b68ee7aa853c08ac27fbfc892459 100644
--- a/lib/plugins/acl/style.css
+++ b/lib/plugins/acl/style.css
@@ -81,7 +81,6 @@
 [dir=rtl] #acl_manager .aclgroup {
     background: transparent url(pix/group.png) right 1px no-repeat;
     padding: 1px 18px 1px 0px;
-    display: inline-block; /* needed for IE7 */
 }
 
 #acl_manager .acluser {
@@ -91,7 +90,6 @@
 [dir=rtl] #acl_manager .acluser {
     background: transparent url(pix/user.png) right 1px no-repeat;
     padding: 1px 18px 1px 0px;
-    display: inline-block; /* needed for IE7 */
 }
 
 #acl_manager .aclpage {
@@ -101,7 +99,6 @@
 [dir=rtl] #acl_manager .aclpage {
     background: transparent url(pix/page.png) right 1px no-repeat;
     padding: 1px 18px 1px 0px;
-    display: inline-block; /* needed for IE7 */
 }
 
 #acl_manager .aclns {
@@ -111,7 +108,6 @@
 [dir=rtl] #acl_manager .aclns {
     background: transparent url(pix/ns.png) right 1px no-repeat;
     padding: 1px 18px 1px 0px;
-    display: inline-block; /* needed for IE7 */
 }
 
 #acl_manager label.disabled {
diff --git a/lib/plugins/action.php b/lib/plugins/action.php
index 4b5eef60a8b7e23ce3517158dd7524b7952dd05f..23d94a509394f2620d8b3e30667e46e55623c354 100644
--- a/lib/plugins/action.php
+++ b/lib/plugins/action.php
@@ -16,6 +16,8 @@ class DokuWiki_Action_Plugin extends DokuWiki_Plugin {
 
     /**
      * Registers a callback function for a given event
+     *
+     * @param Doku_Event_Handler $controller
      */
     public function register(Doku_Event_Handler $controller) {
         trigger_error('register() not implemented in '.get_class($this), E_USER_WARNING);
diff --git a/lib/plugins/auth.php b/lib/plugins/auth.php
index 4799b3a38dad26a3d3a9a7b4cdc36b1b3ea9df0d..036cb0d77531adec6e4511cb4ccb56b34bc2be88 100644
--- a/lib/plugins/auth.php
+++ b/lib/plugins/auth.php
@@ -295,7 +295,7 @@ class DokuWiki_Auth_Plugin extends DokuWiki_Plugin {
      */
     public function deleteUsers($users) {
         msg("authorisation method does not allow deleting of users", -1);
-        return false;
+        return 0;
     }
 
     /**
diff --git a/lib/plugins/authad/action.php b/lib/plugins/authad/action.php
index 97be9897e676303a238097aa879c33118714c3ff..bc0f90c7ed3121bc974380d8aef2b360745bad0b 100644
--- a/lib/plugins/authad/action.php
+++ b/lib/plugins/authad/action.php
@@ -17,7 +17,7 @@ class action_plugin_authad extends DokuWiki_Action_Plugin {
     /**
      * Registers a callback function for a given event
      */
-    public function register(Doku_Event_Handler &$controller) {
+    public function register(Doku_Event_Handler $controller) {
 
         $controller->register_hook('AUTH_LOGIN_CHECK', 'BEFORE', $this, 'handle_auth_login_check');
         $controller->register_hook('HTML_LOGINFORM_OUTPUT', 'BEFORE', $this, 'handle_html_loginform_output');
diff --git a/lib/plugins/authad/auth.php b/lib/plugins/authad/auth.php
index 88b56046cf3fedd6264cf7bd9be757302f9cc842..6e4f85f36847779048b0cd5ca94dff6406ec7177 100644
--- a/lib/plugins/authad/auth.php
+++ b/lib/plugins/authad/auth.php
@@ -3,6 +3,7 @@
 if(!defined('DOKU_INC')) die();
 
 require_once(DOKU_PLUGIN.'authad/adLDAP/adLDAP.php');
+require_once(DOKU_PLUGIN.'authad/adLDAP/classes/adLDAPUtils.php');
 
 /**
  * Active Directory authentication backend for DokuWiki
@@ -67,6 +68,10 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
      */
     protected $_pattern = array();
 
+    protected $_actualstart = 0;
+
+    protected $_grpsusers = array();
+
     /**
      * Constructor
      */
@@ -114,8 +119,9 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         }
 
         // other can do's are changed in $this->_loadServerConfig() base on domain setup
-        $this->cando['modName'] = true;
-        $this->cando['modMail'] = true;
+        $this->cando['modName'] = (bool)$this->conf['update_name'];
+        $this->cando['modMail'] = (bool)$this->conf['update_mail'];
+        $this->cando['getUserCount'] = true;
     }
 
     /**
@@ -252,7 +258,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
                     ($info['expiresin'] <= $this->conf['expirywarn']) &&
                     !$this->msgshown
                 ) {
-                    $msg = sprintf($lang['authpwdexpire'], $info['expiresin']);
+                    $msg = sprintf($this->getLang('authpwdexpire'), $info['expiresin']);
                     if($this->canDo('modPass')) {
                         $url = wl($ID, array('do'=> 'profile'));
                         $msg .= ' <a href="'.$url.'">'.$lang['btn_profile'].'</a>';
@@ -325,15 +331,138 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
         return false;
     }
 
+    /**
+     * Create a Search-String useable by adLDAPUsers::all($includeDescription = false, $search = "*", $sorted = true)
+     *
+     * @param array $filter
+     * @return string
+     */
+    protected function _constructSearchString($filter){
+        if (!$filter){
+            return '*';
+        }
+        $adldapUtils = new adLDAPUtils($this->_adldap(null));
+        $result = '*';
+        if (isset($filter['name'])) {
+            $result .= ')(displayname=*' . $adldapUtils->ldapSlashes($filter['name']) . '*';
+            unset($filter['name']);
+        }
+
+        if (isset($filter['user'])) {
+            $result .= ')(samAccountName=*' . $adldapUtils->ldapSlashes($filter['user']) . '*';
+            unset($filter['user']);
+        }
+
+        if (isset($filter['mail'])) {
+            $result .= ')(mail=*' . $adldapUtils->ldapSlashes($filter['mail']) . '*';
+            unset($filter['mail']);
+        }
+        return $result;
+    }
+
+    /**
+     * Return a count of the number of user which meet $filter criteria
+     *
+     * @param array $filter  $filter array of field/pattern pairs, empty array for no filter
+     * @return int number of users
+     */
+    public function getUserCount($filter = array()) {
+        $adldap = $this->_adldap(null);
+        if(!$adldap) {
+            dbglog("authad/auth.php getUserCount(): _adldap not set.");
+            return -1;
+        }
+        if ($filter == array()) {
+            $result = $adldap->user()->all();
+        } else {
+            $searchString = $this->_constructSearchString($filter);
+            $result = $adldap->user()->all(false, $searchString);
+            if (isset($filter['grps'])) {
+                $this->users = array_fill_keys($result, false);
+                $usermanager = plugin_load("admin", "usermanager", false);
+                $usermanager->setLastdisabled(true);
+                if (!isset($this->_grpsusers[$this->_filterToString($filter)])){
+                    $this->_fillGroupUserArray($filter,$usermanager->getStart() + 3*$usermanager->getPagesize());
+                } elseif (count($this->_grpsusers[$this->_filterToString($filter)]) < $usermanager->getStart() + 3*$usermanager->getPagesize()) {
+                    $this->_fillGroupUserArray($filter,$usermanager->getStart() + 3*$usermanager->getPagesize() - count($this->_grpsusers[$this->_filterToString($filter)]));
+                }
+                $result = $this->_grpsusers[$this->_filterToString($filter)];
+            } else {
+                $usermanager = plugin_load("admin", "usermanager", false);
+                $usermanager->setLastdisabled(false);
+            }
+
+        }
+
+        if (!$result) {
+            return 0;
+        }
+        return count($result);
+    }
+
+    /**
+     *
+     * create a unique string for each filter used with a group
+     *
+     * @param array $filter
+     * @return string
+     */
+    protected function _filterToString ($filter) {
+        $result = '';
+        if (isset($filter['user'])) {
+            $result .= 'user-' . $filter['user'];
+        }
+        if (isset($filter['name'])) {
+            $result .= 'name-' . $filter['name'];
+        }
+        if (isset($filter['mail'])) {
+            $result .= 'mail-' . $filter['mail'];
+        }
+        if (isset($filter['grps'])) {
+            $result .= 'grps-' . $filter['grps'];
+        }
+        return $result;
+    }
+
+    /**
+     * Create an array of $numberOfAdds users passing a certain $filter, including belonging
+     * to a certain group and save them to a object-wide array. If the array
+     * already exists try to add $numberOfAdds further users to it.
+     *
+     * @param array $filter
+     * @param int $numberOfAdds additional number of users requested
+     * @return int number of Users actually add to Array
+     */
+    protected function _fillGroupUserArray($filter, $numberOfAdds){
+        $this->_grpsusers[$this->_filterToString($filter)];
+        $i = 0;
+        $count = 0;
+        $this->_constructPattern($filter);
+        foreach ($this->users as $user => &$info) {
+            if($i++ < $this->_actualstart) {
+                continue;
+            }
+            if($info === false) {
+                $info = $this->getUserData($user);
+            }
+            if($this->_filter($user, $info)) {
+                $this->_grpsusers[$this->_filterToString($filter)][$user] = $info;
+                if(($numberOfAdds > 0) && (++$count >= $numberOfAdds)) break;
+            }
+        }
+        $this->_actualstart = $i;
+        return $count;
+    }
+
     /**
      * Bulk retrieval of user data
      *
      * @author  Dominik Eckelmann <dokuwiki@cosmocode.de>
      *
-     * @param   int   $start     index of first user to be returned
-     * @param   int   $limit     max number of users to be returned
-     * @param   array $filter    array of field/pattern pairs, null for no filter
-     * @return  array userinfo (refer getUserData for internal userinfo details)
+     * @param   int $start index of first user to be returned
+     * @param   int $limit max number of users to be returned
+     * @param   array $filter array of field/pattern pairs, null for no filter
+     * @return array userinfo (refer getUserData for internal userinfo details)
      */
     public function retrieveUsers($start = 0, $limit = 0, $filter = array()) {
         $adldap = $this->_adldap(null);
@@ -341,27 +470,44 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
 
         if(!$this->users) {
             //get info for given user
-            $result = $adldap->user()->all();
+            $result = $adldap->user()->all(false, $this->_constructSearchString($filter));
             if (!$result) return array();
             $this->users = array_fill_keys($result, false);
         }
 
         $i     = 0;
         $count = 0;
-        $this->_constructPattern($filter);
         $result = array();
 
-        foreach($this->users as $user => &$info) {
-            if($i++ < $start) {
-                continue;
+        if (!isset($filter['grps'])) {
+            $usermanager = plugin_load("admin", "usermanager", false);
+            $usermanager->setLastdisabled(false);
+            $this->_constructPattern($filter);
+            foreach($this->users as $user => &$info) {
+                if($i++ < $start) {
+                    continue;
+                }
+                if($info === false) {
+                    $info = $this->getUserData($user);
+                }
+                $result[$user] = $info;
+                if(($limit > 0) && (++$count >= $limit)) break;
             }
-            if($info === false) {
-                $info = $this->getUserData($user);
+        } else {
+            $usermanager = plugin_load("admin", "usermanager", false);
+            $usermanager->setLastdisabled(true);
+            if (!isset($this->_grpsusers[$this->_filterToString($filter)]) || count($this->_grpsusers[$this->_filterToString($filter)]) < ($start+$limit)) {
+                $this->_fillGroupUserArray($filter,$start+$limit - count($this->_grpsusers[$this->_filterToString($filter)]) +1);
             }
-            if($this->_filter($user, $info)) {
+            if (!$this->_grpsusers[$this->_filterToString($filter)]) return false;
+            foreach($this->_grpsusers[$this->_filterToString($filter)] as $user => &$info) {
+                if($i++ < $start) {
+                    continue;
+                }
                 $result[$user] = $info;
                 if(($limit > 0) && (++$count >= $limit)) break;
             }
+
         }
         return $result;
     }
@@ -376,7 +522,10 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
     public function modifyUser($user, $changes) {
         $return = true;
         $adldap = $this->_adldap($this->_userDomain($user));
-        if(!$adldap) return false;
+        if(!$adldap) {
+            msg($this->getLang('connectfail'), -1);
+            return false;
+        }
 
         // password changing
         if(isset($changes['pass'])) {
@@ -386,7 +535,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
                 if ($this->conf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
                 $return = false;
             }
-            if(!$return) msg('AD Auth: failed to change the password. Maybe the password policy was not met?', -1);
+            if(!$return) msg($this->getLang('passchangefail'), -1);
         }
 
         // changing user data
@@ -408,6 +557,7 @@ class auth_plugin_authad extends DokuWiki_Auth_Plugin {
                 if ($this->conf['debug']) msg('AD Auth: '.$e->getMessage(), -1);
                 $return = false;
             }
+            if(!$return) msg($this->getLang('userchangefail'), -1);
         }
 
         return $return;
diff --git a/lib/plugins/authad/conf/default.php b/lib/plugins/authad/conf/default.php
index 6fb4c9145659dc6d26112f916cb44b5a0df1f49b..f2834c808ca62aae802425aafdb88239a88302e4 100644
--- a/lib/plugins/authad/conf/default.php
+++ b/lib/plugins/authad/conf/default.php
@@ -13,3 +13,5 @@ $conf['use_tls']            = 0;
 $conf['debug']              = 0;
 $conf['expirywarn']         = 0;
 $conf['additional']         = '';
+$conf['update_name']        = 0;
+$conf['update_mail']        = 0;
diff --git a/lib/plugins/authad/conf/metadata.php b/lib/plugins/authad/conf/metadata.php
index 560d25315b8ea298740162edf3a547c8ab8467fb..25c4ab4134decacef4f19eefe7090b4f2514293f 100644
--- a/lib/plugins/authad/conf/metadata.php
+++ b/lib/plugins/authad/conf/metadata.php
@@ -13,3 +13,5 @@ $meta['use_tls']            = array('onoff','_caution' => 'danger');
 $meta['debug']              = array('onoff','_caution' => 'security');
 $meta['expirywarn']         = array('numeric', '_min'=>0,'_caution' => 'danger');
 $meta['additional']         = array('string','_caution' => 'danger');
+$meta['update_name']        = array('onoff','_caution' => 'danger');
+$meta['update_mail']        = array('onoff','_caution' => 'danger');
diff --git a/lib/plugins/authad/lang/ar/lang.php b/lib/plugins/authad/lang/ar/lang.php
index e0ba7681ac80a98dfdf09873f86e3821a9d28ac8..173c80f0c56e689fc6d7d08af94e6ea8246f94cc 100644
--- a/lib/plugins/authad/lang/ar/lang.php
+++ b/lib/plugins/authad/lang/ar/lang.php
@@ -4,5 +4,7 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Mohamed Belhsine <b.mohamed897@gmail.com>
+ * @author Usama Akkad <uahello@gmail.com>
  */
 $lang['domain']                = 'مجال تسجيل الدخول';
+$lang['authpwdexpire']         = 'ستنتهي صلاحية كلمة السر في %d . عليك بتغييرها سريعا.';
diff --git a/lib/plugins/authad/lang/bg/lang.php b/lib/plugins/authad/lang/bg/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3de5df65f0b270822aedce5a7993dddf4c2fea83
--- /dev/null
+++ b/lib/plugins/authad/lang/bg/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Kiril <neohidra@gmail.com>
+ */
+$lang['authpwdexpire']         = 'Срока на паролата ви ще изтече след %d дни. Препоръчително е да я смените по-скоро.';
diff --git a/lib/plugins/authad/lang/ca/lang.php b/lib/plugins/authad/lang/ca/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..abe25a5f249a8637a06e99b519b8156eacf2c9c1
--- /dev/null
+++ b/lib/plugins/authad/lang/ca/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Daniel López Prat <daniel@6temes.cat>
+ */
+$lang['authpwdexpire']         = 'La vostra contrasenya caducarà en %d dies, l\'hauríeu de canviar aviat.';
diff --git a/lib/plugins/authad/lang/cs/lang.php b/lib/plugins/authad/lang/cs/lang.php
index 8119d208aeabb31bde53e05208449ff741ed5376..6223868c625dcbac485a157ee20a9808ccfcbade 100644
--- a/lib/plugins/authad/lang/cs/lang.php
+++ b/lib/plugins/authad/lang/cs/lang.php
@@ -4,5 +4,10 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ * @author Miroslav Svoboda <msv@email.cz>
  */
 $lang['domain']                = 'Přihlašovací doména';
+$lang['authpwdexpire']         = 'Platnost vašeho hesla vyprší za %d dní, měli byste ho změnit co nejdříve.';
+$lang['passchangefail']        = 'Změna hesla selhala. Možná nebyla dodržena pravidla pro jejich tvorbu?';
+$lang['userchangefail']        = 'Změna atributů uživatele selhala. Možná nemá váš účet dostatečná oprávnění pro provádění změn. ';
+$lang['connectfail']           = 'Připojení k serveru Active Directory selhalo.';
diff --git a/lib/plugins/authad/lang/cy/lang.php b/lib/plugins/authad/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8cc3746f230245e310764dee03716741c1aaeb8e
--- /dev/null
+++ b/lib/plugins/authad/lang/cy/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Welsh language file for addomain plugin
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ * @author Alan Davies <ben.brynsadler@gmail.com>
+ */
+
+$lang['domain']          = 'Parth Mewngofnodi';
+$lang['authpwdexpire']   = 'Bydd eich cyfrinair yn dod i ben mewn %d diwrnod, dylech chi ei newid e\'n fuan.';
+$lang['passchangefail']  = 'Methodd newid y cyfrinair. Posib roedd y cyfrinair yn annilys?';
+$lang['userchangefail']  = 'Methodd newid priodoleddau defnyddiwr. Posib \'sdim hawliau \'da chi i wneud newidiadau?';
+$lang['connectfail']     = 'Methodd y cysylltiad i weinydd yr Active Directory.';
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/authad/lang/cy/settings.php b/lib/plugins/authad/lang/cy/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..e343485ec5e5c1b7d4eb1708b8ef6f99b62da2c0
--- /dev/null
+++ b/lib/plugins/authad/lang/cy/settings.php
@@ -0,0 +1,15 @@
+<?php
+
+$lang['account_suffix']     = 'Olddodiad eich cyfrif. Ee. <code>@my.domain.org</code>';
+$lang['base_dn']            = 'Sail eich DN. Eg. <code>DC=my,DC=domain,DC=org</code>';
+$lang['domain_controllers'] = 'Rhestr gwahanwyd gan goma o reolwyr Parth. Ee. <code>srv1.domain.org,srv2.domain.org</code>';
+$lang['admin_username']     = 'Defnyddiwr Active Directory breintiedig gyda mynediad i ddata pob defnyddiwr arall. Yn opsiynol, ond yn hanfodol ar gyfer gweithredoedd penodol fel anfon ebyst tanysgrifio.';
+$lang['admin_password']     = 'Cyfrinair y defnyddiwr uchod.';
+$lang['sso']                = 'A ddylai Mewngofnodi-Unigol gan Kerberos neu NTLM gael ei ddefnyddio?';
+$lang['sso_charset']        = 'Y set nod mae\'ch gweinydd gwe yn pasio defnyddair Kerberos neu NTLM ynddi. Gwag ar gyfer UTF-8 neu latin-1. Bydd angen estyniad iconv.';
+$lang['real_primarygroup']  = 'Os ydy\'r prif grŵp real yn cael ei hadfer yn hytrach na thybio "Defnyddwyr Parth" (arafach).';
+$lang['use_ssl']            = 'Defnyddio cysylltiad SSL? Os ydych chi\'n defnyddio hwn, peidiwch â galluogi TLS isod.';
+$lang['use_tls']            = 'Defnyddio cysylltiad TLS? Os ydych chi\'n defnyddio hwn, peidiwch â galluogi SSL uchod.';
+$lang['debug']              = 'Dangos allbwn dadfygio ychwanegol ar wallau?';
+$lang['expirywarn']         = 'Diwrnodau o flaen llaw i rybuddio defnyddwyr o ran cyfrinair yn dod i ben. 0 i analluogi.';
+$lang['additional']         = 'Rhestr a wahanwyd gan goma o briodoleddau AD ychwanegol i nôl o ddata defnyddiwr. Defnyddiwyd gan rai ategion.';
diff --git a/lib/plugins/authad/lang/da/lang.php b/lib/plugins/authad/lang/da/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d0730216e0156477ec463d195404a565ee1e374
--- /dev/null
+++ b/lib/plugins/authad/lang/da/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Jacob Palm <mail@jacobpalm.dk>
+ * @author Mikael Lyngvig <mikael@lyngvig.org>
+ */
+$lang['domain']                = 'Logondomæne';
+$lang['authpwdexpire']         = 'Din adgangskode vil udløbe om %d dage, du bør ændre det snart.';
diff --git a/lib/plugins/authad/lang/de-informal/lang.php b/lib/plugins/authad/lang/de-informal/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..973c992d2bb914f897988ae4d1ef2faaf3f045ff
--- /dev/null
+++ b/lib/plugins/authad/lang/de-informal/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ * @author rnck <dokuwiki@rnck.de>
+ */
+$lang['authpwdexpire']         = 'Dein Passwort läuft in %d Tag(en) ab. Du solltest es es frühzeitig ändern.';
+$lang['passchangefail']        = 'Das Passwort konnte nicht geändert werden. Eventuell wurde die Passwort-Richtlinie nicht eingehalten.';
+$lang['connectfail']           = 'Verbindung zum Active Directory Server fehlgeschlagen.';
diff --git a/lib/plugins/authad/lang/de/lang.php b/lib/plugins/authad/lang/de/lang.php
index eea511d1bb3f0a96d089b1234704f55713a242b4..ec73ac7d7c7b847476308d1931dda181c32a64de 100644
--- a/lib/plugins/authad/lang/de/lang.php
+++ b/lib/plugins/authad/lang/de/lang.php
@@ -4,5 +4,11 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Andreas Gohr <gohr@cosmocode.de>
+ * @author Philip Knack <p.knack@stollfuss.de>
+ * @author Uwe Benzelrath <uwebenzelrath@gmail.com>
  */
 $lang['domain']                = 'Anmelde-Domäne';
+$lang['authpwdexpire']         = 'Ihr Passwort läuft in %d Tag(en) ab. Sie sollten es frühzeitig ändern.';
+$lang['passchangefail']        = 'Kennwortänderung fehlgeschlagen. Entspricht das Kennwort der Richtlinie?';
+$lang['userchangefail']        = 'Änderung der Nutzerattribute fehlgeschlagen. Möglicherweise hat ihr Benutzerkonto nicht die nötigen Rechte um diese Änderungen durchzuführen';
+$lang['connectfail']           = 'Verbindung zum Active Directory Server fehlgeschlagen.';
diff --git a/lib/plugins/authad/lang/el/lang.php b/lib/plugins/authad/lang/el/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..39e3283ccfbdbb9cb380e5aa716532edf4d767a0
--- /dev/null
+++ b/lib/plugins/authad/lang/el/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Vasileios Karavasilis vasileioskaravasilis@gmail.com
+ */
+$lang['authpwdexpire']         = 'Ο κωδικός πρόσβασης θα λήξει σε %d ημέρες. Προτείνουμε να τον αλλάξετε σύντομα.';
diff --git a/lib/plugins/authad/lang/en/lang.php b/lib/plugins/authad/lang/en/lang.php
index e2967d662d254081f5f9d2c081b8a04e1d6cd730..3e8a9e2a698ab5176eaf544c99187fb6a7255a42 100644
--- a/lib/plugins/authad/lang/en/lang.php
+++ b/lib/plugins/authad/lang/en/lang.php
@@ -1,10 +1,15 @@
 <?php
 /**
  * English language file for addomain plugin
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  *
  * @author Andreas Gohr <gohr@cosmocode.de>
  */
 
-$lang['domain'] = 'Logon Domain';
+$lang['domain']          = 'Logon Domain';
+$lang['authpwdexpire']   = 'Your password will expire in %d days, you should change it soon.';
+$lang['passchangefail']  = 'Failed to change the password. Maybe the password policy was not met?';
+$lang['userchangefail']  = 'Failed to change user attributes. Maybe your account does not have permissions to make changes?';
+$lang['connectfail']     = 'Failed to connect to Active Directory server.';
 
 //Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/authad/lang/en/settings.php b/lib/plugins/authad/lang/en/settings.php
index 92e9ac4e8182ec39f4e7795776afae4fd129ee83..9e7a7c320ab90130b39e8eb764f8aebc86417914 100644
--- a/lib/plugins/authad/lang/en/settings.php
+++ b/lib/plugins/authad/lang/en/settings.php
@@ -13,3 +13,5 @@ $lang['use_tls']            = 'Use TLS connection? If used, do not enable SSL ab
 $lang['debug']              = 'Display additional debugging output on errors?';
 $lang['expirywarn']         = 'Days in advance to warn user about expiring password. 0 to disable.';
 $lang['additional']         = 'A comma separated list of additional AD attributes to fetch from user data. Used by some plugins.';
+$lang['update_name']        = 'Allow users to update their AD display name?';
+$lang['update_mail']        = 'Allow users to update their email address?';
diff --git a/lib/plugins/authad/lang/eo/lang.php b/lib/plugins/authad/lang/eo/lang.php
index be4abc123b4335096225f63e2836eeed8e967943..e738323da067f9c70f583c50587bdf309cc82519 100644
--- a/lib/plugins/authad/lang/eo/lang.php
+++ b/lib/plugins/authad/lang/eo/lang.php
@@ -6,3 +6,4 @@
  * @author Robert Bogenschneider <bogi@uea.org>
  */
 $lang['domain']                = 'Ensaluta domajno';
+$lang['authpwdexpire']         = 'Via pasvorto malvalidos post %d tagoj, prefere ŝanĝu ĝin baldaũ.';
diff --git a/lib/plugins/authad/lang/es/lang.php b/lib/plugins/authad/lang/es/lang.php
index c5b242cbaba065be6a2f90f5d7100bce53973a5c..d3d540b35df7dc21e0bbd05af93bcbddbf353ea0 100644
--- a/lib/plugins/authad/lang/es/lang.php
+++ b/lib/plugins/authad/lang/es/lang.php
@@ -4,5 +4,12 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Juan De La Cruz <juann.dlc@gmail.com>
+ * @author Gerardo Zamudio <gerardo@gerardozamudio.net>
+ * @author Mauricio Segura <maose38@yahoo.es>
+ * @author Romano <romanocl@outlook.com>
  */
 $lang['domain']                = 'Dominio de inicio';
+$lang['authpwdexpire']         = 'Su contraseña caducara en %d días, debería cambiarla lo antes posible';
+$lang['passchangefail']        = 'Error al cambiar la contraseña. ¿Tal vez no se cumplió la directiva de contraseñas?';
+$lang['userchangefail']        = 'Falló al intentar modificar los atributos del usuario.  Puede ser que su cuenta no tiene permisos para realizar cambios?';
+$lang['connectfail']           = 'Error al conectar con el servidor de Active Directory.';
diff --git a/lib/plugins/authad/lang/et/lang.php b/lib/plugins/authad/lang/et/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..94fe9ed8e10b3f004291a498cba7150e07d91c1c
--- /dev/null
+++ b/lib/plugins/authad/lang/et/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Janar Leas <janar.leas@eesti.ee>
+ */
+$lang['authpwdexpire']         = 'Sinu salasõna aegub %d päeva pärast, võiksid seda peatselt muuta.';
diff --git a/lib/plugins/authad/lang/eu/lang.php b/lib/plugins/authad/lang/eu/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..454e3be3496d6b527bb927e46d4f1cfa446f4975
--- /dev/null
+++ b/lib/plugins/authad/lang/eu/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Zigor Astarbe <astarbe@gmail.com>
+ */
+$lang['authpwdexpire']         = 'Zure pasahitza %d egun barru iraungiko da, laster aldatu beharko zenuke.';
diff --git a/lib/plugins/authad/lang/fa/lang.php b/lib/plugins/authad/lang/fa/lang.php
index 1ea73cfdb451e7556892a1a4cd927dd33b0b841d..ca1c8e807686bf30dc505e070c02306dfb856a39 100644
--- a/lib/plugins/authad/lang/fa/lang.php
+++ b/lib/plugins/authad/lang/fa/lang.php
@@ -4,5 +4,11 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Hamid <zarrabi@sharif.edu>
+ * @author Milad DZand <M.DastanZand@gmail.com>
+ * @author Mohmmad Razavi <sepent@gmail.com>
  */
 $lang['domain']                = 'دامنه‌ی ورود';
+$lang['authpwdexpire']         = 'کلمه عبور شما در %d روز منقضی خواهد شد ، شما باید آن را زود تغییر دهید';
+$lang['passchangefail']        = 'تغیر رمزعبور با خطا مواجه شد. شاید سیاستهای مربوط به گذاشتن نام کاربری درست رعایت نشده است.';
+$lang['userchangefail']        = 'تغییر ویژگی‌های کابر با خطا مواجه شد. شاید حساب کاربری شما مجاز به انجام این تغییرات نیست.';
+$lang['connectfail']           = 'ارتباط با سرور Active Directory با خطا مواجه شد.';
diff --git a/lib/plugins/authad/lang/fa/settings.php b/lib/plugins/authad/lang/fa/settings.php
index 161479afbe4ed6d5dc97ced8d35a97ca6a789736..fdf9479bd43c67937ebc57305c82d62f2a231d79 100644
--- a/lib/plugins/authad/lang/fa/settings.php
+++ b/lib/plugins/authad/lang/fa/settings.php
@@ -4,7 +4,21 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Omid Hezaveh <hezpublic@gmail.com>
+ * @author Mohmmad Razavi <sepent@gmail.com>
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
  */
+$lang['account_suffix']        = 'پسوند حساب کاربری شما. به عنوان مثال <code>@my.domain.org</code>';
+$lang['base_dn']               = 'DN پایه شما. به عنوان مثال <code>DC=my,DC=domain,DC=org</code>';
+$lang['domain_controllers']    = 'لیست کنترل کننده‌های دامنه که با کاما ازهم جدا شده اند. به عنوان مثال <code>srv1.domain.org,srv2.domain.org</code';
+$lang['admin_username']        = 'کاربر دارای دسترسی Active Directory که دارای دسترسی به تمام اطلاعات کاربران است. اختیاریست ولی برای برخی فعالیت‌ها مثل ایمیل‌های عضویت لازم است.';
 $lang['admin_password']        = 'رمز کاربر بالایی ';
+$lang['sso']                   = 'آیا Single-Sign-On از طریق Kerberos یا NTLM استفاده شود؟';
+$lang['sso_charset']           = 'کدبندی نویسه‌ای که وب‌سرورتان نام کاربری NTLM یا Kerberos را به آن منتقل می‌کند. برای انتخاب UTF-8 یا latin-1 خالی بگذارید. لازم است که افزونهٔ iconv نصب باشد.';
+$lang['real_primarygroup']     = 'باید گروه اصلی به جای "دامنهٔ کاربران" برگردد. (کندتر)';
 $lang['use_ssl']               = 'از اس‌اس‌ال استفاده می‌کنید؟ در این صورت تی‌ال‌اس را در پایین فعال نکنید. ';
 $lang['use_tls']               = 'از تی‌ال‌اس استفاده می‌کنید؟ در این صورت اس‌اس‌ال را در بالا فعال نکنید. ';
+$lang['debug']                 = 'داده‌های اضافی خروجی دیباگ در هنگام بروز خطا نمایش داده شود؟';
+$lang['expirywarn']            = 'تعداد روزهایی که پس گذشتن آن برای تغییر رمزعبور به شما هشدار داده شود. باری غیرفعال سازی از مقدار 0 استفاده کنید.';
+$lang['additional']            = 'لیست صفات اضافی AD برای گرفتن از اطلاعات کاربر که توسط برخی از افزونه‌ها استفاده می‌شود. با کاما جدا شود.';
+$lang['update_name']           = 'به کاربران اجازهٔ به روزرسانی نام AD داده شود؟';
+$lang['update_mail']           = 'به کاربران اجازهٔ به روزرسانی ایمیلشان داده شود؟';
diff --git a/lib/plugins/authad/lang/fi/lang.php b/lib/plugins/authad/lang/fi/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..650d44f7ad36c18fa6f346d7fbcc27ebfea409aa
--- /dev/null
+++ b/lib/plugins/authad/lang/fi/lang.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Jussi Takala <jussi.takala@live.fi>
+ */
+
+$lang['authpwdexpire']         = 'Salasanasi vanhenee %d pv:n päästä, vaihda salasanasi pikaisesti.';
diff --git a/lib/plugins/authad/lang/fr/lang.php b/lib/plugins/authad/lang/fr/lang.php
index 2de362e41dd4b60f3d40124e6a572df301a24821..1ab523ff146f67e516bce3155b8732a119f72766 100644
--- a/lib/plugins/authad/lang/fr/lang.php
+++ b/lib/plugins/authad/lang/fr/lang.php
@@ -4,5 +4,12 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author ggallon <gwenael.gallon@mac.com>
+ * @author Yannick Aure <yannick.aure@gmail.com>
+ * @author Pietroni <pietroni@informatique.univ-paris-diderot.fr>
+ * @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
  */
 $lang['domain']                = 'Domaine de connexion';
+$lang['authpwdexpire']         = 'Votre mot de passe expirera dans %d jours, vous devriez le changer bientôt.';
+$lang['passchangefail']        = 'Impossible de changer le mot de passe. Il est possible que les règles de sécurité des mots de passe n\'aient pas été respectées.';
+$lang['userchangefail']        = 'Impossible de modifier les attributs de l\'utilisateur. Votre compte n\'a peut-être pas les permissions d\'effectuer des changements.';
+$lang['connectfail']           = 'Impossible de se connecter au serveur Active Directory.';
diff --git a/lib/plugins/authad/lang/gl/lang.php b/lib/plugins/authad/lang/gl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..b10126a88433825df4609763e0ff0cfda66a2bfb
--- /dev/null
+++ b/lib/plugins/authad/lang/gl/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Rodrigo Rega <rodrigorega@gmail.com>
+ */
+$lang['authpwdexpire']         = 'A túa contrasinal expirará en %d días, deberías cambiala pronto.';
diff --git a/lib/plugins/authad/lang/he/lang.php b/lib/plugins/authad/lang/he/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5b193ed5f91cb6f8a9e68d5e48eeb5c28f33a8af
--- /dev/null
+++ b/lib/plugins/authad/lang/he/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author tomer <tomercarolldergicz@gmail.com>
+ * @author Menashe Tomer <menashesite@gmail.com>
+ */
+$lang['authpwdexpire']         = 'הסיסמה שלך תפוג ב %d ימים, אתה צריך לשנות את זה בקרוב.';
+$lang['passchangefail']        = 'שגיאה בשינוי סיסמה. האם הסיסמה תואמת למדיניות המערכת?';
diff --git a/lib/plugins/authad/lang/he/settings.php b/lib/plugins/authad/lang/he/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1436813018bfe4b8c55ef1f9a0857422cb0a8ee
--- /dev/null
+++ b/lib/plugins/authad/lang/he/settings.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Menashe Tomer <menashesite@gmail.com>
+ */
+$lang['admin_password']        = 'סיסמת המשתמש המוזכן';
diff --git a/lib/plugins/authad/lang/hr/lang.php b/lib/plugins/authad/lang/hr/lang.php
index f750c91b5379545d53d703dbcbcd5c3e9df623c4..99c5c1623a033aa51b686a9bdcb0df980dc8c9dc 100644
--- a/lib/plugins/authad/lang/hr/lang.php
+++ b/lib/plugins/authad/lang/hr/lang.php
@@ -6,3 +6,6 @@
  * @author Davor Turkalj <turki.bsc@gmail.com>
  */
 $lang['domain']                = 'Domena za prijavu';
+$lang['authpwdexpire']         = 'Vaša lozinka će isteći za %d dana, trebate ju promijeniti.';
+$lang['passchangefail']        = 'Ne mogu izmijeniti lozinku. Možda nije zadovoljen set pravila za lozinke?';
+$lang['connectfail']           = 'Ne mogu se povezati s Active Directory poslužiteljem.';
diff --git a/lib/plugins/authad/lang/hu/lang.php b/lib/plugins/authad/lang/hu/lang.php
index 7bb6084b0e2d0c270bb08560ec6b40e1c9996737..023e6b956613f1b9b219891fa014f3be732a53da 100644
--- a/lib/plugins/authad/lang/hu/lang.php
+++ b/lib/plugins/authad/lang/hu/lang.php
@@ -6,3 +6,6 @@
  * @author Marton Sebok <sebokmarton@gmail.com>
  */
 $lang['domain']                = 'Bejelentkezési tartomány';
+$lang['authpwdexpire']         = 'A jelszavad %d nap múlva lejár, hamarosan meg kell változtatnod.';
+$lang['passchangefail']        = 'A jelszó megváltoztatása sikertelen. Lehet, hogy nem felel meg a jelszóházirendnek?';
+$lang['connectfail']           = 'A csatlakozás az Active Directory szerverhez sikertelen.';
diff --git a/lib/plugins/authad/lang/it/lang.php b/lib/plugins/authad/lang/it/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..a30cd7cea826aa350d77ac128da20799841e5f7d
--- /dev/null
+++ b/lib/plugins/authad/lang/it/lang.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Matteo Pasotti <matteo@xquiet.eu>
+ * @author Torpedo <dgtorpedo@gmail.com>
+ */
+$lang['domain']                = 'Dominio di accesso';
+$lang['authpwdexpire']         = 'La tua password scadrà in %d giorni, dovresti cambiarla quanto prima.';
+$lang['passchangefail']        = 'Cambio password fallito. Forse non sono state rispettate le regole adottate per le password';
+$lang['userchangefail']        = 'Cambio attributi utente fallito. Forse il tuo account non ha i permessi per eseguire delle modifiche?';
+$lang['connectfail']           = 'Connessione fallita al server Active Directory';
diff --git a/lib/plugins/authad/lang/it/settings.php b/lib/plugins/authad/lang/it/settings.php
index 2d68dad68750a51d3b1c26cad50222ba7a2985ce..3a92fcb7bd124046a8c1225e4bdc9ed3fcc8d65c 100644
--- a/lib/plugins/authad/lang/it/settings.php
+++ b/lib/plugins/authad/lang/it/settings.php
@@ -4,6 +4,7 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Edmondo Di Tucci <snarchio@gmail.com>
+ * @author Torpedo <dgtorpedo@gmail.com>
  */
 $lang['account_suffix']        = 'Il suffisso del tuo account. Eg. <code>@my.domain.org</code>';
 $lang['base_dn']               = 'Il tuo DN. base Eg. <code>DC=my,DC=domain,DC=org</code>';
@@ -11,6 +12,8 @@ $lang['domain_controllers']    = 'Elenco separato da virgole di Domain Controlle
 $lang['admin_username']        = 'Utente privilegiato di Active Directory con accesso ai dati di tutti gli utenti. Opzionale ma necessario per alcune attività come mandare email di iscrizione.';
 $lang['admin_password']        = 'La password dell\'utente soprascritto.';
 $lang['sso']                   = 'Deve essere usato Single-Sign-On via Kerberos oppure NTLM?';
+$lang['sso_charset']           = 'Il set di caratteri che il tuo web server passera nel nome utente Kerberos o NTLM. Lasciare vuoto per UTF-8 p latin-1. Richiesta estensione iconv. ';
+$lang['real_primarygroup']     = 'Se il vero gruppo primario dovesse essere risolo invece di assumere "Domain Users" (lento).';
 $lang['use_ssl']               = 'Usare la connessione SSL? Se usata, non abilitare TSL qui sotto.';
 $lang['use_tls']               = 'Usare la connessione TSL? Se usata, non abilitare SSL qui sopra.';
 $lang['debug']                 = 'Visualizzare output addizionale di debug per gli errori?';
diff --git a/lib/plugins/authad/lang/ja/lang.php b/lib/plugins/authad/lang/ja/lang.php
index b40aa5da39437c18ead598bb5d306f0df038f4ed..e82ca379142397d4d160decfac562fb17326b754 100644
--- a/lib/plugins/authad/lang/ja/lang.php
+++ b/lib/plugins/authad/lang/ja/lang.php
@@ -4,5 +4,10 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author PzF_X <jp_minecraft@yahoo.co.jp>
+ * @author Osaka <mr.osaka@gmail.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
  */
 $lang['domain']                = 'ログオン時のドメイン';
+$lang['authpwdexpire']         = 'あなたのパスワードは、あと%d日で有効期限が切れます。パスワードを変更してください。';
+$lang['passchangefail']        = 'パスワードを変更できませんでした。パスワードのルールに合わなかったのかもしれません。';
+$lang['connectfail']           = 'Active Directoryサーバーに接続できませんでした。';
diff --git a/lib/plugins/authad/lang/ka/lang.php b/lib/plugins/authad/lang/ka/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab0c86902c79de05d313ca6cabe67572732ec88a
--- /dev/null
+++ b/lib/plugins/authad/lang/ka/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Luka Lejava <luka.lejava@gmail.com>
+ */
+$lang['authpwdexpire']         = 'თქვენს პაროლს ვადა გაუვა %d დღეში, მალე შეცვლა მოგიწევთ.';
diff --git a/lib/plugins/authad/lang/ko/lang.php b/lib/plugins/authad/lang/ko/lang.php
index 5a2416b2c9028314b7b2923d9335c24ee3b82dbb..1326f28b488c6995fea8ceeb1c534838a8fb2085 100644
--- a/lib/plugins/authad/lang/ko/lang.php
+++ b/lib/plugins/authad/lang/ko/lang.php
@@ -4,5 +4,10 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Myeongjin <aranet100@gmail.com>
+ * @author Erial <erial2@gmail.com>
  */
 $lang['domain']                = '로그온 도메인';
+$lang['authpwdexpire']         = '비밀번호를 바꾼지 %d일이 지났으며, 비밀번호를 곧 바꿔야 합니다.';
+$lang['passchangefail']        = '비밀번호를 바꾸는 데 실패했습니다. 비밀번호 정책을 따르지 않았나요?';
+$lang['userchangefail']        = '사용자의 특성 변경에 실패했습니다. 사용하시는 계정에 변경 권한이 있는지 확인해주십시오.';
+$lang['connectfail']           = 'Active Directory 서버에 연결하는 데 실패했습니다.';
diff --git a/lib/plugins/authad/lang/lv/lang.php b/lib/plugins/authad/lang/lv/lang.php
index 74becf756b55190068fe3859c1a59b9542d6049b..a208ac949f8391dd37c9b98147833fba0c17ca45 100644
--- a/lib/plugins/authad/lang/lv/lang.php
+++ b/lib/plugins/authad/lang/lv/lang.php
@@ -6,3 +6,4 @@
  * @author Aivars Miška <allefm@gmail.com>
  */
 $lang['domain']                = 'Iežurnālēšanās domēns';
+$lang['authpwdexpire']         = 'Tavai parolei pēc %d dienām biegsies termiņš, tā drīzumā jānomaina.';
diff --git a/lib/plugins/authad/lang/nl/lang.php b/lib/plugins/authad/lang/nl/lang.php
index ea841906992cec7d65707b9e7b3d86a7648ae31b..4e873201f765a8bcbe0a7fe8d0acbe513b70fa30 100644
--- a/lib/plugins/authad/lang/nl/lang.php
+++ b/lib/plugins/authad/lang/nl/lang.php
@@ -4,5 +4,12 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Rene <wllywlnt@yahoo.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Hugo Smet <hugo.smet@scarlet.be>
+ * @author Wesley de Weerd <wesleytiel@gmail.com>
  */
 $lang['domain']                = 'Inlog Domein';
+$lang['authpwdexpire']         = 'Je wachtwoord verloopt in %d dagen, je moet het binnenkort veranderen';
+$lang['passchangefail']        = 'Wijziging van het paswoord is mislukt. Wellicht beantwoord het paswoord niet aan de voorwaarden. ';
+$lang['userchangefail']        = 'Kan gebruiker attributen veranderen . Misschien heeft uw account geen rechten om wijzigingen aan te brengen?';
+$lang['connectfail']           = 'Connectie met Active Directory server mislukt.';
diff --git a/lib/plugins/authad/lang/no/lang.php b/lib/plugins/authad/lang/no/lang.php
index a1c9c7e8a59a1799e222ea04815b74a01cc7a2f1..b497c4719549fa8913b0a22fcf4e95968f46d7fb 100644
--- a/lib/plugins/authad/lang/no/lang.php
+++ b/lib/plugins/authad/lang/no/lang.php
@@ -4,5 +4,10 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Patrick <spill.p@hotmail.com>
+ * @author Thomas Juberg <Thomas.Juberg@Gmail.com>
+ * @author Danny Buckhof <daniel.raknes@hotmail.no>
  */
 $lang['domain']                = 'Loggpå-domene';
+$lang['authpwdexpire']         = 'Ditt passord går ut om %d dager, du bør endre det snarest.';
+$lang['passchangefail']        = 'Feil ved endring av passord. Det kan være at passordet ikke er i tråd med passordpolicyen ';
+$lang['connectfail']           = 'Feil ved kontakt med Active Directory serveren.';
diff --git a/lib/plugins/authad/lang/no/settings.php b/lib/plugins/authad/lang/no/settings.php
index f309ead50abb599da84b8804aca31e433dc1b1e8..727f6611dae6eecff4f9e2e7e769f40d4f26f56f 100644
--- a/lib/plugins/authad/lang/no/settings.php
+++ b/lib/plugins/authad/lang/no/settings.php
@@ -5,7 +5,10 @@
  * 
  * @author Christopher Schive <chschive@frisurf.no>
  * @author Patrick <spill.p@hotmail.com>
+ * @author Danny Buckhof <daniel.raknes@hotmail.no>
  */
 $lang['account_suffix']        = 'Ditt konto-suffiks F. Eks. <code>@my.domain.org</code>';
 $lang['admin_password']        = 'Passordet til brukeren over.';
+$lang['use_ssl']               = 'Bruk SSL tilknytning? Hvis denne brukes, ikke aktiver TLS nedenfor.';
+$lang['use_tls']               = 'Bruk TLS tilknytning? Hvis denne brukes, ikke aktiver SSL over.';
 $lang['expirywarn']            = 'Antall dager på forhånd brukeren varsles om at passordet utgår. 0 for å deaktivere.';
diff --git a/lib/plugins/authad/lang/pl/lang.php b/lib/plugins/authad/lang/pl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..645b46afa4fa3ae4b34ccdd7bdb247286a1df905
--- /dev/null
+++ b/lib/plugins/authad/lang/pl/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Aoi Karasu <aoikarasu@gmail.com>
+ */
+$lang['authpwdexpire']         = 'Twoje hasło wygaśnie za %d dni. Należy je zmienić w krótkim czasie.';
diff --git a/lib/plugins/authad/lang/pt-br/lang.php b/lib/plugins/authad/lang/pt-br/lang.php
index 5fa963d4e2a2e8ea8e7be760f35c82f5b030f6c1..ddcfaa875ea36d994858243c0f445fd8a1a9f4a8 100644
--- a/lib/plugins/authad/lang/pt-br/lang.php
+++ b/lib/plugins/authad/lang/pt-br/lang.php
@@ -4,5 +4,11 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Felipe Castro <fefcas@gmail.com>
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Guilherme Cardoso <guicardoso@gmail.com>
  */
 $lang['domain']                = 'Domínio de "Logon"';
+$lang['authpwdexpire']         = 'Sua senha vai expirar em %d dias. Você deve mudá-la assim que for possível.';
+$lang['passchangefail']        = 'Não foi possível alterar a senha. Pode ser algum conflito com a política de senhas.';
+$lang['userchangefail']        = 'Falha ao mudar os atributos do usuário. Talvez a sua conta não tenha permissões para fazer mudanças.';
+$lang['connectfail']           = 'Não foi possível conectar ao servidor Active Directory.';
diff --git a/lib/plugins/authad/lang/pt/lang.php b/lib/plugins/authad/lang/pt/lang.php
index f307bc901182de18b61b8841257886494b6c96e4..450e3a137603d72f6332559e1267e1d3f9c53128 100644
--- a/lib/plugins/authad/lang/pt/lang.php
+++ b/lib/plugins/authad/lang/pt/lang.php
@@ -4,5 +4,10 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Paulo Silva <paulotsilva@yahoo.com>
+ * @author André Neves <drakferion@gmail.com>
+ * @author Paulo Carmino <contato@paulocarmino.com>
  */
 $lang['domain']                = 'Domínio de Início de Sessão';
+$lang['authpwdexpire']         = 'A sua senha expirará dentro de %d dias, deve mudá-la em breve.';
+$lang['passchangefail']        = 'Falha ao alterar a senha. Tente prosseguir com uma senha mais segura.';
+$lang['connectfail']           = 'Falha ao conectar com o servidor Active Directory.';
diff --git a/lib/plugins/authad/lang/pt/settings.php b/lib/plugins/authad/lang/pt/settings.php
index 6256eb5975a116c921e0539c9734b7c4076630a3..dc6741b2a65d3763c326bfaa406d67eb6c3ad54d 100644
--- a/lib/plugins/authad/lang/pt/settings.php
+++ b/lib/plugins/authad/lang/pt/settings.php
@@ -9,7 +9,7 @@
  * @author Guido Salatino <guidorafael23@gmail.com>
  */
 $lang['account_suffix']        = 'O sufixo da sua conta. Por exemplo, <code>@my.domain.org</code>';
-$lang['base_dn']               = 'Sua base DN. Eg. <code> DC=meu, DC=dominio, DC=org </ code>';
+$lang['base_dn']               = 'Sua base DN. Eg. <code> DC=meu, DC=dominio, DC=org </code>';
 $lang['domain_controllers']    = 'Uma lista separada por vírgulas de Controladores de Domínio (AD DC). Ex.: <code>srv1.domain.org,srv2.domain.org</code>';
 $lang['admin_username']        = 'Um utilizador com privilégios na Active Directory que tenha acesso aos dados de todos os outros utilizadores. Opcional, mas necessário para certas ações como enviar emails de subscrição.';
 $lang['admin_password']        = 'A senha para o utilizador acima.';
diff --git a/lib/plugins/authad/lang/ro/lang.php b/lib/plugins/authad/lang/ro/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..28a0e1e64726ca580e3a87fca0a3fc3e6a62d86e
--- /dev/null
+++ b/lib/plugins/authad/lang/ro/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Razvan Deaconescu <razvan.deaconescu@cs.pub.ro>
+ */
+$lang['authpwdexpire']         = 'Parola va expira în %d zile, ar trebui să o schimbi în curând.';
diff --git a/lib/plugins/authad/lang/ru/lang.php b/lib/plugins/authad/lang/ru/lang.php
index 6f3c03e39bf9f6e0a9adb48f7b55e59a9adbff84..ebce005c0fbb5d99e3f9e740ffd72fa7cfc337a8 100644
--- a/lib/plugins/authad/lang/ru/lang.php
+++ b/lib/plugins/authad/lang/ru/lang.php
@@ -4,5 +4,11 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Takumo <9206984@mail.ru>
+ * @author dimsharav <dimsharav@gmail.com>
  */
 $lang['domain']                = 'Домен';
+$lang['authpwdexpire']         = 'Действие вашего пароля истекает через %d дней. Вы должны изменить его как можно скорее';
+$lang['passchangefail']        = 'Не удалось изменить пароль. Возможно, он не соответствует требованиям к паролю.';
+$lang['userchangefail']        = 'Ошибка при изменении атрибутов пользователя. Возможно, у Вашей учетной записи недостаточно прав?';
+$lang['connectfail']           = 'Невозможно соединиться с сервером AD.';
diff --git a/lib/plugins/authad/lang/ru/settings.php b/lib/plugins/authad/lang/ru/settings.php
index 99c916b44cb5bf93acbb33e1c5479a80a34b89e4..d9cf1fd690c69a1cf2aae2086bb51b8e01f45406 100644
--- a/lib/plugins/authad/lang/ru/settings.php
+++ b/lib/plugins/authad/lang/ru/settings.php
@@ -14,14 +14,14 @@
  */
 $lang['account_suffix']        = 'Суффикс вашего аккаунта. Например, <code>@my.domain.org</code>';
 $lang['base_dn']               = 'Ваш базовый DN. Например: <code>DC=my,DC=domain,DC=org</code>';
-$lang['domain_controllers']    = 'Список DNS-серверов, разделенных запятой. Например:<code>srv1.domain.org,srv2.domain.org</code>';
+$lang['domain_controllers']    = 'Список DNS-серверов, разделённых запятой. Например:<code>srv1.domain.org,srv2.domain.org</code>';
 $lang['admin_username']        = 'Привилегированный пользователь Active Directory с доступом ко всем остальным пользовательским данным. Необязательно, однако необходимо для определённых действий вроде отправки почтовой подписки.';
 $lang['admin_password']        = 'Пароль для указанного пользователя.';
 $lang['sso']                   = 'Использовать SSO (Single-Sign-On) через Kerberos или NTLM?';
 $lang['sso_charset']           = 'Кодировка, в которой веб-сервер передаёт имя пользователя Kerberos или NTLM. Для UTF-8 или latin-1 остаётся пустым. Требует расширение iconv.';
-$lang['real_primarygroup']     = 'Должна ли использоваться настоящая первичная группа вместо "Domain Users" (медленнее)';
+$lang['real_primarygroup']     = 'Должна ли использоваться настоящая первичная группа вместо “Domain Users” (медленнее)';
 $lang['use_ssl']               = 'Использовать SSL? Если да, то не включайте TLS.';
 $lang['use_tls']               = 'Использовать TLS? Если да, то не включайте SSL.';
 $lang['debug']                 = 'Выводить дополнительную информацию при ошибках?';
-$lang['expirywarn']            = 'За сколько дней нужно предупреждать пользователя о необходимости изменить пароль. 0 - отключить.';
-$lang['additional']            = 'Дополнительные AD атрибуты, разделённые запятой, для выборки из данных пользователя. Используется некоторыми плагинами.';
+$lang['expirywarn']            = 'За сколько дней нужно предупреждать пользователя о необходимости изменить пароль? Для отключения укажите 0 (ноль).';
+$lang['additional']            = 'Дополнительные AD-атрибуты, разделённые запятой, для выборки из данных пользователя. Используется некоторыми плагинами.';
diff --git a/lib/plugins/authad/lang/sk/lang.php b/lib/plugins/authad/lang/sk/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb0698f460a9e1e06edf9b981db41a1689d20281
--- /dev/null
+++ b/lib/plugins/authad/lang/sk/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['authpwdexpire']         = 'Platnosť hesla vyprší za %d dní, mali by ste ho zmeniť čo najskôr.';
diff --git a/lib/plugins/authad/lang/sl/lang.php b/lib/plugins/authad/lang/sl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc7b3567ae4185063385632b9b162fa1af9e15d7
--- /dev/null
+++ b/lib/plugins/authad/lang/sl/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author matej <mateju@svn.gnome.org>
+ */
+$lang['authpwdexpire']         = 'Geslo bo poteklo v %d dneh. Priporočljivo ga je zamenjati.';
diff --git a/lib/plugins/authad/lang/sv/lang.php b/lib/plugins/authad/lang/sv/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..f253ae7fe60cf1d7b6ebcbb34fe23adc27657ebf
--- /dev/null
+++ b/lib/plugins/authad/lang/sv/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Smorkster Andersson smorkster@gmail.com
+ */
+$lang['authpwdexpire']         = 'Ditt lösenord kommer att bli ogiltigt om %d dagar, du bör ändra det snart.';
diff --git a/lib/plugins/authad/lang/tr/lang.php b/lib/plugins/authad/lang/tr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..2336e0f0c4c67e442ea3ae27d7f6d976b958423c
--- /dev/null
+++ b/lib/plugins/authad/lang/tr/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author farukerdemoncel@gmail.com
+ */
+$lang['authpwdexpire']         = 'Şifreniz %d gün sonra geçersiz hale gelecek, yakın bir zamanda değiştirmelisiniz.';
diff --git a/lib/plugins/authad/lang/zh-tw/lang.php b/lib/plugins/authad/lang/zh-tw/lang.php
index 6ad0947a233e80db7e07e86c1e0eeb0380ca8747..b2ce48535b3baef5b68cb2801590b58ed55ac888 100644
--- a/lib/plugins/authad/lang/zh-tw/lang.php
+++ b/lib/plugins/authad/lang/zh-tw/lang.php
@@ -4,5 +4,7 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author June-Hao Hou <junehao@gmail.com>
+ * @author syaoranhinata@gmail.com
  */
 $lang['domain']                = '登入網域';
+$lang['authpwdexpire']         = '您的密碼將在 %d 天內到期,請馬上更換新密碼。';
diff --git a/lib/plugins/authad/lang/zh/lang.php b/lib/plugins/authad/lang/zh/lang.php
index 2a05aa1682e467f181bb7b7a3ca428f3d63dc6b2..30d504515a65491de9130ee896446d62132378d7 100644
--- a/lib/plugins/authad/lang/zh/lang.php
+++ b/lib/plugins/authad/lang/zh/lang.php
@@ -4,5 +4,10 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author lainme <lainme993@gmail.com>
+ * @author Errol <errol@hotmail.com>
  */
 $lang['domain']                = '登录域';
+$lang['authpwdexpire']         = '您的密码将在 %d 天内过期,请尽快更改';
+$lang['passchangefail']        = '密码更改失败。是不是密码规则不符合?';
+$lang['userchangefail']        = '更改用户属性失败。或许您的帐号没有做此更改的权限?';
+$lang['connectfail']           = '无法连接到Active Directory服务器。';
diff --git a/lib/plugins/authad/plugin.info.txt b/lib/plugins/authad/plugin.info.txt
index dc06291896e66d3a3fdc13187cc7556caabd6135..57e1387e9696a95e2bc078fc333eb9ca3d85692f 100644
--- a/lib/plugins/authad/plugin.info.txt
+++ b/lib/plugins/authad/plugin.info.txt
@@ -1,7 +1,7 @@
 base   authad
 author Andreas Gohr
 email  andi@splitbrain.org
-date   2014-04-03
+date   2015-07-13
 name   Active Directory Auth Plugin
 desc   Provides user authentication against a Microsoft Active Directory
 url    http://www.dokuwiki.org/plugin:authad
diff --git a/lib/plugins/authldap/auth.php b/lib/plugins/authldap/auth.php
index fd4729331719d8b63a80efcb132a7844479edabe..90ec770e9dc0d50e65155f0f61dd32a7964d1b8d 100644
--- a/lib/plugins/authldap/auth.php
+++ b/lib/plugins/authldap/auth.php
@@ -37,7 +37,7 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
         }
 
         // Add the capabilities to change the password
-        $this->cando['modPass'] = true;
+        $this->cando['modPass'] = $this->getConf('modPass');
     }
 
     /**
@@ -281,14 +281,14 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
 
         // open the connection to the ldap
         if(!$this->_openLDAP()){
-            msg('LDAP cannot connect: '. htmlspecialchars(ldap_error($this->con)));
+            $this->_debug('LDAP cannot connect: '. htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
             return false;
         }
 
         // find the information about the user, in particular the "dn"
         $info = $this->getUserData($user,true);
         if(empty($info['dn'])) {
-            msg('LDAP cannot find your user dn');
+            $this->_debug('LDAP cannot find your user dn', 0, __LINE__, __FILE__);
             return false;
         }
         $dn = $info['dn'];
@@ -301,7 +301,7 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
 
             // bind with the ldap
             if(!@ldap_bind($this->con, $dn, $pass)){
-                msg('LDAP user bind failed: '. htmlspecialchars($dn) .': '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
+                $this->_debug('LDAP user bind failed: '. htmlspecialchars($dn) .': '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                 return false;
             }
         } elseif ($this->getConf('binddn') && $this->getConf('bindpw')) {
@@ -322,7 +322,7 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
 
         // change the password
         if(!@ldap_mod_replace($this->con, $dn,array('userpassword' => $hash))){
-            msg('LDAP mod replace failed: '. htmlspecialchars($dn) .': '.htmlspecialchars(ldap_error($this->con)));
+            $this->_debug('LDAP mod replace failed: '. htmlspecialchars($dn) .': '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
             return false;
         }
 
@@ -360,8 +360,9 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
             $sr          = ldap_search($this->con, $this->getConf('usertree'), $all_filter);
             $entries     = ldap_get_entries($this->con, $sr);
             $users_array = array();
+            $userkey     = $this->getConf('userkey');
             for($i = 0; $i < $entries["count"]; $i++) {
-                array_push($users_array, $entries[$i]["uid"][0]);
+                array_push($users_array, $entries[$i][$userkey][0]);
             }
             asort($users_array);
             $result = $users_array;
@@ -462,9 +463,12 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
      * @return string
      */
     protected function _filterEscape($string) {
-        return preg_replace(
-            '/([\x00-\x1F\*\(\)\\\\])/e',
-            '"\\\\\".join("",unpack("H2","$1"))',
+        // see https://github.com/adldap/adLDAP/issues/22
+        return preg_replace_callback(
+            '/([\x00-\x1F\*\(\)\\\\])/',
+            function ($matches) {
+                return "\\".join("", unpack("H2", $matches[1]));
+            },
             $string
         );
     }
@@ -478,6 +482,10 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
     protected function _openLDAP() {
         if($this->con) return true; // connection already established
 
+        if($this->getConf('debug')) {
+            ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
+        }
+
         $this->bound = 0;
 
         $port    = $this->getConf('port');
@@ -516,13 +524,13 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
                         }
                     }
                     // needs version 3
-                    if($this->getConf('referrals')) {
+                    if($this->getConf('referrals') > -1) {
                         if(!@ldap_set_option(
                             $this->con, LDAP_OPT_REFERRALS,
                             $this->getConf('referrals')
                         )
                         ) {
-                            msg('Setting LDAP referrals to off failed', -1);
+                            msg('Setting LDAP referrals failed', -1);
                             $this->_debug('LDAP referal set: '.htmlspecialchars(ldap_error($this->con)), 0, __LINE__, __FILE__);
                         }
                     }
@@ -554,6 +562,7 @@ class auth_plugin_authldap extends DokuWiki_Auth_Plugin {
 
         if(!$bound) {
             msg("LDAP: couldn't connect to LDAP server", -1);
+            $this->_debug(ldap_error($this->con), 0, __LINE__, __FILE__);
             return false;
         }
 
diff --git a/lib/plugins/authldap/conf/default.php b/lib/plugins/authldap/conf/default.php
index 2c295eeeb1e192147a804f159e3bf8bcbc042999..116cb9d3faa4131386ab7970e76194fba24a0fca 100644
--- a/lib/plugins/authldap/conf/default.php
+++ b/lib/plugins/authldap/conf/default.php
@@ -8,7 +8,7 @@ $conf['userfilter']  = '';
 $conf['groupfilter'] = '';
 $conf['version']     = 2;
 $conf['starttls']    = 0;
-$conf['referrals']   = 0;
+$conf['referrals']   = -1;
 $conf['deref']       = 0;
 $conf['binddn']      = '';
 $conf['bindpw']      = '';
@@ -16,5 +16,7 @@ $conf['bindpw']      = '';
 //$conf['mapping']['grps']  unsupported in config manager
 $conf['userscope']  = 'sub';
 $conf['groupscope'] = 'sub';
+$conf['userkey']    = 'uid';
 $conf['groupkey']   = 'cn';
-$conf['debug']      = 0;
\ No newline at end of file
+$conf['debug']      = 0;
+$conf['modPass']    = 1;
diff --git a/lib/plugins/authldap/conf/metadata.php b/lib/plugins/authldap/conf/metadata.php
index 6aa53c40d91e7b4d001a0eb74c5cc6b9a1bdcb3e..a67b11ca65d2d8c2436acc8a2643ee255e65fcba 100644
--- a/lib/plugins/authldap/conf/metadata.php
+++ b/lib/plugins/authldap/conf/metadata.php
@@ -7,7 +7,7 @@ $meta['userfilter']  = array('string','_caution' => 'danger');
 $meta['groupfilter'] = array('string','_caution' => 'danger');
 $meta['version']     = array('numeric','_caution' => 'danger');
 $meta['starttls']    = array('onoff','_caution' => 'danger');
-$meta['referrals']   = array('onoff','_caution' => 'danger');
+$meta['referrals']   = array('multichoice','_choices' => array(-1,0,1),'_caution' => 'danger');
 $meta['deref']       = array('multichoice','_choices' => array(0,1,2,3),'_caution' => 'danger');
 $meta['binddn']      = array('string','_caution' => 'danger');
 $meta['bindpw']      = array('password','_caution' => 'danger');
@@ -15,5 +15,7 @@ $meta['bindpw']      = array('password','_caution' => 'danger');
 //$meta['mapping']['grps']  unsupported in config manager
 $meta['userscope']   = array('multichoice','_choices' => array('sub','one','base'),'_caution' => 'danger');
 $meta['groupscope']  = array('multichoice','_choices' => array('sub','one','base'),'_caution' => 'danger');
+$meta['userkey']     = array('string','_caution' => 'danger');
 $meta['groupkey']    = array('string','_caution' => 'danger');
-$meta['debug']       = array('onoff','_caution' => 'security');
\ No newline at end of file
+$meta['debug']       = array('onoff','_caution' => 'security');
+$meta['modPass']     = array('onoff');
diff --git a/lib/plugins/authldap/lang/cs/lang.php b/lib/plugins/authldap/lang/cs/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b0e8d244c5188c4b01fa49eeb1692e6a0932bed
--- /dev/null
+++ b/lib/plugins/authldap/lang/cs/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['connectfail']           = 'LDAP připojení nefunkční: %s';
+$lang['domainfail']            = 'LDAP nenalezlo uživatelské dn';
diff --git a/lib/plugins/authldap/lang/cs/settings.php b/lib/plugins/authldap/lang/cs/settings.php
index a5aad5981393c18d5004b2484cb83956639cca39..c7e070ca8c44c7fe0ac5bb0c2a89d9ad1d91f44f 100644
--- a/lib/plugins/authldap/lang/cs/settings.php
+++ b/lib/plugins/authldap/lang/cs/settings.php
@@ -20,9 +20,14 @@ $lang['binddn']                = 'Doménový název DN volitelně připojeného
 $lang['bindpw']                = 'Heslo uživatele výše';
 $lang['userscope']             = 'Omezení rozsahu vyhledávání uživatele';
 $lang['groupscope']            = 'Omezení rozsahu vyhledávání skupiny';
+$lang['userkey']               = 'Atribut označující uživatelské jméno; musí být konzistetní s uživatelským filtrem.';
 $lang['groupkey']              = 'Atribut šlenství uživatele ve skupinách (namísto standardních AD skupin), tj. skupina z oddělení nebo telefonní číslo';
+$lang['modPass']               = 'Může být LDAP heslo změněno přes dokuwiki?';
 $lang['debug']                 = 'Zobrazit dodatečné debugovací informace';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'použít výchozí';
+$lang['referrals_o_0']         = 'nenásledovat odkazy';
+$lang['referrals_o_1']         = 'následovat odkazy';
diff --git a/lib/plugins/authldap/lang/cy/lang.php b/lib/plugins/authldap/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..f6c5cf6bdfbc4d4d73695d0b68ab841b3329553b
--- /dev/null
+++ b/lib/plugins/authldap/lang/cy/lang.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Welsh language file for authldap plugin
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+
+$lang['connectfail']     = 'LDAP yn methu cysylltu: %s';
+$lang['domainfail']       = 'LDAP yn methu darganfod eich defnyddiwr dn';
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/authldap/lang/cy/settings.php b/lib/plugins/authldap/lang/cy/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..91c9bfdee0f9078580e9e75226da24637b82bffe
--- /dev/null
+++ b/lib/plugins/authldap/lang/cy/settings.php
@@ -0,0 +1,29 @@
+<?php
+$lang['server']      = 'Eich gweinydd LDAP. Naill ai enw\'r gweinydd (<code>localhost</code>) neu\'r URL llawn (<code>ldap://server.tld:389</code>)';
+$lang['port']        = 'Porth gweinydd LDAP os nac oes URL llawn wedi\'i gyflwyno uchod';
+$lang['usertree']    = 'Ble i ddarganfod cyfrifon defnyddwyr. Ee. <code>ou=People, dc=server, dc=tld</code>';
+$lang['grouptree']   = 'Ble i ddarganfod y grwpiau defnyddiwr. Eg. <code>ou=Group, dc=server, dc=tld</code>';
+$lang['userfilter']  = 'Hidlydd LDAP i ddarganfod cyfrifon defnyddwyr. Eg. <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter'] = 'Hidlydd LDAP i chwilio am grwpiau. Eg. <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version']     = 'Y fersiwn protocol i\'w ddefnyddio. Efallai bydd angen gosod hwn i <code>3</code>';
+$lang['starttls']    = 'Defnyddio cysylltiadau TLS?';
+$lang['referrals']   = 'Dilyn cyfeiriadau (referrals)?';
+$lang['deref']       = 'Sut i ddadgyfeirio alias?'; //alias - enw arall?
+$lang['binddn']      = 'DN rhwymiad defnyddiwr opsiynol os ydy rhwymiad anhysbys yn annigonol. Ee. <code>cn=admin, dc=my, dc=home</code>';
+$lang['bindpw']      = 'Cyfrinair y defnyddiwr uchod';
+$lang['userscope']   = 'Cyfyngu sgôp chwiliadau ar gyfer chwiliad defnyddwyr';
+$lang['groupscope']  = 'Cyfyngu sgôp chwiliadau ar gyfer chwiliad grwpiau';
+$lang['userkey']     = 'Priodoledd yn denodi\'r defnyddair; rhaid iddo fod yn gyson i \'r hidlydd defnyddwyr.';
+$lang['groupkey']    = 'Aelodaeth grŵp o unrhyw briodoledd defnyddiwr (yn hytrach na grwpiau AD safonol) e.e. grŵp o adran neu rif ffôn';
+$lang['modPass']     = 'Gall cyfrinair LDAP gael ei newid gan DokuWiki?';
+$lang['debug']       = 'Dangos gwybodaeth dadfygio ychwanegol gyda gwallau';
+
+
+$lang['deref_o_0']   = 'LDAP_DEREF_NEVER';
+$lang['deref_o_1']   = 'LDAP_DEREF_SEARCHING';
+$lang['deref_o_2']   = 'LDAP_DEREF_FINDING';
+$lang['deref_o_3']   = 'LDAP_DEREF_ALWAYS';
+
+$lang['referrals_o_-1'] = 'defnyddio\'r diofyn';
+$lang['referrals_o_0']  = 'peidio dilyn cyfeiriadau';
+$lang['referrals_o_1']  = 'dilyn cyfeiriadau';
\ No newline at end of file
diff --git a/lib/plugins/authldap/lang/da/settings.php b/lib/plugins/authldap/lang/da/settings.php
index b736504a5339b61e2310d1e6c39a36fd19eeb666..a9fce3a8ccd0a198b653c53f5582b044e3269740 100644
--- a/lib/plugins/authldap/lang/da/settings.php
+++ b/lib/plugins/authldap/lang/da/settings.php
@@ -5,11 +5,16 @@
  * 
  * @author Jens Hyllegaard <jens.hyllegaard@gmail.com>
  * @author soer9648 <soer9648@eucl.dk>
+ * @author Jacob Palm <mail@jacobpalm.dk>
  */
 $lang['server']                = 'Din LDAP server. Enten værtsnavn (<code>localhost</code>) eller fuld kvalificeret URL (<code>ldap://server.tld:389</code>)';
 $lang['port']                  = 'LDAP server port, hvis der ikke er angivet en komplet URL ovenfor.';
 $lang['usertree']              = 'Hvor findes brugerkonti. F.eks. <code>ou=Personer, dc=server, dc=tld</code>';
 $lang['grouptree']             = 'Hvor findes brugergrupper. F.eks. <code>ou=Grupper, dc=server, dc=tld</code>';
+$lang['userfilter']            = 'LDAP filter der benyttes til at søge efter brugerkonti. F.eks. <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter']           = 'LDAP filter tder benyttes til at søge efter grupper. F.eks. <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version']               = 'Protokol version der skal benyttes. Det er muligvis nødvendigt at sætte denne til <code>3</code>';
 $lang['starttls']              = 'Benyt TLS forbindelser?';
 $lang['bindpw']                = 'Kodeord til ovenstående bruger';
+$lang['modPass']               = 'Kan LDAP adgangskoden skiftes via DokuWiki?';
 $lang['debug']                 = 'Vis yderligere debug output ved fejl';
diff --git a/lib/plugins/authldap/lang/de/lang.php b/lib/plugins/authldap/lang/de/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..74197f918a6500692d5ce4252043e85295016b2d
--- /dev/null
+++ b/lib/plugins/authldap/lang/de/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Philip Knack <p.knack@stollfuss.de>
+ */
+$lang['connectfail']           = 'LDAP-Verbindung scheitert: %s';
+$lang['domainfail']            = 'LDAP kann nicht dein Benutzer finden dn';
diff --git a/lib/plugins/authldap/lang/de/settings.php b/lib/plugins/authldap/lang/de/settings.php
index d788da8762836711d946671b43ff17c3ef102674..e986d0f80513c9d701720210778afcbdbbb51252 100644
--- a/lib/plugins/authldap/lang/de/settings.php
+++ b/lib/plugins/authldap/lang/de/settings.php
@@ -5,6 +5,8 @@
  * 
  * @author Matthias Schulte <dokuwiki@lupo49.de>
  * @author christian studer <cstuder@existenz.ch>
+ * @author Philip Knack <p.knack@stollfuss.de>
+ * @author Anika Henke <anika@selfthinker.org>
  */
 $lang['server']                = 'Adresse zum LDAP-Server. Entweder als Hostname (<code>localhost</code>) oder als FQDN (<code>ldap://server.tld:389</code>).';
 $lang['port']                  = 'Port des LDAP-Servers, falls kein Port angegeben wurde.';
@@ -20,9 +22,14 @@ $lang['binddn']                = 'DN eines optionalen Benutzers, wenn der anonym
 $lang['bindpw']                = 'Passwort des angegebenen Benutzers.';
 $lang['userscope']             = 'Die Suchweite nach Benutzeraccounts.';
 $lang['groupscope']            = 'Die Suchweite nach Benutzergruppen.';
+$lang['userkey']               = 'Attribut, das den Benutzernamen enthält; muss konsistent zum userfilter sein.';
 $lang['groupkey']              = 'Gruppieren der Benutzeraccounts anhand eines beliebigen Benutzerattributes z. B. Telefonnummer oder Abteilung, anstelle der Standard-Gruppen).';
+$lang['modPass']               = 'Darf über Dokuwiki das LDAP-Passwort geändert werden?';
 $lang['debug']                 = 'Debug-Informationen beim Auftreten von Fehlern anzeigen?';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'Standard verwenden';
+$lang['referrals_o_0']         = 'Nicht Referrals folgen';
+$lang['referrals_o_1']         = 'Referrals folgen';
diff --git a/lib/plugins/authldap/lang/en/lang.php b/lib/plugins/authldap/lang/en/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8185a84fa04d0f528b2559b9aeca7b186206ed8f
--- /dev/null
+++ b/lib/plugins/authldap/lang/en/lang.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * English language file for authldap plugin
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+
+$lang['connectfail']     = 'LDAP cannot connect: %s';
+$lang['domainfail']       = 'LDAP cannot find your user dn';
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/authldap/lang/en/settings.php b/lib/plugins/authldap/lang/en/settings.php
index b73166ab2205b12bd27c3bf2be1d54d347ab9049..a4194b00a13e96b891140dda74046642a2c64126 100644
--- a/lib/plugins/authldap/lang/en/settings.php
+++ b/lib/plugins/authldap/lang/en/settings.php
@@ -13,7 +13,9 @@ $lang['binddn']      = 'DN of an optional bind user if anonymous bind is not suf
 $lang['bindpw']      = 'Password of above user';
 $lang['userscope']   = 'Limit search scope for user search';
 $lang['groupscope']  = 'Limit search scope for group search';
+$lang['userkey']     = 'Attribute denoting the username; must be consistent to userfilter.';
 $lang['groupkey']    = 'Group membership from any user attribute (instead of standard AD groups) e.g. group from department or telephone number';
+$lang['modPass']     = 'Can the LDAP password be changed via dokuwiki?';
 $lang['debug']       = 'Display additional debug information on errors';
 
 
@@ -21,3 +23,7 @@ $lang['deref_o_0']   = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']   = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']   = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']   = 'LDAP_DEREF_ALWAYS';
+
+$lang['referrals_o_-1'] = 'use default';
+$lang['referrals_o_0']  = 'don\'t follow referrals';
+$lang['referrals_o_1']  = 'follow referrals';
\ No newline at end of file
diff --git a/lib/plugins/authldap/lang/es/lang.php b/lib/plugins/authldap/lang/es/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..20de155c15d72fdaad6512dd368eb70d89a758b3
--- /dev/null
+++ b/lib/plugins/authldap/lang/es/lang.php
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Mauricio Segura <maose38@yahoo.es>
+ */
+$lang['connectfail']           = 'LDAP no se puede conectar: %s';
diff --git a/lib/plugins/authldap/lang/es/settings.php b/lib/plugins/authldap/lang/es/settings.php
index 6991546d3227bf7b3cb679cde7d31251ede21088..8e1d0b4e1c92cb800c4087c3d6c522e1a70bf0d0 100644
--- a/lib/plugins/authldap/lang/es/settings.php
+++ b/lib/plugins/authldap/lang/es/settings.php
@@ -5,6 +5,7 @@
  * 
  * @author Antonio Bueno <atnbueno@gmail.com>
  * @author Eloy <ej.perezgomez@gmail.com>
+ * @author Alejandro Nunez <nunez.alejandro@gmail.com>
  */
 $lang['server']                = 'Tu servidor LDAP. Puede ser el nombre del host  (<code>localhost</code>) o una URL completa (<code>ldap://server.tld:389</code>)';
 $lang['port']                  = 'Servidor LDAP en caso de que no se diera la URL completa anteriormente.';
@@ -20,8 +21,12 @@ $lang['bindpw']                = 'Contraseña del usuario de arriba.';
 $lang['userscope']             = 'Limitar ámbito de búsqueda para búsqueda de usuarios';
 $lang['groupscope']            = 'Limitar ámbito de búsqueda para búsqueda de grupos';
 $lang['groupkey']              = 'Pertenencia al grupo desde cualquier atributo de usuario (en lugar de grupos AD estándar) p.e., grupo a partir departamento o número de teléfono';
+$lang['modPass']               = 'Puede ser cambiara via dokuwiki la password LDAP?';
 $lang['debug']                 = 'Mostrar información adicional para depuración de errores';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'usar default';
+$lang['referrals_o_0']         = 'no seguir referencias';
+$lang['referrals_o_1']         = 'seguir referencias';
diff --git a/lib/plugins/authldap/lang/fa/lang.php b/lib/plugins/authldap/lang/fa/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..fdf4f6da982190c75114bae02e5543bbed4177aa
--- /dev/null
+++ b/lib/plugins/authldap/lang/fa/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
+ */
+$lang['connectfail']           = 'LDAP نمیتواند وصل شود: %s';
+$lang['domainfail']            = 'LDAP نمیتواند کاربر شما را پیدا کند';
diff --git a/lib/plugins/authldap/lang/fa/settings.php b/lib/plugins/authldap/lang/fa/settings.php
index 49d485afdd6346014cf493d951f50210a9fadce2..72eccb0ef40a45483eb557da4ce8cd98eea1bab7 100644
--- a/lib/plugins/authldap/lang/fa/settings.php
+++ b/lib/plugins/authldap/lang/fa/settings.php
@@ -5,6 +5,32 @@
  * 
  * @author Mohammad Sadegh <msdn2013@gmail.com>
  * @author Omid Hezaveh <hezpublic@gmail.com>
+ * @author Mohmmad Razavi <sepent@gmail.com>
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
  */
+$lang['server']                = 'سرور LDAP شما. چه به صورت ';
+$lang['port']                  = 'درگاه سرور LDAP اگر که URL کامل در بالا نوشته نشده';
+$lang['usertree']              = 'محل حساب‌های کاربری. برای مثال <code>ou=People, dc=server, dc=tld</code>';
+$lang['grouptree']             = 'محل گروه‌های کاربری. برای مثال <code>ou=Group, dc=server, dc=tld</code>';
+$lang['userfilter']            = 'فیتلرهای LDAP برای جستجوی حساب‌های کاربری. برای مثال <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter']           = 'فیلتر LDAP برای جستجوی گروه‌ها. برای مثال <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version']               = 'نسخهٔ پروتوکل برای استفاده. احتمالا این را باید <code>3</code> وارد کنید.';
 $lang['starttls']              = 'از تی‌ال‌اس (TLS) استفاده می‌کنید؟';
+$lang['referrals']             = 'آیا ارجاعات باید دنبال شوند؟';
+$lang['deref']                 = 'نام‌های مستعار چطور ارجاع یابی شوند؟';
+$lang['binddn']                = ' DN برای کاربر اتصال اگر اتصال ناشناخته کافی نیست. مثال
+<code>cn=admin, dc=my, dc=home</code>';
 $lang['bindpw']                = 'رمزعبور کاربر بالا';
+$lang['userscope']             = 'محدود کردن محدودهٔ جستجو به جستجوی کاربر';
+$lang['groupscope']            = 'محدود کردن محدودهٔ جستجو به جستجوی گروه';
+$lang['userkey']               = 'صفتی که نشان‌دهندهٔ نام کاربر است؛ باید با userfilter نامتناقض باشد.';
+$lang['groupkey']              = 'عضویت در گروه برمبنای هر کدام از صفات کاربر (به جای گروه‌های استاندارد AD) برای مثال گروه برمبنای دپارتمان یا شماره تلفن';
+$lang['modPass']               = 'آیا پسورد LDAP می‌تواند توسط داکو ویکی تغییر کند؟';
+$lang['debug']                 = 'نمایش اطلاعات بیشتر برای خطایابی در ارورها';
+$lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
+$lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
+$lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
+$lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'استفاده از پیشفرض';
+$lang['referrals_o_0']         = 'ارجاعات را دنبال نکن';
+$lang['referrals_o_1']         = 'ارجاعات را دنبال کن';
diff --git a/lib/plugins/authldap/lang/fr/lang.php b/lib/plugins/authldap/lang/fr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5797bda428e7345e8452cd1588efd5f0485d19ae
--- /dev/null
+++ b/lib/plugins/authldap/lang/fr/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Pietroni <pietroni@informatique.univ-paris-diderot.fr>
+ */
+$lang['connectfail']           = 'LDAP ne peux se connecter : %s';
+$lang['domainfail']            = 'LDAP ne trouve pas l\'utilisateur dn';
diff --git a/lib/plugins/authldap/lang/fr/settings.php b/lib/plugins/authldap/lang/fr/settings.php
index dc475071eb3b19ee8bc82b677e5d08769fddd5e9..619aee3d323f630b78bcc78076c35539df547080 100644
--- a/lib/plugins/authldap/lang/fr/settings.php
+++ b/lib/plugins/authldap/lang/fr/settings.php
@@ -5,6 +5,7 @@
  * 
  * @author Bruno Veilleux <bruno.vey@gmail.com>
  * @author schplurtz <Schplurtz@laposte.net>
+ * @author Schplurtz le Déboulonné <schplurtz@laposte.net>
  */
 $lang['server']                = 'Votre serveur LDAP. Soit le nom d\'hôte (<code>localhost</code>) ou l\'URL complète (<code>ldap://serveur.dom:389</code>)';
 $lang['port']                  = 'Port du serveur LDAP si l\'URL complète n\'a pas été indiquée ci-dessus';
@@ -20,9 +21,14 @@ $lang['binddn']                = 'Nom de domaine d\'un utilisateur de connexion
 $lang['bindpw']                = 'Mot de passe de l\'utilisateur ci-dessus.';
 $lang['userscope']             = 'Limiter la portée de recherche d\'utilisateurs';
 $lang['groupscope']            = 'Limiter la portée de recherche de groupes';
+$lang['userkey']               = 'Attribut indiquant le nom d\'utilisateur. Doit être en accord avec le filtre d\'utilisateur.';
 $lang['groupkey']              = 'Affiliation aux groupes à partir de n\'importe quel attribut utilisateur (au lieu des groupes AD standards), p. ex. groupes par département ou numéro de téléphone';
+$lang['modPass']               = 'Peut-on changer le mot de passe LDAP depuis DokiWiki ?';
 $lang['debug']                 = 'Afficher des informations de bégogage supplémentaires pour les erreurs';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'comportement par défaut';
+$lang['referrals_o_0']         = 'ne pas suivre les références';
+$lang['referrals_o_1']         = 'suivre les références';
diff --git a/lib/plugins/authldap/lang/he/settings.php b/lib/plugins/authldap/lang/he/settings.php
index 357a58c56b8394b923ee21fbd107d6f9d58109fd..10af7010d21177312d329f9be591a16ca352a257 100644
--- a/lib/plugins/authldap/lang/he/settings.php
+++ b/lib/plugins/authldap/lang/he/settings.php
@@ -4,5 +4,9 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author matt carroll <matt.carroll@gmail.com>
+ * @author Menashe Tomer <menashesite@gmail.com>
  */
 $lang['starttls']              = 'השתמש בחיבורי TLS';
+$lang['modPass']               = 'האם dokuwiki יכול ליצור סיסמאות LDAP?';
+$lang['debug']                 = 'הצג מידע נוסף על שגיאות';
+$lang['referrals_o_-1']        = 'ברירת מחדל';
diff --git a/lib/plugins/authldap/lang/hr/lang.php b/lib/plugins/authldap/lang/hr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5e13d1b0572ff7f47726693ecb82e5153ed33e53
--- /dev/null
+++ b/lib/plugins/authldap/lang/hr/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['connectfail']           = 'LDAP se ne može spojiti: %s';
+$lang['domainfail']            = 'LDAP ne može pronaći Vaš korisnički dn';
diff --git a/lib/plugins/authldap/lang/hr/settings.php b/lib/plugins/authldap/lang/hr/settings.php
index cb8df7218cc9bf64ccf4019d6c157eaac88a508c..5c306d84bb67e3d3a2580277062f4afba01c61e6 100644
--- a/lib/plugins/authldap/lang/hr/settings.php
+++ b/lib/plugins/authldap/lang/hr/settings.php
@@ -19,9 +19,14 @@ $lang['binddn']                = 'DN opcionalnog korisnika ako anonimni korisnik
 $lang['bindpw']                = 'Lozinka gore navedenog korisnika';
 $lang['userscope']             = 'Ograniči područje za pretragu korisnika';
 $lang['groupscope']            = 'Ograniči područje za pretragu grupa';
+$lang['userkey']               = 'Atribut označava ime; mora biti u skladu s korisničkim filterom.';
 $lang['groupkey']              = 'ÄŒlanstvo grupa iz svih atributa korisnika (umjesto standardnih AD grupa) npr. grupa iz odjela ili telefonskog broja';
+$lang['modPass']               = 'Da li LDAP lozinka može biti izmijenjena kroz dokuwiki?';
 $lang['debug']                 = 'Prikaži dodatne informacije u slučaju greške';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'koristi podrazumijevano';
+$lang['referrals_o_0']         = 'ne slijedi preporuke';
+$lang['referrals_o_1']         = 'slijedi preporuke';
diff --git a/lib/plugins/authldap/lang/hu/lang.php b/lib/plugins/authldap/lang/hu/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..07c16f3f007800426ed330d0b561521ba9510bd4
--- /dev/null
+++ b/lib/plugins/authldap/lang/hu/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Marton Sebok <sebokmarton@gmail.com>
+ */
+$lang['connectfail']           = 'Az LDAP nem tudott csatlakozni: %s';
+$lang['domainfail']            = 'Az LDAP nem találta a felhasználód megkülönböztető nevét (DN)';
diff --git a/lib/plugins/authldap/lang/hu/settings.php b/lib/plugins/authldap/lang/hu/settings.php
index 1e6608dabc9b6d4504e01a013022ad801165a90f..364a1e9870c043a5a78f11fb9bf15f91e1140226 100644
--- a/lib/plugins/authldap/lang/hu/settings.php
+++ b/lib/plugins/authldap/lang/hu/settings.php
@@ -20,9 +20,14 @@ $lang['binddn']                = 'Egy hozzáféréshez használt felhasználó D
 $lang['bindpw']                = 'Ehhez tartozó jelszó.';
 $lang['userscope']             = 'A keresési tartomány korlátozása erre a felhasználókra való keresésnél';
 $lang['groupscope']            = 'A keresési tartomány korlátozása erre a csoportokra való keresésnél';
+$lang['userkey']               = 'A felhasználónevet leíró attribútum; konzisztensnek kell lennie a felhasználói szűrővel (userfilter).';
 $lang['groupkey']              = 'Csoport meghatározása a következő attribútumból (az alapértelmezett AD csoporttagság helyett), pl. a szervezeti egység vagy a telefonszám';
+$lang['modPass']               = 'Az LDAP jelszó megváltoztatható a DokuWiki-n keresztül?';
 $lang['debug']                 = 'Továbi hibakeresési információk megjelenítése hiba esetén';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'alapértelmezett érték használata';
+$lang['referrals_o_0']         = 'ne kövesse az átirányításokat (referral)';
+$lang['referrals_o_1']         = 'kövesse az átirányításokat (referral)';
diff --git a/lib/plugins/authldap/lang/it/lang.php b/lib/plugins/authldap/lang/it/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..9832e9319764ef99ea7322d3e76e779ac9a1d6be
--- /dev/null
+++ b/lib/plugins/authldap/lang/it/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Torpedo <dgtorpedo@gmail.com>
+ */
+$lang['connectfail']           = 'LDAP non è in grado di connettere: %s';
+$lang['domainfail']            = 'LDAP non è in grado di trovare il tuo DN utente';
diff --git a/lib/plugins/authldap/lang/it/settings.php b/lib/plugins/authldap/lang/it/settings.php
index 858c694b824373b8b30bd27af52048cbe405081b..58bf497ed17c4394b57b6d9e8ffdfa8a364abffd 100644
--- a/lib/plugins/authldap/lang/it/settings.php
+++ b/lib/plugins/authldap/lang/it/settings.php
@@ -6,6 +6,7 @@
  * @author Edmondo Di Tucci <snarchio@gmail.com>
  * @author Claudio Lanconelli <lancos@libero.it>
  * @author Francesco <francesco.cavalli@hotmail.com>
+ * @author Torpedo <dgtorpedo@gmail.com>
  */
 $lang['server']                = 'Il tuo server LDAP. Inserire o l\'hostname (<code>localhost</code>) oppure un URL completo (<code>ldap://server.tld:389</code>)';
 $lang['port']                  = 'Porta del server LDAP se non è stato fornito un URL completo più sopra.';
@@ -15,11 +16,20 @@ $lang['userfilter']            = 'Filtro per cercare l\'account utente LDAP. Eg.
 $lang['groupfilter']           = 'Filtro per cercare i gruppi LDAP. Eg. <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
 $lang['version']               = 'Versione protocollo da usare. Pu<code>3</code>';
 $lang['starttls']              = 'Usare la connessione TSL?';
+$lang['referrals']             = 'Possono i reindirizzamenti essere seguiti?';
 $lang['deref']                 = 'Come differenziare un alias?';
+$lang['binddn']                = 'DN di un utente bind opzionale se un bind anonimo non è sufficiente. E.g. <code>cn=admin, dc=casa, dc=mia</code>';
+$lang['bindpw']                = 'Password del utente di cui sopra';
 $lang['userscope']             = 'Limita il contesto di ricerca per la ricerca degli utenti';
 $lang['groupscope']            = 'Limita il contesto di ricerca per la ricerca dei gruppi';
+$lang['userkey']               = 'Attributo indicante il nome utente; deve essere consistente con il filtro utente.';
+$lang['groupkey']              = 'Gruppo di appartenenza sulla base di qualunque attributo utente (invece di gruppo AD standard) e.g. gruppo in base al dipartimento o al numero di telefono';
+$lang['modPass']               = 'Può la password LDAP essere cambiata attraverso DokuWiki?';
 $lang['debug']                 = 'In caso di errori mostra ulteriori informazioni di debug';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'usa default';
+$lang['referrals_o_0']         = 'non seguire i reindirizzamenti';
+$lang['referrals_o_1']         = 'segui i reindirizzamenti';
diff --git a/lib/plugins/authldap/lang/ja/lang.php b/lib/plugins/authldap/lang/ja/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..aeeb6c75e7956d16d3044fcabbe08013537f20e6
--- /dev/null
+++ b/lib/plugins/authldap/lang/ja/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Hideaki SAWADA <chuno@live.jp>
+ */
+$lang['connectfail']           = 'LDAP に接続できません: %s';
+$lang['domainfail']            = 'LDAP で user dn を発見できません。';
diff --git a/lib/plugins/authldap/lang/ja/settings.php b/lib/plugins/authldap/lang/ja/settings.php
index 6cff0ea67a1a25a1f3e89339057ea7e56e7ad79e..99a70de7964ae451d590e09cb07a734f4a9693a0 100644
--- a/lib/plugins/authldap/lang/ja/settings.php
+++ b/lib/plugins/authldap/lang/ja/settings.php
@@ -7,6 +7,7 @@
  * @author Hideaki SAWADA <sawadakun@live.jp>
  * @author Hideaki SAWADA <chuno@live.jp>
  * @author PzF_X <jp_minecraft@yahoo.co.jp>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
  */
 $lang['server']                = 'LDAPサーバー。ホスト名(<code>localhost</code>)又は完全修飾URL(<code>ldap://server.tld:389</code>)';
 $lang['port']                  = '上記が完全修飾URLでない場合、LDAPサーバーポート';
@@ -22,10 +23,15 @@ $lang['binddn']                = '匿名バインドでは不十分な場合、
 $lang['bindpw']                = '上記ユーザーのパスワード';
 $lang['userscope']             = 'ユーザー検索の範囲を限定させる';
 $lang['groupscope']            = 'グループ検索の範囲を限定させる';
+$lang['userkey']               = 'ユーザー名を示す属性。userfilter と一致している必要があります。';
 $lang['groupkey']              = 'ユーザー属性をグループのメンバーシップから設定します(代わりに標準のADグループ)。
 例えば、部署や電話番号などです。';
+$lang['modPass']               = 'DokuWiki から LDAP パスワードの変更が可能?';
 $lang['debug']                 = 'エラーに関して追加のデバッグ情報を表示する。';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'デフォルトを使用する';
+$lang['referrals_o_0']         = 'referral に従わない';
+$lang['referrals_o_1']         = 'referral に従う';
diff --git a/lib/plugins/authldap/lang/ko/lang.php b/lib/plugins/authldap/lang/ko/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3c6722a81230ea4f33465d6de49ede159793e14c
--- /dev/null
+++ b/lib/plugins/authldap/lang/ko/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['connectfail']           = 'LDAP가 연결할 수 없습니다: %s';
+$lang['domainfail']            = 'LDAP가 사용자 DN을 찾을 수 없습니다';
diff --git a/lib/plugins/authldap/lang/ko/settings.php b/lib/plugins/authldap/lang/ko/settings.php
index e663ba0633fbec77721a6910565c3449c5be9f76..d3e93ff51747555b2412cb63fcd0bb1746c02612 100644
--- a/lib/plugins/authldap/lang/ko/settings.php
+++ b/lib/plugins/authldap/lang/ko/settings.php
@@ -19,9 +19,14 @@ $lang['binddn']                = '익명 바인드가 충분하지 않으면 선
 $lang['bindpw']                = '위 사용자의 비밀번호';
 $lang['userscope']             = '사용자 검색에 대한 검색 범위 제한';
 $lang['groupscope']            = '그룹 검색에 대한 검색 범위 제한';
+$lang['userkey']               = '사용자 이름을 나타내는 특성; 사용자 필터에 일관성이 있어야 합니다.';
 $lang['groupkey']              = '(표준 AD 그룹 대신) 사용자 속성에서 그룹 구성원. 예를 들어 부서나 전화에서 그룹';
+$lang['modPass']               = 'LDAP 비밀번호를 도쿠위키를 통해 바꿀 수 있습니까?';
 $lang['debug']                 = '오류에 대한 추가적인 디버그 정보를 보이기';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = '기본값 사용';
+$lang['referrals_o_0']         = '참조 (referral)를 따르지 않음';
+$lang['referrals_o_1']         = '참조 (referral)를 따름';
diff --git a/lib/plugins/authldap/lang/nl/lang.php b/lib/plugins/authldap/lang/nl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7cbec9baa6ab9da37b1c9fac5f085afce1399e08
--- /dev/null
+++ b/lib/plugins/authldap/lang/nl/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Hugo Smet <hugo.smet@scarlet.be>
+ */
+$lang['connectfail']           = 'LDAP kan niet connecteren: %s';
+$lang['domainfail']            = 'LDAP kan je gebruikers dn niet vinden';
diff --git a/lib/plugins/authldap/lang/nl/settings.php b/lib/plugins/authldap/lang/nl/settings.php
index 193d1a386b33d4d6d19f3c8c600658d129a8482b..41fcce2cd66f0bc4ae2ef814d871de80b90b9189 100644
--- a/lib/plugins/authldap/lang/nl/settings.php
+++ b/lib/plugins/authldap/lang/nl/settings.php
@@ -5,6 +5,7 @@
  * 
  * @author Gerrit Uitslag <klapinklapin@gmail.com>
  * @author Remon <no@email.local>
+ * @author Johan Wijnker <johan@wijnker.eu>
  */
 $lang['server']                = 'Je LDAP server. Of de servernaam (<code>localhost</code>) of de volledige URL (<code>ldap://server.tld:389</code>)';
 $lang['port']                  = 'LDAP server poort als bij de entry hierboven geen volledige URL is opgegeven';
@@ -20,9 +21,14 @@ $lang['binddn']                = 'DN van een optionele bind gebruiker als anonie
 $lang['bindpw']                = 'Wachtwoord van bovenstaande gebruiker';
 $lang['userscope']             = 'Beperken scope van zoekfuncties voor gebruikers';
 $lang['groupscope']            = 'Beperken scope van zoekfuncties voor groepen';
+$lang['userkey']               = 'Attribuut aanduiding van de gebruikersnaam; moet consistent zijn met userfilter.';
 $lang['groupkey']              = 'Groepslidmaatschap van enig gebruikersattribuut (in plaats van standaard AD groepen), bijv. groep van afdeling of telefoonnummer';
+$lang['modPass']               = 'Kan het LDAP wachtwoord worden gewijzigd met DokuWiki?';
 $lang['debug']                 = 'Tonen van aanvullende debuginformatie bij fouten';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'gebruik standaard';
+$lang['referrals_o_0']         = 'volg verwijzing niet';
+$lang['referrals_o_1']         = 'volg verwijzing';
diff --git a/lib/plugins/authldap/lang/pt-br/lang.php b/lib/plugins/authldap/lang/pt-br/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..20f5ec33bb3125fb35790e2312ba2ce277e1f7d2
--- /dev/null
+++ b/lib/plugins/authldap/lang/pt-br/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ */
+$lang['connectfail']           = 'Não foi possível conectar ao LDAP: %s';
+$lang['domainfail']            = 'Não foi possível encontrar o seu user dn no LDAP';
diff --git a/lib/plugins/authldap/lang/pt-br/settings.php b/lib/plugins/authldap/lang/pt-br/settings.php
index 6ad6b4862fb347441f936024d498dc60726eceb6..f35ed8eb85306397b5fb3370643fdf66e17978a0 100644
--- a/lib/plugins/authldap/lang/pt-br/settings.php
+++ b/lib/plugins/authldap/lang/pt-br/settings.php
@@ -5,6 +5,7 @@
  * 
  * @author Victor Westmann <victor.westmann@gmail.com>
  * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Hudson FAS <hudsonfas@gmail.com>
  */
 $lang['server']                = 'Seu servidor LDAP. Ou hostname (<code>localhost</code>) ou uma URL completa (<code>ldap://server.tld:389</code>)';
 $lang['port']                  = 'Porta LDAP do servidor se nenhuma URL completa tiver sido fornecida acima';
@@ -20,9 +21,14 @@ $lang['binddn']                = 'DN de um vínculo opcional de usuário se vín
 $lang['bindpw']                = 'Senha do usuário acima';
 $lang['userscope']             = 'Limitar escopo da busca para busca de usuário';
 $lang['groupscope']            = 'Limitar escopo da busca para busca de grupo';
+$lang['userkey']               = 'Atributo que indica o nome do usuário; deve ser consistente com userfilter.';
 $lang['groupkey']              = 'Membro de grupo vem de qualquer atributo do usuário (ao invés de grupos padrões AD) e.g. departamento de grupo ou número de telefone';
+$lang['modPass']               = 'A senha LDAP pode ser alterada pelo dokuwiki ?';
 $lang['debug']                 = 'Mostrar informações adicionais de depuração em erros';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'use o padr&atilde;o';
+$lang['referrals_o_0']         = 'não seguem refer&ecirc;ncias';
+$lang['referrals_o_1']         = 'seguem refer&ecirc;ncias';
diff --git a/lib/plugins/authldap/lang/pt/lang.php b/lib/plugins/authldap/lang/pt/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..cd782f4b421cdc4826d36dba561c5b65914551d7
--- /dev/null
+++ b/lib/plugins/authldap/lang/pt/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Paulo Carmino <contato@paulocarmino.com>
+ */
+$lang['connectfail']           = 'Não foi possível conectar o LDAP: %s';
+$lang['domainfail']            = 'O LDAP não encontrou seu usuário';
diff --git a/lib/plugins/authldap/lang/pt/settings.php b/lib/plugins/authldap/lang/pt/settings.php
index b54f2a1bcdb1d6dc5242f5845d30d3b525a17a99..4d4ed2d85bb532f0df61324e37f8c294ff38fedc 100644
--- a/lib/plugins/authldap/lang/pt/settings.php
+++ b/lib/plugins/authldap/lang/pt/settings.php
@@ -5,6 +5,8 @@
  * 
  * @author André Neves <drakferion@gmail.com>
  * @author Guido Salatino <guidorafael23@gmail.com>
+ * @author Romulo Pereira <romuloccomp@gmail.com>
+ * @author Paulo Carmino <contato@paulocarmino.com>
  */
 $lang['server']                = 'O seu servidor de LDAP. Ou hostname (<code>localhost</code>) ou URL qualificado completo (<code>ldap://servidor.tld:389</code>)';
 $lang['port']                  = 'Porta de servidor de LDAP se o URL completo não foi fornecido acima';
@@ -21,8 +23,12 @@ $lang['bindpw']                = 'Senha do utilizador acima';
 $lang['userscope']             = 'Escopo de pesquisa Limite para pesquisa de usuário';
 $lang['groupscope']            = 'Escopo de pesquisa Limite para pesquisa de grupo';
 $lang['groupkey']              = 'A participação no grupo a partir de qualquer atributo de usuário (em vez de AD padrão de grupos) exemplo: grupo de departamento ou número de telefone';
+$lang['modPass']               = 'Sua senha LDAP pode ser alterada via dokuwiki?';
 $lang['debug']                 = 'Mostrar informação adicional de debug aquando de erros';
 $lang['deref_o_0']             = 'LDAP_DEREF_NUNCA';
 $lang['deref_o_1']             = 'LDAP_DEREF_PESQUISANDO';
 $lang['deref_o_2']             = 'LDAP_DEREF_BUSCANDO';
 $lang['deref_o_3']             = 'LDAP_DEREF_SEMPRE';
+$lang['referrals_o_-1']        = 'usar padrão';
+$lang['referrals_o_0']         = 'não seguir as referências';
+$lang['referrals_o_1']         = 'seguir as referências';
diff --git a/lib/plugins/authldap/lang/ru/lang.php b/lib/plugins/authldap/lang/ru/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..c05ed3b1545204e912f6e7cab7fc5628c4aaf848
--- /dev/null
+++ b/lib/plugins/authldap/lang/ru/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Takumo <9206984@mail.ru>
+ */
+$lang['connectfail']           = 'Ошибка соединения LDAP с %s';
+$lang['domainfail']            = 'Не найдено имя пользователя LDAP (dn)';
diff --git a/lib/plugins/authldap/lang/ru/settings.php b/lib/plugins/authldap/lang/ru/settings.php
index 53499064891a10049e95d7916b0687389de04241..0b6ad4abd23f0ea35c0a214bd9140e2a27933450 100644
--- a/lib/plugins/authldap/lang/ru/settings.php
+++ b/lib/plugins/authldap/lang/ru/settings.php
@@ -9,21 +9,30 @@
  * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
  * @author Владимир <id37736@yandex.ru>
  * @author Vitaly Filatenko <kot@hacktest.net>
+ * @author Alex P <alexander@lanos.co.uk>
  */
-$lang['server']                = 'Ваш LDAP сервер. Либо имя хоста (<code>localhost</code>), либо полный URL (<code>ldap://server.tld:389</code>)';
-$lang['port']                  = 'Порт LDAP сервера, если выше не был указан полный URL';
-$lang['usertree']              = 'Где искать аккаунты пользователей. Например: <code>ou=People, dc=server, dc=tld</code>';
-$lang['grouptree']             = 'Где искать группы пользователей. Например: <code>ou=Group, dc=server, dc=tld</code>';
-$lang['userfilter']            = 'LDAP фильтр для поиска аккаунтов пользователей. Например: <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
-$lang['groupfilter']           = 'LDAP фильтр для поиска групп. Например: <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
-$lang['version']               = 'Версия протокола. Возможно вам нужно указать <code>3</code>';
-$lang['starttls']              = 'Использовать TLS подключения?';
+$lang['server']                = 'Ваш LDAP-сервер. Либо имя хоста (<code>localhost</code>), либо полный URL (<code>ldap://server.tld:389</code>)';
+$lang['port']                  = 'Порт LDAP-сервера, если выше не был указан полный URL';
+$lang['usertree']              = 'Где искать аккаунты пользователей? Например: <code>ou=People, dc=server, dc=tld</code>';
+$lang['grouptree']             = 'Где искать группы пользователей? Например: <code>ou=Group, dc=server, dc=tld</code>';
+$lang['userfilter']            = 'LDAP-фильтр для поиска аккаунтов пользователей. Например: <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter']           = 'LDAP-фильтр для поиска групп. Например: <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['version']               = 'Версия протокола. Возможно, вам нужно указать <code>3</code>';
+$lang['starttls']              = 'Использовать TLS-подключения?';
+$lang['referrals']             = 'Следовать за referrals?';
 $lang['deref']                 = 'Как расшифровывать псевдонимы?';
-$lang['bindpw']                = 'Пароль для указанного пользователя.';
+$lang['binddn']                = 'DN вторичного bind-пользователя, если anonymous bind недостаточно. Например: <code>cn=admin, dc=my, dc=home</code>';
+$lang['bindpw']                = 'Пароль для указанного пользователя';
 $lang['userscope']             = 'Ограничить область поиска при поиске пользователей';
 $lang['groupscope']            = 'Ограничить область поиска при поиске групп';
+$lang['userkey']               = 'Атрибут означающий имя пользователя; должен быть таким же как в userfilter';
+$lang['groupkey']              = 'Использовать любой атрибут пользователя для включения в группу (вместо стандартного AD groups) Например из атрибута department или telephone number';
+$lang['modPass']               = 'Может ли пароль LDAP быть изменён через «Докувики»?';
 $lang['debug']                 = 'Показывать дополнительную отладочную информацию при ошибках';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = 'исользовать по умолчанию';
+$lang['referrals_o_0']         = 'не следовать за referrals';
+$lang['referrals_o_1']         = 'следовать за referrals';
diff --git a/lib/plugins/authldap/lang/zh-tw/settings.php b/lib/plugins/authldap/lang/zh-tw/settings.php
index e3d85cb873e532e2f6be164763620fc73433170a..cb0bb71a43a10b4cb5d3c86572bf13875a0bf41e 100644
--- a/lib/plugins/authldap/lang/zh-tw/settings.php
+++ b/lib/plugins/authldap/lang/zh-tw/settings.php
@@ -9,8 +9,8 @@ $lang['server']                = '您的 LDAP 伺服器。填寫主機名稱 (<c
 $lang['port']                  = 'LDAP 伺服器端口 (若上方沒填寫完整的 URL)';
 $lang['usertree']              = '到哪裏尋找使用者帳號?如: <code>ou=People, dc=server, dc=tld</code>';
 $lang['grouptree']             = '到哪裏尋找使用者群組?如: <code>ou=Group, dc=server, dc=tld</code>';
-$lang['userfilter']            = '用於搜索使用者賬號的 LDAP 篩選器。如: <code>(&(uid=%{user})(objectClass=posixAccount))</code>';
-$lang['groupfilter']           = '用於搜索群組的 LDAP 篩選器。例如 <code>(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['userfilter']            = '用於搜索使用者賬號的 LDAP 篩選器。如: <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter']           = '用於搜索群組的 LDAP 篩選器。例如 <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
 $lang['version']               = '使用的通訊協定版本。您可能要設置為 <code>3</code>';
 $lang['starttls']              = '使用 TLS 連接嗎?';
 $lang['referrals']             = '是否允許引用 (referrals)?';
diff --git a/lib/plugins/authldap/lang/zh/lang.php b/lib/plugins/authldap/lang/zh/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef727497ed2ccae463b734cfd9b04e4b415c9bf5
--- /dev/null
+++ b/lib/plugins/authldap/lang/zh/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Errol <errol@hotmail.com>
+ */
+$lang['connectfail']           = 'LDAP 无法连接: %s';
+$lang['domainfail']            = 'LDAP 无法找到你的用户 dn';
diff --git a/lib/plugins/authldap/lang/zh/settings.php b/lib/plugins/authldap/lang/zh/settings.php
index cdaf3dc64836e49dfc548d8f933836924e350e52..7bb63975f08ca8602f8b37d84354d704833758d6 100644
--- a/lib/plugins/authldap/lang/zh/settings.php
+++ b/lib/plugins/authldap/lang/zh/settings.php
@@ -5,13 +5,14 @@
  * 
  * @author lainme <lainme993@gmail.com>
  * @author oott123 <ip.192.168.1.1@qq.com>
+ * @author Errol <errol@hotmail.com>
  */
 $lang['server']                = '您的 LDAP 服务器。填写主机名 (<code>localhost</code>) 或者完整的 URL (<code>ldap://server.tld:389</code>)';
 $lang['port']                  = 'LDAP 服务器端口 (如果上面没有给出完整的 URL)';
 $lang['usertree']              = '何处查找用户账户。例如 <code>ou=People, dc=server, dc=tld</code>';
 $lang['grouptree']             = '何处查找用户组。例如 <code>ou=Group, dc=server, dc=tld</code>';
-$lang['userfilter']            = '用于搜索用户账户的 LDAP 筛选器。例如 <code>(&(uid=%{user})(objectClass=posixAccount))</code>';
-$lang['groupfilter']           = '用于搜索组的 LDAP 筛选器。例如 <code>(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
+$lang['userfilter']            = '用于搜索用户账户的 LDAP 筛选器。例如 <code>(&amp;(uid=%{user})(objectClass=posixAccount))</code>';
+$lang['groupfilter']           = '用于搜索组的 LDAP 筛选器。例如 <code>(&amp;(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))</code>';
 $lang['version']               = '使用的协议版本。您或许需要设置为 <code>3</code>';
 $lang['starttls']              = '使用 TLS 连接?';
 $lang['referrals']             = '是否允许引用 (referrals)?';
@@ -20,9 +21,14 @@ $lang['binddn']                = '一个可选的绑定用户的 DN (如果匿
 $lang['bindpw']                = '上述用户的密码';
 $lang['userscope']             = '限制用户搜索的范围';
 $lang['groupscope']            = '限制组搜索的范围';
+$lang['userkey']               = '表示用户名的属性;必须和用户过滤器保持一致。';
 $lang['groupkey']              = '根据任何用户属性得来的组成员(而不是标准的 AD 组),例如根据部门或者电话号码得到的组。';
+$lang['modPass']               = ' LDAP密码可以由dokuwiki修改吗?';
 $lang['debug']                 = '有错误时显示额外的调试信息';
 $lang['deref_o_0']             = 'LDAP_DEREF_NEVER';
 $lang['deref_o_1']             = 'LDAP_DEREF_SEARCHING';
 $lang['deref_o_2']             = 'LDAP_DEREF_FINDING';
 $lang['deref_o_3']             = 'LDAP_DEREF_ALWAYS';
+$lang['referrals_o_-1']        = '默认';
+$lang['referrals_o_0']         = '不要跟随参照(referral)';
+$lang['referrals_o_1']         = '跟随参照(referral)';
diff --git a/lib/plugins/authldap/plugin.info.txt b/lib/plugins/authldap/plugin.info.txt
index 964fbb99453718d2e1a5702cbd61464543a32084..e0c6144c37eb324fe70f97f2fa2de1a1a2e5b518 100644
--- a/lib/plugins/authldap/plugin.info.txt
+++ b/lib/plugins/authldap/plugin.info.txt
@@ -1,7 +1,7 @@
 base   authldap
 author Andreas Gohr
 email  andi@splitbrain.org
-date   2014-05-18
+date   2015-07-13
 name   LDAP Auth Plugin
 desc   Provides user authentication against an LDAP server
 url    http://www.dokuwiki.org/plugin:authldap
diff --git a/lib/plugins/authmysql/auth.php b/lib/plugins/authmysql/auth.php
index 0d423b6c9bf053a830fd508dba19cd0c392246f9..1b7d0bfa4ea0668eb1d4911e67622b03c52de4dc 100644
--- a/lib/plugins/authmysql/auth.php
+++ b/lib/plugins/authmysql/auth.php
@@ -222,6 +222,7 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
 
         if($this->_openDB()) {
             if(($info = $this->_getUserInfo($user)) !== false) {
+                msg($this->getLang('userexists'), -1);
                 return false; // user already exists
             }
 
@@ -235,7 +236,13 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
             $rc  = $this->_addUser($user, $pwd, $name, $mail, $grps);
             $this->_unlockTables();
             $this->_closeDB();
-            if($rc) return true;
+            if(!$rc) {
+                msg($this->getLang('writefail'));
+                return null;
+            }
+            return true;
+        } else {
+            msg($this->getLang('connectfail'), -1);
         }
         return null; // return error
     }
@@ -279,7 +286,9 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
 
             $rc = $this->_updateUserInfo($user, $changes);
 
-            if($rc && isset($changes['grps']) && $this->cando['modGroups']) {
+            if(!$rc) {
+                msg($this->getLang('usernotexists'), -1);
+            } elseif(isset($changes['grps']) && $this->cando['modGroups']) {
                 $groups = $this->_getGroups($user);
                 $grpadd = array_diff($changes['grps'], $groups);
                 $grpdel = array_diff($groups, $changes['grps']);
@@ -295,10 +304,14 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
                         $rc = false;
                     }
                 }
+
+                if(!$rc) msg($this->getLang('writefail'));
             }
 
             $this->_unlockTables();
             $this->_closeDB();
+        } else {
+            msg($this->getLang('connectfail'), -1);
         }
         return $rc;
     }
@@ -328,6 +341,8 @@ class auth_plugin_authmysql extends DokuWiki_Auth_Plugin {
                 $this->_unlockTables();
             }
             $this->_closeDB();
+        } else {
+            msg($this->getLang('connectfail'), -1);
         }
         return $count;
     }
diff --git a/lib/plugins/authmysql/lang/bg/lang.php b/lib/plugins/authmysql/lang/bg/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5837c72631063c23903de22c522c994ac4a9933
--- /dev/null
+++ b/lib/plugins/authmysql/lang/bg/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Kiril <neohidra@gmail.com>
+ */
+$lang['connectfail']           = 'Свързването с базата данни се провали.';
+$lang['userexists']            = 'За съжаление вече съществува потребител с това име.';
+$lang['usernotexists']         = 'За съжаление не съществува такъв потребител.';
diff --git a/lib/plugins/authmysql/lang/cs/lang.php b/lib/plugins/authmysql/lang/cs/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..464a031b1604575d60edabe2816fe285c9d7f951
--- /dev/null
+++ b/lib/plugins/authmysql/lang/cs/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['connectfail']           = 'Selhalo připojení k databázi.';
+$lang['userexists']            = 'Omlouváme se, ale uživatel s tímto jménem již existuje.';
+$lang['usernotexists']         = 'Omlouváme se, uživatel tohoto jména neexistuje.';
+$lang['writefail']             = 'Nelze změnit údaje uživatele. Informujte prosím správce wiki';
diff --git a/lib/plugins/authmysql/lang/cy/lang.php b/lib/plugins/authmysql/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..a96715c12a1ca1fbdaac14af5c43d753803fba30
--- /dev/null
+++ b/lib/plugins/authmysql/lang/cy/lang.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Welsh language file for authmysql plugin
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+
+$lang['connectfail']    = 'Method y cysylltiad i\'r databas.';
+$lang['userexists']     = 'Sori, mae defnyddiwr gyda\'r enw mewngofnodi hwn eisoes yn bodoli.';
+$lang['usernotexists']  = 'Sori, \'dyw\'r defnyddiwr hwnnw ddim yn bodoli.';
+$lang['writefail']      = 'Methu â newid data defnyddiwr. Rhowch wybod i Weinyddwr y Wici';
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/authmysql/lang/cy/settings.php b/lib/plugins/authmysql/lang/cy/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..526cffa6151d74958b13d8f7793a5a2dfb5c1d71
--- /dev/null
+++ b/lib/plugins/authmysql/lang/cy/settings.php
@@ -0,0 +1,39 @@
+<?php
+
+$lang['server']           = 'Eich gweinydd MySQL';
+$lang['user']             = 'Defnyddair MySQL';
+$lang['password']         = 'Cyfrinair y defnyddiwr uchod';
+$lang['database']         = 'Databas i\'w ddefnyddio';
+$lang['charset']          = 'Set nodau i\'w defnyddio gyda\'r databas';
+$lang['debug']            = 'Dangos gwybodaeth dadfygio ychwanegol';
+$lang['forwardClearPass'] = 'Pasio cyfrineiriau defnyddwyr fel \'cleartext\' i\'r datganiadau SQL isod, yn hytrach na defnyddio\'r opsiwn \'passcrypt\'';
+$lang['TablesToLock']     = 'Rhestr a wahanwyd gan goma o dablau sydd angen eu cloi yn ystod gweithredoedd ysgrifennu';
+$lang['checkPass']        = 'Datganiad SQL i wirio cyfrineiriau';
+$lang['getUserInfo']      = 'Datganiad SQL i nôl gwybodaeth defnyddiwr';
+$lang['getGroups']        = 'Datganiad SQL i nôl aelodaeth grŵp y defnyddiwr';
+$lang['getUsers']         = 'Datganiad SQL i restru pob defnyddiwr';
+$lang['FilterLogin']      = 'Cymal SQL i hidlo defnyddwyr gan enw mewngofnodi';
+$lang['FilterName']       = 'Cymal SQL i hidlo defnyddwyr gan enw llawn';
+$lang['FilterEmail']      = 'Cymal SQL i hidlo defnyddwyr gan gyfeiriad ebost';
+$lang['FilterGroup']      = 'Cymal SQL i hidlo defnyddwyr gan aelodaeth grŵp';
+$lang['SortOrder']        = 'Cymal SQL i drefnu defnyddwyr';
+$lang['addUser']          = 'Datganiad SQL i ychwanegu defnyddiwr newydd';
+$lang['addGroup']         = 'Datganiad SQL i ychwanegu grŵp newydd';
+$lang['addUserGroup']     = 'Datganiad SQL i ychwanegu defnyddiwr newydd i grŵp sy\'n bodoli eisoes';
+$lang['delGroup']         = 'Datganiad SQL i dynnu grŵp';
+$lang['getUserID']        = 'Datganiad SQL i nôl prif allwedd y defnyddiwr';
+$lang['delUser']          = 'Datganiad SQL i ddileu defnyddiwr';
+$lang['delUserRefs']      = 'Datganiad SQL i dynnu defnyddiwr o bob grŵp';
+$lang['updateUser']       = 'Datganiad SQL i ddiweddaru proffil defnyddiwr';
+$lang['UpdateLogin']      = 'Cymal Diweddaru i ddiweddaru enw mewngofnodi defnyddiwr';
+$lang['UpdatePass']       = 'Cymal Diweddaru i ddiweddaru cyfrinair defnyddiwr';
+$lang['UpdateEmail']      = 'Cymal Diweddaru i ddiweddaru cyfeiriad ebost defnyddiwr';
+$lang['UpdateName']       = 'Cymal Diweddaru i ddiweddaru enw llawn defnyddiwr';
+$lang['UpdateTarget']     = 'Cymal Cyfyngu i adnabod y defnyddiwr wrth ddiweddaru';
+$lang['delUserGroup']     = 'Datganiad SQL i dynnu defnyddiwr oddi ar grŵp';
+$lang['getGroupID']       = 'Datganiad SQL i nôl prif allwedd grŵp penodol';
+
+
+$lang['debug_o_0'] = 'dim';
+$lang['debug_o_1'] = 'gyda gwallau yn unig';
+$lang['debug_o_2'] = 'pob ymholiad SQL';
diff --git a/lib/plugins/authmysql/lang/da/settings.php b/lib/plugins/authmysql/lang/da/settings.php
index ed21201fbb25ff203a4dfb142c1281a3f7c0275d..5fd66dbad0b5b3f67d543e417584c3180577d158 100644
--- a/lib/plugins/authmysql/lang/da/settings.php
+++ b/lib/plugins/authmysql/lang/da/settings.php
@@ -5,6 +5,7 @@
  * 
  * @author Jens Hyllegaard <jens.hyllegaard@gmail.com>
  * @author soer9648 <soer9648@eucl.dk>
+ * @author Jacob Palm <mail@jacobpalm.dk>
  */
 $lang['server']                = 'Din MySQL server';
 $lang['user']                  = 'MySQL brugernavn';
@@ -12,8 +13,11 @@ $lang['password']              = 'Kodeord til ovenstående bruger';
 $lang['database']              = 'Database der skal benyttes';
 $lang['charset']               = 'Tegnsæt benyttet i database';
 $lang['debug']                 = 'Vis yderligere debug output';
+$lang['forwardClearPass']      = 'Videregiv bruger adgangskoder i klar tekst til nedenstående SQL statement, i stedet for at benytte passcrypt';
+$lang['TablesToLock']          = 'Kommasepareret liste over tabeller der skal låses under skrivning';
 $lang['checkPass']             = 'SQL-sætning til at kontrollere kodeord';
 $lang['getUserInfo']           = 'SQL-sætning til at hente brugerinformation';
+$lang['getGroups']             = 'SQL statement til at bestemme en brugers medlemskab af grupper';
 $lang['getUsers']              = 'SQL-sætning til at liste alle brugere';
 $lang['addUser']               = 'SQL-sætning til at tilføje en ny bruger';
 $lang['addGroup']              = 'SQL-sætning til at tilføje en ny gruppe';
diff --git a/lib/plugins/authmysql/lang/de/lang.php b/lib/plugins/authmysql/lang/de/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..c5c3c657a3dae22529c1b3c18df55a9b9f8de80a
--- /dev/null
+++ b/lib/plugins/authmysql/lang/de/lang.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Noel Tilliot <noeltilliot@byom.de>
+ * @author Hendrik Diel <diel.hendrik@gmail.com>
+ * @author Philip Knack <p.knack@stollfuss.de>
+ */
+$lang['connectfail']           = 'Verbindung zur Datenbank fehlgeschlagen.';
+$lang['userexists']            = 'Entschuldigung, aber dieser Benutzername ist bereits vergeben.';
+$lang['usernotexists']         = 'Sorry, dieser Nutzer existiert nicht.';
+$lang['writefail']             = 'Die Benutzerdaten konnten nicht geändert werden. Bitte wenden Sie sich an den Wiki-Admin.';
diff --git a/lib/plugins/authmysql/lang/en/lang.php b/lib/plugins/authmysql/lang/en/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8313616c6184e756a8c64360a91294515f06fb15
--- /dev/null
+++ b/lib/plugins/authmysql/lang/en/lang.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * English language file for authmysql plugin
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+
+$lang['connectfail']    = 'Failed to connect to database.';
+$lang['userexists']     = 'Sorry, a user with this login already exists.';
+$lang['usernotexists']  = 'Sorry, that user doesn\'t exist.';
+$lang['writefail']      = 'Unable to modify user data. Please inform the Wiki-Admin';
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/authmysql/lang/es/lang.php b/lib/plugins/authmysql/lang/es/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..e25b801c33b5316871d741316c04ea6cf2c11664
--- /dev/null
+++ b/lib/plugins/authmysql/lang/es/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Domingo Redal <docxml@gmail.com>
+ */
+$lang['connectfail']           = 'Error al conectar con la base de datos.';
+$lang['userexists']            = 'Lo sentimos, ya existe un usuario con ese inicio de sesión.';
+$lang['usernotexists']         = 'Lo sentimos, no existe ese usuario.';
+$lang['writefail']             = 'No es posible modificar los datos del usuario. Por favor, informa al Administrador del Wiki';
diff --git a/lib/plugins/authmysql/lang/es/settings.php b/lib/plugins/authmysql/lang/es/settings.php
index b82620fc60230ab4176f3b1c8229700dbdbe278d..8b5c79995028f5c0fb91ca6310a649fd8990e55f 100644
--- a/lib/plugins/authmysql/lang/es/settings.php
+++ b/lib/plugins/authmysql/lang/es/settings.php
@@ -6,6 +6,8 @@
  * @author Antonio Bueno <atnbueno@gmail.com>
  * @author Eloy <ej.perezgomez@gmail.com>
  * @author Antonio Castilla <antoniocastilla@trazoide.com>
+ * @author Alejandro Nunez <nunez.alejandro@gmail.com>
+ * @author Domingo Redal <docxml@gmail.com>
  */
 $lang['server']                = 'Tu servidor MySQL';
 $lang['user']                  = 'Nombre de usuario MySQL';
@@ -32,6 +34,11 @@ $lang['getUserID']             = 'Sentencia SQL para obtener la clave primaria d
 $lang['delUser']               = 'Sentencia SQL para eliminar un usuario';
 $lang['delUserRefs']           = 'Sentencia SQL para eliminar un usuario de todos los grupos';
 $lang['updateUser']            = 'Sentencia SQL para actualizar un perfil de usuario';
+$lang['UpdateLogin']           = 'Cláusula de actualización para actualizar el login del usuario';
+$lang['UpdatePass']            = 'Cláusula de actualización para actualizar la contraseña del usuario';
+$lang['UpdateEmail']           = 'Cláusula de actualización para actualizar la dirección de correo del usuario';
+$lang['UpdateName']            = 'Cláusula de actualización para actualizar el nomblre completo del usuario';
+$lang['UpdateTarget']          = 'Cláusula limite para identificar al usuario cuando se actualiza';
 $lang['delUserGroup']          = 'Sentencia SQL para eliminar un usuario de un grupo dado';
 $lang['getGroupID']            = 'Sentencia SQL para obtener la clave principal de un grupo dado';
 $lang['debug_o_0']             = 'ninguno';
diff --git a/lib/plugins/authmysql/lang/fa/lang.php b/lib/plugins/authmysql/lang/fa/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..c73c053b16529e773bff09b55abfe6984e0310f8
--- /dev/null
+++ b/lib/plugins/authmysql/lang/fa/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Mohmmad Razavi <sepent@gmail.com>
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
+ */
+$lang['connectfail']           = 'خطا در اتصال به دیتابیس';
+$lang['userexists']            = 'با عرض پوزش، یک کاربر با این نام از قبل وجود دارد.';
+$lang['usernotexists']         = 'با عرض پوزش، آن کاربر وجود نداشت.';
+$lang['writefail']             = 'امکان تغییر داده کاربر وجود نداشت. لطفا مسئول Wiki را آگاه کنید.';
diff --git a/lib/plugins/authmysql/lang/fa/settings.php b/lib/plugins/authmysql/lang/fa/settings.php
index 68ad5ce8374104adaf90a3a769fc92d545f686f3..bca4bbf07dc6cc824eaf9620f0deac151184fe4f 100644
--- a/lib/plugins/authmysql/lang/fa/settings.php
+++ b/lib/plugins/authmysql/lang/fa/settings.php
@@ -4,7 +4,40 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ * @author Mohmmad Razavi <sepent@gmail.com>
  */
 $lang['server']                = 'سرور MySQL';
 $lang['user']                  = 'نام کاربری MySQL';
+$lang['password']              = 'رمزعبور کاربر بالا';
 $lang['database']              = 'پایگاه داده مورد استفاده';
+$lang['charset']               = 'مجموعه کاراکترهایی (Character set) که در پایگاه داده بکار رفته';
+$lang['debug']                 = 'نمایش اطلاعات بیشتر برای دیباگ';
+$lang['forwardClearPass']      = 'بجای استفاده از گزینه passcrypt، رمزعبورهای کاربر را بصورت آشکار به دستور SQL زیر پاس دهید.';
+$lang['TablesToLock']          = 'لیست جدولهایی که هنگام عملیات نوشتن باید قفل شود که با کاما از هم جدا شده اند';
+$lang['checkPass']             = 'دستور SQL برای بررسی رمزعبورها';
+$lang['getUserInfo']           = 'دستور SQL برای دریافت اطلاعات نام کاربری';
+$lang['getGroups']             = 'دستور SQL برای دریافت گروه‌های عضویت یک کاربر';
+$lang['getUsers']              = 'دستور SQL برای گرفتن لیست تمامی کاربران';
+$lang['FilterLogin']           = 'عبارت SQL برای فیلتر کردن کاربران با نام کاربری (login name)';
+$lang['FilterName']            = 'عبارت SQL برای فیلتر کردن کاربران با نام کامل';
+$lang['FilterEmail']           = 'عبارت SQL برای فیلتر کردن کابران با آدرس ایمیل';
+$lang['FilterGroup']           = 'عبارت SQL برای فیلتر کاربران با گروه عضویتشان';
+$lang['SortOrder']             = 'عبارت SQL برای مرتب کردن کاربران';
+$lang['addUser']               = 'دستور SQL برای اضافه کردن کاربر جدید';
+$lang['addGroup']              = 'دستور SQL برای اضافه کردن گروه جدید';
+$lang['addUserGroup']          = 'دستور SQL برای اضافه کردن یک کاربر به یک گروه موجود از قبل';
+$lang['delGroup']              = 'دستور SQL برای حذف یک گروه';
+$lang['getUserID']             = 'دستور SQL برای گرفتن کلید اصلی (primary key) یک کاربر';
+$lang['delUser']               = 'دستور SQL برای حذف یک کاربر';
+$lang['delUserRefs']           = 'دستور SQL برای حذف یک کابر از تمامی گروه‌ها';
+$lang['updateUser']            = 'دستور SQL برای بروزرسانی پروفایل یک کاربر';
+$lang['UpdateLogin']           = 'عبارت Update برای بروزرسانی نام کاربری (login name)';
+$lang['UpdatePass']            = 'عبارت Update برای بروزرسانی رمزعبور کاربر';
+$lang['UpdateEmail']           = 'عبارت Update برای بروزرسانی ادرسی ایمیل کاربر';
+$lang['UpdateName']            = 'عبارت Update برای بروزرسانی نام کامل کاربر';
+$lang['UpdateTarget']          = 'عبارت Limit برای شناسایی کابر هنگام بروزرسانی';
+$lang['delUserGroup']          = 'دستور SQL برای حذف یک کاربر ';
+$lang['getGroupID']            = 'دستور SQL برای گرفتن کلید اصلی (primary key) گروه داده شده';
+$lang['debug_o_0']             = 'هیچ';
+$lang['debug_o_1']             = 'فقط هنگام خطا';
+$lang['debug_o_2']             = 'تمام پرس‌وجوهای SQL';
diff --git a/lib/plugins/authmysql/lang/fr/lang.php b/lib/plugins/authmysql/lang/fr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5a1e1209dae8833941ccf8ee169d8e6502d80e1
--- /dev/null
+++ b/lib/plugins/authmysql/lang/fr/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Pietroni <pietroni@informatique.univ-paris-diderot.fr>
+ */
+$lang['connectfail']           = 'Impossible de se connecter à la base de données.';
+$lang['userexists']            = 'Désolé, un utilisateur avec cet identifiant existe déjà.';
+$lang['usernotexists']         = 'Désolé, cet utilisateur n\'existe pas.';
+$lang['writefail']             = 'Impossible de modifier les données utilisateur. Veuillez en informer l\'administrateur du Wiki.';
diff --git a/lib/plugins/authmysql/lang/he/settings.php b/lib/plugins/authmysql/lang/he/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..3671b1bb9c86a996577ef3be6f3de642e0ec58df
--- /dev/null
+++ b/lib/plugins/authmysql/lang/he/settings.php
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Menashe Tomer <menashesite@gmail.com>
+ */
+$lang['getUserID']             = 'שאילתת SQL לקבלת מפתח ראשי של המשתמש';
+$lang['UpdateLogin']           = 'שאילתת SQL לעדכון שם המשתמש';
+$lang['UpdatePass']            = 'שאילתת SQL לעדכון סיסמת המשתמש';
+$lang['UpdateEmail']           = 'שאילתת SQL לעדכון כתובת הדוא"ל של המשתמש';
+$lang['UpdateName']            = 'שאילתת SQL לעדכון שם המשתמש';
diff --git a/lib/plugins/authmysql/lang/hr/lang.php b/lib/plugins/authmysql/lang/hr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f5dc5d6010a0754e4807bda379fb2d665f8fd96
--- /dev/null
+++ b/lib/plugins/authmysql/lang/hr/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Davor Turkalj <turki.bsc@gmail.com>
+ */
+$lang['connectfail']           = 'Ne mogu se spojiti na bazu.';
+$lang['userexists']            = 'Oprostite ali korisnik s ovom prijavom već postoji.';
+$lang['usernotexists']         = 'Oprostite ali ovaj korisnik ne postoji.';
+$lang['writefail']             = 'Ne mogu izmijeniti podatke. Molim obavijestite Wiki administratora';
diff --git a/lib/plugins/authmysql/lang/hu/lang.php b/lib/plugins/authmysql/lang/hu/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f48da3356f4df9dec265f25a362000db6e27f2e
--- /dev/null
+++ b/lib/plugins/authmysql/lang/hu/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Marton Sebok <sebokmarton@gmail.com>
+ */
+$lang['connectfail']           = 'Az adatbázishoz való csatlakozás sikertelen.';
+$lang['userexists']            = 'Sajnos már létezik ilyen azonosítójú felhasználó.';
+$lang['usernotexists']         = 'Sajnos ez a felhasználó nem létezik.';
+$lang['writefail']             = 'A felhasználói adatok módosítása sikertelen. Kérlek, fordulj a wiki rendszergazdájához!';
diff --git a/lib/plugins/authmysql/lang/it/lang.php b/lib/plugins/authmysql/lang/it/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5b1ae0a00d3b19af16aa76012ff188c69515ed14
--- /dev/null
+++ b/lib/plugins/authmysql/lang/it/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Torpedo <dgtorpedo@gmail.com>
+ */
+$lang['connectfail']           = 'Connessione fallita al database.';
+$lang['userexists']            = 'Spiacente, esiste già un utente con queste credenziali.';
+$lang['usernotexists']         = 'Spiacente, quell\'utente non esiste.';
+$lang['writefail']             = 'Non è possibile cambiare le informazioni utente. Si prega di informare l\'Amministratore del wiki';
diff --git a/lib/plugins/authmysql/lang/it/settings.php b/lib/plugins/authmysql/lang/it/settings.php
index 10c0de96fb49ae7c969de59f790ed8a01c694a30..1e93077000bb9ef9c89dbc72c1e3efe1cc27c5a6 100644
--- a/lib/plugins/authmysql/lang/it/settings.php
+++ b/lib/plugins/authmysql/lang/it/settings.php
@@ -6,18 +6,26 @@
  * @author Claudio Lanconelli <lancos@libero.it>
  * @author Mirko <malisan.mirko@gmail.com>
  * @author Francesco <francesco.cavalli@hotmail.com>
+ * @author Maurizio <mcannavo@katamail.com>
+ * @author Torpedo <dgtorpedo@gmail.com>
  */
 $lang['server']                = 'Il tuo server MySQL';
 $lang['user']                  = 'User name di MySQL';
+$lang['password']              = 'Password per l\'utente di cui sopra';
 $lang['database']              = 'Database da usare';
 $lang['charset']               = 'Set di caratteri usato nel database';
 $lang['debug']                 = 'Mostra ulteriori informazioni di debug';
+$lang['forwardClearPass']      = 'Fornisci le password utente come testo visibile alle istruzioni SQL qui sotto, invece che usare l\'opzione passcrypt';
 $lang['TablesToLock']          = 'Lista, separata da virgola, delle tabelle che devono essere bloccate in scrittura';
 $lang['checkPass']             = 'Istruzione SQL per il controllo password';
 $lang['getUserInfo']           = 'Istruzione SQL per recuperare le informazioni utente';
+$lang['getGroups']             = 'Istruzione SQL per recuperare il gruppo di appartenenza di un utente';
 $lang['getUsers']              = 'Istruzione SQL per listare tutti gli utenti';
-$lang['FilterLogin']           = 'Istruzione SQL per per filtrare gli utenti in funzione del "login name"';
-$lang['SortOrder']             = 'Istruzione SQL per ordinare gli utenti';
+$lang['FilterLogin']           = 'Condizione SQL per per filtrare gli utenti in funzione del "login name"';
+$lang['FilterName']            = 'Condizione SQL per filtrare gli utenti in base al nome completo';
+$lang['FilterEmail']           = 'Condizione SQL per filtrare gli utenti in base all\'indirizzo e-mail';
+$lang['FilterGroup']           = 'Condizione SQL per filtrare gli utenti in base al gruppo di appartenenza';
+$lang['SortOrder']             = 'Condizione SQL per ordinare gli utenti';
 $lang['addUser']               = 'Istruzione SQL per aggiungere un nuovo utente';
 $lang['addGroup']              = 'Istruzione SQL per aggiungere un nuovo gruppo';
 $lang['addUserGroup']          = 'Istruzione SQL per aggiungere un utente ad un gruppo esistente';
@@ -26,10 +34,11 @@ $lang['getUserID']             = 'Istruzione SQL per recuperare la primary key d
 $lang['delUser']               = 'Istruzione SQL per cancellare un utente';
 $lang['delUserRefs']           = 'Istruzione SQL per rimuovere un utente da tutti i gruppi';
 $lang['updateUser']            = 'Istruzione SQL per aggiornare il profilo utente';
-$lang['UpdateLogin']           = 'Clausola per aggiornare il "login name" dell\'utente';
-$lang['UpdatePass']            = 'Clausola per aggiornare la password utente';
-$lang['UpdateEmail']           = 'Clausola per aggiornare l\'email utente';
-$lang['UpdateName']            = 'Clausola per aggiornare il nome completo';
+$lang['UpdateLogin']           = 'Condizione SQL per aggiornare il nome di accesso dell\'utente';
+$lang['UpdatePass']            = 'Condizione SQL per aggiornare la password utente';
+$lang['UpdateEmail']           = 'Condizione SQL per aggiornare l\'e-mail utente';
+$lang['UpdateName']            = 'Condizione SQL per aggiornare il nome completo dell\'utente';
+$lang['UpdateTarget']          = 'Condizione SQL per identificare l\'utente quando aggiornato';
 $lang['delUserGroup']          = 'Istruzione SQL per rimuovere un utente da un dato gruppo';
 $lang['getGroupID']            = 'Istruzione SQL per avere la primary key di un dato gruppo';
 $lang['debug_o_0']             = 'Nulla';
diff --git a/lib/plugins/authmysql/lang/ja/lang.php b/lib/plugins/authmysql/lang/ja/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..a2348f2f3ab6a5013a6b88c9fd2a44ea6803b4a6
--- /dev/null
+++ b/lib/plugins/authmysql/lang/ja/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Hideaki SAWADA <chuno@live.jp>
+ */
+$lang['connectfail']           = 'データベースへの接続に失敗しました。';
+$lang['userexists']            = 'このログイン名のユーザーが既に存在しています。';
+$lang['usernotexists']         = 'そのユーザーは存在しません。';
+$lang['writefail']             = 'ユーザーデータを変更できません。Wiki の管理者に連絡してください。';
diff --git a/lib/plugins/authmysql/lang/ja/settings.php b/lib/plugins/authmysql/lang/ja/settings.php
index e5d5689df24be1f61c3e745b9bba711a3af115ca..6bc3f9a14705c1bf7d04e72a5567472098620c7a 100644
--- a/lib/plugins/authmysql/lang/ja/settings.php
+++ b/lib/plugins/authmysql/lang/ja/settings.php
@@ -11,7 +11,7 @@ $lang['password']              = 'MySQL 接続用ユーザーのパスワード'
 $lang['database']              = '使用するデータベース名';
 $lang['charset']               = 'データベースの文字コード';
 $lang['debug']                 = 'デバック情報を表示する';
-$lang['forwardClearPass']      = '以下で定義する SQL ステートメントにおいて, パスワード変数 &#x25;{pass} を平文とする(DokiWiki側で暗号化しない)';
+$lang['forwardClearPass']      = '以下で定義する SQL ステートメントにおいて, パスワード変数 を平文とする(DokiWiki側で暗号化しない)';
 $lang['TablesToLock']          = '書き込み時にロックするテーブル(コンマ区切りで列挙)';
 $lang['checkPass']             = 'パスワードの照合に用いる SQL ステートメント';
 $lang['getUserInfo']           = 'ユーザー情報の取得に用いる SQL ステートメント';
diff --git a/lib/plugins/authmysql/lang/ko/lang.php b/lib/plugins/authmysql/lang/ko/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..d07d58388cd25487a72a7ca888b886b5e0d91d09
--- /dev/null
+++ b/lib/plugins/authmysql/lang/ko/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author hyeonsoft <hyeonsoft@live.co.kr>
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['connectfail']           = '데이터베이스에 연결하는 데 실패했습니다.';
+$lang['userexists']            = '죄송하지만 이 계정으로 이미 로그인한 사용자가 있습니다.';
+$lang['usernotexists']         = '죄송하지만 해당 사용자가 존재하지 않습니다.';
+$lang['writefail']             = '사용자 데이터를 수정할 수 없습니다. 위키 관리자에게 문의하시기 바랍니다';
diff --git a/lib/plugins/authmysql/lang/nl/lang.php b/lib/plugins/authmysql/lang/nl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..9a8cf31147a603c6e7258c96cf9c7ef81564dd51
--- /dev/null
+++ b/lib/plugins/authmysql/lang/nl/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Hugo Smet <hugo.smet@scarlet.be>
+ */
+$lang['connectfail']           = 'Connectie met de database mislukt.';
+$lang['userexists']            = 'Sorry, een gebruiker met deze login bestaat reeds.';
+$lang['usernotexists']         = 'Sorry, deze gebruiker bestaat niet.';
+$lang['writefail']             = 'Onmogelijk om de gebruikers data te wijzigen. Gelieve de Wiki-Admin te informeren.';
diff --git a/lib/plugins/authmysql/lang/pt-br/lang.php b/lib/plugins/authmysql/lang/pt-br/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b1a4c3add73399aaafd54e81ffe8fe6f894a5ba
--- /dev/null
+++ b/lib/plugins/authmysql/lang/pt-br/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ */
+$lang['connectfail']           = 'Não foi possível conectar ao banco de dados.';
+$lang['userexists']            = 'Desculpe, mas já existe esse nome de usuário.';
+$lang['usernotexists']         = 'Desculpe, mas esse usuário não existe.';
+$lang['writefail']             = 'Não foi possível modificar os dados do usuário. Por favor, informe ao administrador do Wiki.';
diff --git a/lib/plugins/authmysql/lang/pt/lang.php b/lib/plugins/authmysql/lang/pt/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..754a552f8dee424aab6375d16abf584ebdb78c8f
--- /dev/null
+++ b/lib/plugins/authmysql/lang/pt/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Paulo Carmino <contato@paulocarmino.com>
+ */
+$lang['connectfail']           = 'Falha ao conectar com o banco de dados.';
+$lang['userexists']            = 'Desculpe, esse login já está sendo usado.';
+$lang['usernotexists']         = 'Desculpe, esse login não existe.';
diff --git a/lib/plugins/authmysql/lang/ru/lang.php b/lib/plugins/authmysql/lang/ru/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..e2160c375f9cc0e223e779ea4d12129741b150a8
--- /dev/null
+++ b/lib/plugins/authmysql/lang/ru/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Takumo <9206984@mail.ru>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ */
+$lang['connectfail']           = 'Ошибка соединения с базой данных.';
+$lang['userexists']            = 'Извините, пользователь с таким логином уже существует.';
+$lang['usernotexists']         = 'Извините, такой пользователь не существует.';
+$lang['writefail']             = 'Невозможно изменить данные пользователя. Сообщите об этом администратору вики.';
diff --git a/lib/plugins/authmysql/lang/ru/settings.php b/lib/plugins/authmysql/lang/ru/settings.php
index eefec065bb1caacac5231a95e7b6d0fa685f78c1..d9afa14e6a16a63837a36151b28c3bc41ad0ed7e 100644
--- a/lib/plugins/authmysql/lang/ru/settings.php
+++ b/lib/plugins/authmysql/lang/ru/settings.php
@@ -6,6 +6,7 @@
  * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
  * @author Aleksandr Selivanov <alexgearbox@gmail.com>
  * @author Type-kun <workwork-1@yandex.ru>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
  */
 $lang['server']                = 'Ваш MySQL-сервер';
 $lang['user']                  = 'Имя пользователя MySQL';
@@ -14,7 +15,7 @@ $lang['database']              = 'Имя базы данных';
 $lang['charset']               = 'Используемый набор символов в базе данных';
 $lang['debug']                 = 'Отображение дополнительной отладочной информации';
 $lang['forwardClearPass']      = 'Передача пароля пользователя открытым текстом, вместо зашифрованной формы в используемом выражении SQL';
-$lang['TablesToLock']          = 'Имена таблиц (через запятую), которые необходимо ограничение для записи';
+$lang['TablesToLock']          = 'Имена таблиц (через запятую), которым необходимо ограничение для записи';
 $lang['checkPass']             = 'Выражение SQL, осуществляющее проверку пароля';
 $lang['getUserInfo']           = 'Выражение SQL, осуществляющее извлечение информации о пользователе';
 $lang['getGroups']             = 'Выражение SQL, осуществляющее извлечение информации о членстве пользователе в группах';
diff --git a/lib/plugins/authmysql/lang/sk/lang.php b/lib/plugins/authmysql/lang/sk/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..d143bbf2c7071014639cba2e0266b1d98de73f31
--- /dev/null
+++ b/lib/plugins/authmysql/lang/sk/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['connectfail']           = 'Nepodarilo sa pripojiť k databáze.';
+$lang['userexists']            = 'Ľutujem, ale používateľ s týmto prihlasovacím menom už existuje.';
+$lang['writefail']             = 'Nie je možné zmeniť údaje používateľa, informujte prosím administrátora Wiki.';
diff --git a/lib/plugins/authmysql/lang/tr/lang.php b/lib/plugins/authmysql/lang/tr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..b5c7b2fe198c0e33d994f9667ba94d93f6bc8d85
--- /dev/null
+++ b/lib/plugins/authmysql/lang/tr/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Mete Cuma <mcumax@gmail.com>
+ */
+$lang['connectfail']           = 'Veritabanına bağlantı kurulamadı.';
+$lang['usernotexists']         = 'Üzgünüz, kullanıcı mevcut değil.';
diff --git a/lib/plugins/authmysql/lang/zh/lang.php b/lib/plugins/authmysql/lang/zh/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..044fe6d609d545d9fdfd0e2f2c5995e7a4fc8f53
--- /dev/null
+++ b/lib/plugins/authmysql/lang/zh/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Errol <errol@hotmail.com>
+ */
+$lang['connectfail']           = '连接数据库失败';
+$lang['userexists']            = '抱歉,用户名已被使用。';
+$lang['usernotexists']         = '抱歉,用户不存在。';
+$lang['writefail']             = '无法修改用户数据。请通知管理员';
diff --git a/lib/plugins/authmysql/plugin.info.txt b/lib/plugins/authmysql/plugin.info.txt
index fa00fccf4ba75fba6ff14013a3121550abeac88e..1658d7aac231e094012f5718fbdfe285f6df344c 100644
--- a/lib/plugins/authmysql/plugin.info.txt
+++ b/lib/plugins/authmysql/plugin.info.txt
@@ -1,7 +1,7 @@
 base   authmysql
 author Andreas Gohr
 email  andi@splitbrain.org
-date   2014-02-15
+date   2015-07-13
 name   MYSQL Auth Plugin
 desc   Provides user authentication against a MySQL database
 url    http://www.dokuwiki.org/plugin:authmysql
diff --git a/lib/plugins/authpgsql/lang/cy/settings.php b/lib/plugins/authpgsql/lang/cy/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c32ad7b2f145988e549394012d1c708680655de
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/cy/settings.php
@@ -0,0 +1,33 @@
+<?php
+
+$lang['server']           = 'Eich gweinydd PostgreSQL';
+$lang['port']             = 'Porth eich gweinydd PostgreSQL';
+$lang['user']             = 'Defnyddair PostgreSQL';
+$lang['password']         = 'Cyfrinair y defnyddiwr uchod';
+$lang['database']         = 'Databas i\'w ddefnyddio';
+$lang['debug']            = 'angos gwybodaeth dadfygio ychwanegol';
+$lang['forwardClearPass'] = 'Pasio cyfrineiriau defnyddwyr fel \'cleartext\' i\'r datganiadau SQL isod, yn hytrach na defnyddio\'r opsiwn \'passcrypt\'';
+$lang['checkPass']        = 'Datganiad SQL i wirio cyfrineiriau';
+$lang['getUserInfo']      = 'Datganiad SQL i nôl gwybodaeth defnyddiwr';
+$lang['getGroups']        = 'Datganiad SQL i nôl aelodaeth grŵp y defnyddiwr';
+$lang['getUsers']         = 'Datganiad SQL i restru pob defnyddiwr';
+$lang['FilterLogin']      = 'Cymal SQL i hidlo defnyddwyr gan enw mewngofnodi';
+$lang['FilterName']       = 'Cymal SQL i hidlo defnyddwyr gan enw llawn';
+$lang['FilterEmail']      = 'Cymal SQL i hidlo defnyddwyr gan gyfeiriad ebost';
+$lang['FilterGroup']      = 'Cymal SQL i hidlo defnyddwyr gan aelodaeth grŵp';
+$lang['SortOrder']        = 'Cymal SQL i drefnu defnyddwyr';
+$lang['addUser']          = 'Datganiad SQL i ychwanegu defnyddiwr newydd';
+$lang['addGroup']         = 'Datganiad SQL i ychwanegu grŵp newydd';
+$lang['addUserGroup']     = 'Datganiad SQL i ychwanegu defnyddiwr newydd i grŵp sy\'n bodoli eisoes';
+$lang['delGroup']         = 'Datganiad SQL i dynnu grŵp';
+$lang['getUserID']        = 'Datganiad SQL i nôl prif allwedd y defnyddiwr';
+$lang['delUser']          = 'Datganiad SQL i ddileu defnyddiwr';
+$lang['delUserRefs']      = 'Datganiad SQL i dynnu defnyddiwr o bob grŵp';
+$lang['updateUser']       = 'Datganiad SQL i ddiweddaru proffil defnyddiwr';
+$lang['UpdateLogin']      = 'Cymal Diweddaru i ddiweddaru enw mewngofnodi defnyddiwr';
+$lang['UpdatePass']       = 'Cymal Diweddaru i ddiweddaru cyfrinair defnyddiwr';
+$lang['UpdateEmail']      = 'Cymal Diweddaru i ddiweddaru cyfeiriad ebost defnyddiwr';
+$lang['UpdateName']       = 'Cymal Diweddaru i ddiweddaru enw llawn defnyddiwr';
+$lang['UpdateTarget']     = 'Cymal Cyfyngu i adnabod y defnyddiwr wrth ddiweddaru';
+$lang['delUserGroup']     = 'Datganiad SQL i dynnu defnyddiwr oddi ar grŵp';
+$lang['getGroupID']       = 'Datganiad SQL i nôl prif allwedd grŵp penodol';
diff --git a/lib/plugins/authpgsql/lang/es/settings.php b/lib/plugins/authpgsql/lang/es/settings.php
index abfb00d387bd8e8e5bc1d9bf1fe0d59b4d91190e..0ca264bc200b9deb3540736821e48d6ffe6eab96 100644
--- a/lib/plugins/authpgsql/lang/es/settings.php
+++ b/lib/plugins/authpgsql/lang/es/settings.php
@@ -6,6 +6,7 @@
  * @author Antonio Bueno <atnbueno@gmail.com>
  * @author Antonio Castilla <antoniocastilla@trazoide.com>
  * @author pokesakura <pokesakura@gmail.com>
+ * @author Domingo Redal <docxml@gmail.com>
  */
 $lang['server']                = 'Su servidor PostgreSQL';
 $lang['port']                  = 'Puerto de su servidor PostgreSQL';
@@ -35,4 +36,6 @@ $lang['UpdateLogin']           = 'Sentencia de actualizacion para el login del u
 $lang['UpdatePass']            = 'Sentencia de actualizacion para el password del usuario';
 $lang['UpdateEmail']           = 'Sentencia de actualizacion del correo electrónico del usuario';
 $lang['UpdateName']            = 'Sentencia de actualizacion del nombre completo del usuario';
+$lang['UpdateTarget']          = 'Cláusula limite para identificar al usuario cuando se actualiza';
+$lang['delUserGroup']          = 'Sentencia SQL para eliminar un usuario de un grupo determinado';
 $lang['getGroupID']            = 'Sentencia SQL para obtener la clave principal de un grupo dado';
diff --git a/lib/plugins/authpgsql/lang/fa/settings.php b/lib/plugins/authpgsql/lang/fa/settings.php
index 8134939674937ca62b6b6f4ae199add8dbc76b19..5afe8118217fbe147a927da94283156f3d3bfc12 100644
--- a/lib/plugins/authpgsql/lang/fa/settings.php
+++ b/lib/plugins/authpgsql/lang/fa/settings.php
@@ -4,5 +4,37 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ * @author Mohmmad Razavi <sepent@gmail.com>
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
  */
+$lang['server']                = 'سرور PostgreSQL شما';
+$lang['port']                  = 'پورت سرور PostgreSQL شما';
+$lang['user']                  = 'نام کاربری PostgreSQL';
+$lang['password']              = 'رمزعبور کابر بالا';
 $lang['database']              = 'پایگاه داده مورد استفاده';
+$lang['debug']                 = 'نمایش اطلاعات بیشتر برای خطایابی';
+$lang['forwardClearPass']      = 'به جای استفاده از امکان رمزنگاری، پسورد کاربران به صورت متنی به دستورات SQL ارسال شود';
+$lang['checkPass']             = 'دستور SQL برای چک کردن پسورد';
+$lang['getUserInfo']           = 'دستور SQL برای دریافت اطلاعات کاربران';
+$lang['getGroups']             = 'دستور SQL برای دریافت گروه‌های یک کاربر';
+$lang['getUsers']              = 'دستور SQL برای فهرست کردن تمام کاربران';
+$lang['FilterLogin']           = 'کلاز SQL برای فیلتر کردن کاربران با نام کاربری';
+$lang['FilterName']            = 'کلاز SQL برای فیلتر کردن کاربران با نام کامل';
+$lang['FilterEmail']           = 'کلاز SQL برای فیلتر کردن کاربران با آدرس ایمیل';
+$lang['FilterGroup']           = 'کلاز SQL برای فیلتر کردن کاربران با عضویت در گروه';
+$lang['SortOrder']             = 'کلاز SQL برای مرتب کردن کاربران';
+$lang['addUser']               = 'دستور SQL برای افزودن کاربر جدید';
+$lang['addGroup']              = 'دستور SQL برای افزودن گروه جدید';
+$lang['addUserGroup']          = 'دستور SQL برای افزودن یک کاربر به یک گروه موجود';
+$lang['delGroup']              = 'دستور SQL برای پاک کردن یک گروه';
+$lang['getUserID']             = 'دستور SQL برای گرفتن کلید اصلی یک کاربر';
+$lang['delUser']               = 'دستور SQL برای حذف یک کاربر';
+$lang['delUserRefs']           = 'دستور SQL برای پاک کردن یک کاربر از تمام گروه‌ها';
+$lang['updateUser']            = 'دستور SQL برای به‌روزرسانی پروفایل کاربر';
+$lang['UpdateLogin']           = 'کلاز Update برای به روز کردن نام کاربری';
+$lang['UpdatePass']            = 'کلاز Update برای به روز کردن پسورد کاربر';
+$lang['UpdateEmail']           = 'کلاز Update برای به روز کردن ایمیل کاربر';
+$lang['UpdateName']            = 'کلاز Update برای به روز کردن نام کامل کاربر';
+$lang['UpdateTarget']          = 'کلاز Limit برای شناسایی کاربر هنگام به روز رسانی';
+$lang['delUserGroup']          = 'دستور SQL برای حذف یک کاربر از یک گروه';
+$lang['getGroupID']            = 'دستور SQL برای گرفتن کلید اصلی یک گروه';
diff --git a/lib/plugins/authpgsql/lang/it/settings.php b/lib/plugins/authpgsql/lang/it/settings.php
index e8a40dcb2c7310ba308a51f9d5bbba80570386da..e786f2f2d007c9b516a06ce416a02cd147e44e1a 100644
--- a/lib/plugins/authpgsql/lang/it/settings.php
+++ b/lib/plugins/authpgsql/lang/it/settings.php
@@ -5,9 +5,36 @@
  * 
  * @author Francesco <francesco.cavalli@hotmail.com>
  * @author Torpedo <dgtorpedo@gmail.com>
+ * @author Maurizio <mcannavo@katamail.com>
  */
 $lang['server']                = 'Il tuo server PostgreSQL ';
 $lang['port']                  = 'La porta del tuo server PostgreSQL ';
 $lang['user']                  = 'Lo username PostgreSQL';
+$lang['password']              = 'Password dell\'utente summenzionato';
 $lang['database']              = 'Database da usare';
-$lang['getUsers']              = 'Dichiarazione SQL per elencare tutti gli utenti';
+$lang['debug']                 = 'Visualizza informazioni addizionali di debug';
+$lang['forwardClearPass']      = 'Fornisci le password utente come testo visibile alle istruzioni SQL qui sotto, invece che usare l\'opzione passcrypt';
+$lang['checkPass']             = 'Istruzione SQL per il controllo password';
+$lang['getUserInfo']           = 'Istruzione SQL per recuperare le informazioni utente';
+$lang['getGroups']             = 'Istruzione SQL per recuperare il gruppo di appartenenza di un utente';
+$lang['getUsers']              = 'Istruzione SQL per elencare tutti gli utenti';
+$lang['FilterLogin']           = 'Condizione SQL per filtrare gli utenti in base al nome di accesso';
+$lang['FilterName']            = 'Condizione SQL per filtrare gli utenti in base al nome completo';
+$lang['FilterEmail']           = 'Condizione SQL per filtrare gli utenti in base all\'indirizzo e-mail';
+$lang['FilterGroup']           = 'Condizione SQL per filtrare gli utenti in base al gruppo di appartenenza';
+$lang['SortOrder']             = 'Condizione SQL per ordinare gli utenti';
+$lang['addUser']               = 'Istruzione SQL per aggiungere un nuovo utente';
+$lang['addGroup']              = 'Istruzione SQL per aggiungere un nuovo gruppo';
+$lang['addUserGroup']          = 'Istruzione SQL per aggiungere un utente ad un gruppo esistente';
+$lang['delGroup']              = 'Istruzione SQL per imuovere un gruppo';
+$lang['getUserID']             = 'Istruzione SQL per recuperare la primary key di un utente';
+$lang['delUser']               = 'Istruzione SQL per cancellare un utente';
+$lang['delUserRefs']           = 'Istruzione SQL per rimuovere un utente da tutti i gruppi';
+$lang['updateUser']            = 'Istruzione SQL per aggiornare il profilo utente';
+$lang['UpdateLogin']           = 'Condizione SQL per aggiornare il nome di accesso dell\'utente';
+$lang['UpdatePass']            = 'Condizione SQL per aggiornare la password utente';
+$lang['UpdateEmail']           = 'Condizione SQL per aggiornare l\'e-mail utente';
+$lang['UpdateName']            = 'Condizione SQL per aggiornare il nome completo dell\'utente';
+$lang['UpdateTarget']          = 'Condizione SQL per identificare l\'utente quando aggiornato';
+$lang['delUserGroup']          = 'Istruzione SQL per rimuovere un utente da un dato gruppo';
+$lang['getGroupID']            = 'Istruzione SQL per avere la primary key di un dato gruppo';
diff --git a/lib/plugins/authpgsql/lang/ja/settings.php b/lib/plugins/authpgsql/lang/ja/settings.php
index d7a5f6cf26540e70074e2edf70773f1daf224007..c4a82a1790747883333692d4c388d649cf9bfbeb 100644
--- a/lib/plugins/authpgsql/lang/ja/settings.php
+++ b/lib/plugins/authpgsql/lang/ja/settings.php
@@ -11,7 +11,7 @@ $lang['user']                  = 'PostgreSQL 接続用ユーザー名';
 $lang['password']              = 'PostgreSQL 接続用ユーザーのパスワード';
 $lang['database']              = '使用するデータベース名';
 $lang['debug']                 = 'デバック情報を表示する';
-$lang['forwardClearPass']      = '以下で定義する SQL ステートメントにおいて, パスワード変数 &#x25;{pass} を平文とする(DokiWiki側で暗号化しない)';
+$lang['forwardClearPass']      = '以下で定義する SQL ステートメントにおいて, パスワード変数 を平文とする(DokiWiki側で暗号化しない)';
 $lang['checkPass']             = 'パスワードの照合に用いる SQL ステートメント';
 $lang['getUserInfo']           = 'ユーザー情報の取得に用いる SQL ステートメント';
 $lang['getGroups']             = 'ユーザーが所属する全てのグループの取得に用いる SQL ステートメント';
diff --git a/lib/plugins/authpgsql/lang/ru/settings.php b/lib/plugins/authpgsql/lang/ru/settings.php
index 2af2991723b1b2157472cc1044a58808c0709135..a74296ab8ee1daadefb9fcd2b391dcf5da310da1 100644
--- a/lib/plugins/authpgsql/lang/ru/settings.php
+++ b/lib/plugins/authpgsql/lang/ru/settings.php
@@ -8,6 +8,7 @@
  * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
  * @author Vitaly Filatenko <kot@hacktest.net>
  * @author Type-kun <workwork-1@yandex.ru>
+ * @author Alex P <alexander@lanos.co.uk>
  */
 $lang['server']                = 'Ваш PostgreSQL-сервер';
 $lang['port']                  = 'Порт вашего PostgreSQL-сервера';
@@ -15,6 +16,7 @@ $lang['user']                  = 'Имя пользователя PostgreSQL';
 $lang['password']              = 'Пароль для указанного пользователя';
 $lang['database']              = 'Имя базы данных';
 $lang['debug']                 = 'Отображать дополнительную отладочную информацию';
+$lang['forwardClearPass']      = 'Передать чистым текстом ползовательские пароли в SQL запросы ниже, вместо использование опции passcrypt';
 $lang['checkPass']             = 'Выражение SQL, осуществляющее проверку пароля';
 $lang['getUserInfo']           = 'Выражение SQL, осуществляющее извлечение информации о пользователе';
 $lang['getGroups']             = 'Выражение SQL, осуществляющее извлечение информации о членстве пользователе в группах';
diff --git a/lib/plugins/authpgsql/plugin.info.txt b/lib/plugins/authpgsql/plugin.info.txt
index 59b7d89a9839533607216fcb52ae9ccaa9435141..1d53ca0b1f4e9e18908e8c13602f257a2b3403da 100644
--- a/lib/plugins/authpgsql/plugin.info.txt
+++ b/lib/plugins/authpgsql/plugin.info.txt
@@ -1,7 +1,7 @@
 base   authpgsql
 author Andreas Gohr
 email  andi@splitbrain.org
-date   2014-02-15
+date   2015-07-13
 name   PostgreSQL Auth Plugin
 desc   Provides user authentication against a PostgreSQL database
 url    http://www.dokuwiki.org/plugin:authpgsql
diff --git a/lib/plugins/authplain/_test/escaping.test.php b/lib/plugins/authplain/_test/escaping.test.php
index e1eade8d4c273666fbc80bac11516f8402a3e593..7139aa99b0b2bcc684588ef8c0c39f4a518a0539 100644
--- a/lib/plugins/authplain/_test/escaping.test.php
+++ b/lib/plugins/authplain/_test/escaping.test.php
@@ -9,7 +9,9 @@
  * authplain won't get unexpectedly surprised.)
  *
  * @group plugin_authplain
+ * @group auth_plugins
  * @group plugins
+ * @group bundled_plugins
  */
 class helper_plugin_authplain_escaping_test extends DokuWikiTest {
 
diff --git a/lib/plugins/authplain/auth.php b/lib/plugins/authplain/auth.php
index b31c02fc8634237f9f9859385b3264380e179d1a..8ec632dada62424a5a847ce3c36d9bd9833ae6e9 100644
--- a/lib/plugins/authplain/auth.php
+++ b/lib/plugins/authplain/auth.php
@@ -134,7 +134,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
         global $config_cascade;
 
         // user mustn't already exist
-        if($this->getUserData($user) !== false) return false;
+        if($this->getUserData($user) !== false) {
+            msg($this->getLang('userexists'), -1);
+            return false;
+        }
 
         $pass = auth_cryptPassword($pwd);
 
@@ -144,16 +147,13 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
         // prepare user line
         $userline = $this->_createUserLine($user, $pass, $name, $mail, $grps);
 
-        if(io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) {
-            $this->users[$user] = compact('pass', 'name', 'mail', 'grps');
-            return $pwd;
+        if(!io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) {
+            msg($this->getLang('writefail'), -1);
+            return null;
         }
 
-        msg(
-            'The '.$config_cascade['plainauth.users']['default'].
-                ' file is not writable. Please inform the Wiki-Admin', -1
-        );
-        return null;
+        $this->users[$user] = compact('pass', 'name', 'mail', 'grps');
+        return $pwd;
     }
 
     /**
@@ -169,7 +169,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
         global $config_cascade;
 
         // sanity checks, user must already exist and there must be something to change
-        if(($userinfo = $this->getUserData($user)) === false) return false;
+        if(($userinfo = $this->getUserData($user)) === false) {
+            msg($this->getLang('usernotexists'), -1);
+            return false;
+        }
         if(!is_array($changes) || !count($changes)) return true;
 
         // update userinfo with new data, remembering to encrypt any password
@@ -185,14 +188,9 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
 
         $userline = $this->_createUserLine($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $userinfo['grps']);
 
-        if(!$this->deleteUsers(array($user))) {
-            msg('Unable to modify user data. Please inform the Wiki-Admin', -1);
-            return false;
-        }
-
-        if(!io_saveFile($config_cascade['plainauth.users']['default'], $userline, true)) {
-            msg('There was an error modifying your user data. You should register again.', -1);
-            // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page
+        if(!io_replaceInFile($config_cascade['plainauth.users']['default'], '/^'.$user.':/', $userline, true)) {
+            msg('There was an error modifying your user data. You may need to register again.', -1);
+            // FIXME, io functions should be fail-safe so existing data isn't lost
             $ACT = 'register';
             return false;
         }
@@ -223,7 +221,10 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
         if(empty($deleted)) return 0;
 
         $pattern = '/^('.join('|', $deleted).'):/';
-        io_deleteFromFile($config_cascade['plainauth.users']['default'], $pattern, true);
+        if (!io_deleteFromFile($config_cascade['plainauth.users']['default'], $pattern, true)) {
+            msg($this->getLang('writefail'), -1);
+            return 0;
+        }
 
         // reload the user list and count the difference
         $count = count($this->users);
@@ -407,4 +408,4 @@ class auth_plugin_authplain extends DokuWiki_Auth_Plugin {
             $this->_pattern[$item] = '/'.str_replace('/', '\/', $pattern).'/i'; // allow regex characters
         }
     }
-}
\ No newline at end of file
+}
diff --git a/lib/plugins/authplain/lang/af/lang.php b/lib/plugins/authplain/lang/af/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..29742cfd2062078ee4a93af2200dca3c1d8b535b
--- /dev/null
+++ b/lib/plugins/authplain/lang/af/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Die gebruikersnaam wat jy gebruik het, is alreeds gebruik. Kies asseblief \'n ander gebruikersnaam.';
diff --git a/lib/plugins/authplain/lang/ar/lang.php b/lib/plugins/authplain/lang/ar/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..16d59f397a0a9c9aab1f2c835a4e50a29af05573
--- /dev/null
+++ b/lib/plugins/authplain/lang/ar/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'عذرا، يوجد مشترك بنفس الاسم.';
diff --git a/lib/plugins/authplain/lang/az/lang.php b/lib/plugins/authplain/lang/az/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..f98eccde17c5136f3117c2edfcdcb33f1ee291d0
--- /dev/null
+++ b/lib/plugins/authplain/lang/az/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Təssüf ki bu ad ilə istifadəçi artıq mövcuddur.';
diff --git a/lib/plugins/authplain/lang/bg/lang.php b/lib/plugins/authplain/lang/bg/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..62e62dc134d4b461e604d2b453168f0e62fce634
--- /dev/null
+++ b/lib/plugins/authplain/lang/bg/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Kiril <neohidra@gmail.com>
+ */
+$lang['userexists']            = 'Вече съществува потребител с избраното име.';
+$lang['usernotexists']         = 'За съжаление потребителят не съществува.';
diff --git a/lib/plugins/authplain/lang/bn/lang.php b/lib/plugins/authplain/lang/bn/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..43fe4ca6ec28fb1fcabe09873819dbfa0d8787c4
--- /dev/null
+++ b/lib/plugins/authplain/lang/bn/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'দুঃখিত, এই লগইন সঙ্গে একটি ব্যবহারকারী ইতিমধ্যেই বিদ্যমান.';
diff --git a/lib/plugins/authplain/lang/ca-valencia/lang.php b/lib/plugins/authplain/lang/ca-valencia/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e973beaef57c467e9797152a9e103bb50ddf2ba
--- /dev/null
+++ b/lib/plugins/authplain/lang/ca-valencia/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Disculpe, pero ya existix un usuari en este nom.';
diff --git a/lib/plugins/authplain/lang/ca/lang.php b/lib/plugins/authplain/lang/ca/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8cbada1b92e15c66d480f501893e73c811d39640
--- /dev/null
+++ b/lib/plugins/authplain/lang/ca/lang.php
@@ -0,0 +1,7 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ */
+$lang['userexists']            = 'Ja existeix un altre usuari amb aquest nom.';
diff --git a/lib/plugins/authplain/lang/cs/lang.php b/lib/plugins/authplain/lang/cs/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..852a3004481495458a117afe4bd06097a6df5e04
--- /dev/null
+++ b/lib/plugins/authplain/lang/cs/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['userexists']            = 'Uživatel se stejným jménem už je zaregistrován.';
+$lang['usernotexists']         = 'Omlouváme se, uživatel tohoto jména neexistuje.';
+$lang['writefail']             = 'Nelze změnit údaje uživatele. Informujte prosím správce wiki';
diff --git a/lib/plugins/authplain/lang/cy/lang.php b/lib/plugins/authplain/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f789e5291008112af69f7133e05fd99a6eba5b2
--- /dev/null
+++ b/lib/plugins/authplain/lang/cy/lang.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Sori, mae defnyddiwr gyda\'r enw hwnnw eisoes yn bodoli.';
+$lang['usernotexists']  = 'Sori, \'dyw\'r defnyddiwr hwnnw ddim yn bodoli.';
+$lang['writefail']      = 'Methu â newid data defnyddiwr. Rhowch wybod i Weinydd y Wici';
diff --git a/lib/plugins/authplain/lang/da/lang.php b/lib/plugins/authplain/lang/da/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7dd376c1771fa6c2b3aea91dbb61f67cabb3d9a
--- /dev/null
+++ b/lib/plugins/authplain/lang/da/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Dette brugernavn er allerede i brug.';
diff --git a/lib/plugins/authplain/lang/de-informal/lang.php b/lib/plugins/authplain/lang/de-informal/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..f1d484947f1ab0244c6252b2ecf68cbf4d7a612c
--- /dev/null
+++ b/lib/plugins/authplain/lang/de-informal/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Der Benutzername existiert leider schon.';
diff --git a/lib/plugins/authplain/lang/de/lang.php b/lib/plugins/authplain/lang/de/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..b0cff006860828827a6d89aa9440780428b0f643
--- /dev/null
+++ b/lib/plugins/authplain/lang/de/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+$lang['userexists']            = 'Der Benutzername existiert leider schon.';
+$lang['usernotexists']         = 'Dieser Benutzer existiert nicht.';
+$lang['writefail']             = 'Kann Benutzerdaten nicht ändern. Bitte informieren Sie den Wiki-Administratoren';
diff --git a/lib/plugins/authplain/lang/el/lang.php b/lib/plugins/authplain/lang/el/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f7e4e76dc617a654a18a61c7ae159df000f616f
--- /dev/null
+++ b/lib/plugins/authplain/lang/el/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Αυτός ο λογαριασμός υπάρχει ήδη.';
diff --git a/lib/plugins/authplain/lang/en/lang.php b/lib/plugins/authplain/lang/en/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..6f8abfdb6cbf70ad9ff6faf10529f45fb4cf18e8
--- /dev/null
+++ b/lib/plugins/authplain/lang/en/lang.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Sorry, a user with this login already exists.';
+$lang['usernotexists']  = 'Sorry, that user doesn\'t exist.';
+$lang['writefail']      = 'Unable to modify user data. Please inform the Wiki-Admin';
diff --git a/lib/plugins/authplain/lang/eo/lang.php b/lib/plugins/authplain/lang/eo/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab7655e818a5c4875b9a94c8dd398f43bca13be3
--- /dev/null
+++ b/lib/plugins/authplain/lang/eo/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Pardonu, ĉi tiu uzanto-nomo jam ekzistas.';
diff --git a/lib/plugins/authplain/lang/es/lang.php b/lib/plugins/authplain/lang/es/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ef567a16697154f9759166d34c168d3beef909c
--- /dev/null
+++ b/lib/plugins/authplain/lang/es/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Domingo Redal <docxml@gmail.com>
+ */
+$lang['userexists']            = 'Lo siento, ya existe un usuario con este nombre.';
+$lang['usernotexists']         = 'Lo sentimos, no existe ese usuario.';
+$lang['writefail']             = 'No es posible modificar los datos del usuario. Por favor, informa al Administrador del Wiki';
diff --git a/lib/plugins/authplain/lang/et/lang.php b/lib/plugins/authplain/lang/et/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f9f7771bf9521ff51f31a82bffab04bcef89c73
--- /dev/null
+++ b/lib/plugins/authplain/lang/et/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Tegelikult on sellise nimega kasutaja juba olemas.';
diff --git a/lib/plugins/authplain/lang/eu/lang.php b/lib/plugins/authplain/lang/eu/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..09ca4d3b77ab859ec7073ddb99e9747ad155728e
--- /dev/null
+++ b/lib/plugins/authplain/lang/eu/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Barkatu, izen bereko erabiltzailea existitzen da.';
diff --git a/lib/plugins/authplain/lang/fa/lang.php b/lib/plugins/authplain/lang/fa/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..c222927dbdeb551a8e10ff6937fb1c32ff0aeba9
--- /dev/null
+++ b/lib/plugins/authplain/lang/fa/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
+ */
+$lang['userexists']            = 'نام کاربری‌ای که وارد کردید قبلن استفاده شده است. خواهشمندیم یک نام دیگر انتخاب کنید.';
+$lang['usernotexists']         = 'متاسفانه این کاربر وجود ندارد.';
+$lang['writefail']             = 'امکان ویرایش اطلاعات کاربر وجود ندارد. لطفا ادمین ویکی را مطلع نمایید.';
diff --git a/lib/plugins/authplain/lang/fi/lang.php b/lib/plugins/authplain/lang/fi/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3a77f3e3ae7176a4d8c82e78539f158ffe4fc3f2
--- /dev/null
+++ b/lib/plugins/authplain/lang/fi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Käyttäjä tällä käyttäjänimellä on jo olemassa.';
diff --git a/lib/plugins/authplain/lang/fo/lang.php b/lib/plugins/authplain/lang/fo/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..a9654664b2f2fb195583b4b2c195c5548aa4bca5
--- /dev/null
+++ b/lib/plugins/authplain/lang/fo/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Hetta brúkaranavn er upptiki.';
diff --git a/lib/plugins/authplain/lang/fr/lang.php b/lib/plugins/authplain/lang/fr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..362e03bffeeb4e9980b3057ea68091f1cc5bc389
--- /dev/null
+++ b/lib/plugins/authplain/lang/fr/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Carbain Frédéric <fcarbain@yahoo.fr>
+ * @author Nicolas Friedli <nicolas@theologique.ch>
+ */
+$lang['userexists']            = 'Désolé, ce nom d\'utilisateur est déjà pris.';
+$lang['usernotexists']         = 'Désolé, cet utilisateur n\'existe pas.';
+$lang['writefail']             = 'Impossible de modifier les données utilisateur. Merci d\'en informer l\'administrateur du wiki.';
diff --git a/lib/plugins/authplain/lang/gl/lang.php b/lib/plugins/authplain/lang/gl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..35138d3788d747060754d4d390848c8a1f924fda
--- /dev/null
+++ b/lib/plugins/authplain/lang/gl/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Sentímolo, mais xa existe un usuario con ese nome.';
diff --git a/lib/plugins/authplain/lang/he/lang.php b/lib/plugins/authplain/lang/he/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..160968edd26c10446374f8cb35a78617a3a440b2
--- /dev/null
+++ b/lib/plugins/authplain/lang/he/lang.php
@@ -0,0 +1,7 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ */
+$lang['userexists']            = 'משתמש בשם זה כבר נרשם, עמך הסליחה.';
diff --git a/lib/plugins/authplain/lang/hr/lang.php b/lib/plugins/authplain/lang/hr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ffcbf5f61ebb2c1cdfddf9f9a03402288a6c8a24
--- /dev/null
+++ b/lib/plugins/authplain/lang/hr/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Korisnik s tim korisničkim imenom već postoji.';
diff --git a/lib/plugins/authplain/lang/hu/lang.php b/lib/plugins/authplain/lang/hu/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5f684d722c2a087516e0667119c153db76db8651
--- /dev/null
+++ b/lib/plugins/authplain/lang/hu/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Marton Sebok <sebokmarton@gmail.com>
+ */
+$lang['userexists']            = 'Sajnáljuk, ilyen azonosítójú felhasználónk már van.';
+$lang['usernotexists']         = 'Sajnos ez a felhasználó nem létezik.';
+$lang['writefail']             = 'A felhasználói adatok módosítása sikertelen. Kérlek, fordulj a wiki rendszergazdájához!';
diff --git a/lib/plugins/authplain/lang/ia/lang.php b/lib/plugins/authplain/lang/ia/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7596f3f4c21dd7de9fd004df09a0b1bcbbfc20c0
--- /dev/null
+++ b/lib/plugins/authplain/lang/ia/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Regrettabilemente, un usator con iste nomine ja existe.';
diff --git a/lib/plugins/authplain/lang/id-ni/lang.php b/lib/plugins/authplain/lang/id-ni/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..729c9f9dcb5b26a0eb4a2368e7b82638f42a0441
--- /dev/null
+++ b/lib/plugins/authplain/lang/id-ni/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Bologö dödöu, no so zangoguna\'ö töi da\'a.';
diff --git a/lib/plugins/authplain/lang/id/lang.php b/lib/plugins/authplain/lang/id/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5e6a99830f921969099a7af7354c095a46513efc
--- /dev/null
+++ b/lib/plugins/authplain/lang/id/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Maaf, user dengan user login ini telah ada.';
diff --git a/lib/plugins/authplain/lang/is/lang.php b/lib/plugins/authplain/lang/is/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..21392ee5e715c5a2407040fe06a40918ed1bd5d1
--- /dev/null
+++ b/lib/plugins/authplain/lang/is/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Afsakið, notandi með þessu nafni er þegar skráður inn.';
diff --git a/lib/plugins/authplain/lang/it/lang.php b/lib/plugins/authplain/lang/it/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..59c8c30764198b7e1595490b998281297c3c64a1
--- /dev/null
+++ b/lib/plugins/authplain/lang/it/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Torpedo <dgtorpedo@gmail.com>
+ */
+$lang['userexists']            = 'Il nome utente inserito esiste già.';
+$lang['usernotexists']         = 'Spiacente, quell\'utente non esiste.';
+$lang['writefail']             = 'Impossibile modificare i dati utente. Per favore informa l\'Amministratore del Wiki';
diff --git a/lib/plugins/authplain/lang/ja/lang.php b/lib/plugins/authplain/lang/ja/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..6aa0be79c895836599852df27b75e91c79a94bf4
--- /dev/null
+++ b/lib/plugins/authplain/lang/ja/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Hideaki SAWADA <chuno@live.jp>
+ */
+$lang['userexists']            = 'このユーザー名は既に存在しています。';
+$lang['usernotexists']         = 'このユーザーは未登録です。';
+$lang['writefail']             = 'ユーザーデータを変更できません。管理者に問い合わせてください。';
diff --git a/lib/plugins/authplain/lang/ka/lang.php b/lib/plugins/authplain/lang/ka/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8983791c98d2077c1dfaa5ac5e591cc430f7b674
--- /dev/null
+++ b/lib/plugins/authplain/lang/ka/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'მსგავსი ლოგინი უკვე არსებობს';
diff --git a/lib/plugins/authplain/lang/kk/lang.php b/lib/plugins/authplain/lang/kk/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..95fe532045c9b7a13eac1d6d8e812edcf8d8e856
--- /dev/null
+++ b/lib/plugins/authplain/lang/kk/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Кешіріңіз, бұл түпнұскамен де пайдаланушы бар.';
diff --git a/lib/plugins/authplain/lang/km/lang.php b/lib/plugins/authplain/lang/km/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..322e454e50052e5337c798055d4776e2241965fb
--- /dev/null
+++ b/lib/plugins/authplain/lang/km/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'សុំអាទោស​ នាមប្រើនេះមានរួចហើ។';
diff --git a/lib/plugins/authplain/lang/ko/lang.php b/lib/plugins/authplain/lang/ko/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..50669822eda401435f32971faf7846714f0e6c00
--- /dev/null
+++ b/lib/plugins/authplain/lang/ko/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['userexists']            = '죄송하지만 같은 이름을 사용하는 사용자가 있습니다.';
+$lang['usernotexists']         = '죄송하지만 해당 사용자가 존재하지 않습니다.';
+$lang['writefail']             = '사용자 데이터를 수정할 수 없습니다. 위키 관리자에게 문의하시기 바랍니다';
diff --git a/lib/plugins/authplain/lang/ku/lang.php b/lib/plugins/authplain/lang/ku/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..64cb834f30e8a9a9179bc23423566bf652a072cd
--- /dev/null
+++ b/lib/plugins/authplain/lang/ku/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Sorry, a user with this login already exists.';
diff --git a/lib/plugins/authplain/lang/la/lang.php b/lib/plugins/authplain/lang/la/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5f2eecfd826981f334984b33863d5d3ccb92e9ef
--- /dev/null
+++ b/lib/plugins/authplain/lang/la/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Nomen Sodalis ab aliquo iam elegitur.';
diff --git a/lib/plugins/authplain/lang/lb/lang.php b/lib/plugins/authplain/lang/lb/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..4c760dfe40e77b47d7bc1ca47ad0dc8476eb81fc
--- /dev/null
+++ b/lib/plugins/authplain/lang/lb/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Et get schonn e Benotzer mat deem Numm.';
diff --git a/lib/plugins/authplain/lang/lt/lang.php b/lib/plugins/authplain/lang/lt/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ad435a045536f64c5bbd1e28c91767d21ea2b32
--- /dev/null
+++ b/lib/plugins/authplain/lang/lt/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Vartotojas su pasirinktu prisijungimo vardu jau egzistuoja.';
diff --git a/lib/plugins/authplain/lang/lv/lang.php b/lib/plugins/authplain/lang/lv/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3a9d4d3e5c5b249267dd23032a73e9b3d79bf5e1
--- /dev/null
+++ b/lib/plugins/authplain/lang/lv/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Atvaino, tāds lietotājs jau ir.';
diff --git a/lib/plugins/authplain/lang/mg/lang.php b/lib/plugins/authplain/lang/mg/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8472161b7825f179f38b2fef3c98a832d2d5efe3
--- /dev/null
+++ b/lib/plugins/authplain/lang/mg/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Indrisy fa efa nisy namandrika io anarana io.';
diff --git a/lib/plugins/authplain/lang/mk/lang.php b/lib/plugins/authplain/lang/mk/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ebb9fab85396eaca48bfbd0cb6d60fe4ff1af10
--- /dev/null
+++ b/lib/plugins/authplain/lang/mk/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Жалам, корисник со ова корисничко име веќе постои.';
diff --git a/lib/plugins/authplain/lang/mr/lang.php b/lib/plugins/authplain/lang/mr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..15dcf18a065fd2e707a6999b78e6831b2f84fad9
--- /dev/null
+++ b/lib/plugins/authplain/lang/mr/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'या नावाने सदस्याची नोंदणी झालेली आहे, कृपया दुसरे सदस्य नाव निवडा.';
diff --git a/lib/plugins/authplain/lang/ms/lang.php b/lib/plugins/authplain/lang/ms/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..14c3b11af92d7b79e4bfbbb767f7543ea89ca2bf
--- /dev/null
+++ b/lib/plugins/authplain/lang/ms/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Maaf, nama pengguna yang dimasukkan telah diguna. Sila pilih nama yang lain.';
diff --git a/lib/plugins/authplain/lang/ne/lang.php b/lib/plugins/authplain/lang/ne/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..94275785574b32dc0f79b3c9bc68f546cad26dd9
--- /dev/null
+++ b/lib/plugins/authplain/lang/ne/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'यो नामको प्रयोगकर्ता पहिले देखि रहेको छ।';
diff --git a/lib/plugins/authplain/lang/nl/lang.php b/lib/plugins/authplain/lang/nl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..56ba2ab90318d0f95adf53fa88f61dcaf22293ea
--- /dev/null
+++ b/lib/plugins/authplain/lang/nl/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Hugo Smet <hugo.smet@scarlet.be>
+ */
+$lang['userexists']            = 'Er bestaat al een gebruiker met deze loginnaam.';
+$lang['usernotexists']         = 'Sorry, deze gebruiker bestaat niet.';
+$lang['writefail']             = 'Onmogelijk om de gebruikers data te wijzigen. Gelieve de Wiki-Admin te informeren.';
diff --git a/lib/plugins/authplain/lang/no/lang.php b/lib/plugins/authplain/lang/no/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..981881369f35257aaf386a045587916b5ccce6ea
--- /dev/null
+++ b/lib/plugins/authplain/lang/no/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Det finnes allerede en konto med dette brukernavnet.';
diff --git a/lib/plugins/authplain/lang/pl/lang.php b/lib/plugins/authplain/lang/pl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..9a61b004764ff7030cd900587206b284a9b1bcb8
--- /dev/null
+++ b/lib/plugins/authplain/lang/pl/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Użytkownik o tej nazwie już istnieje.';
diff --git a/lib/plugins/authplain/lang/pt-br/lang.php b/lib/plugins/authplain/lang/pt-br/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..654ec2b801218b3895b9967ab7c5d47238d59881
--- /dev/null
+++ b/lib/plugins/authplain/lang/pt-br/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ */
+$lang['userexists']            = 'Desculpe, mas já existe um usuário com esse nome.';
+$lang['usernotexists']         = 'Desculpe, mas esse usuário não existe.';
+$lang['writefail']             = 'Não foi possível modificar os dados do usuário. Por favor, informe ao administrador do Wiki.';
diff --git a/lib/plugins/authplain/lang/pt/lang.php b/lib/plugins/authplain/lang/pt/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..26d4180c5bcca0ab2272ad99477199681cee5463
--- /dev/null
+++ b/lib/plugins/authplain/lang/pt/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Paulo Carmino <contato@paulocarmino.com>
+ */
+$lang['userexists']            = 'Este utilizador já está inscrito. Por favor escolha outro nome de utilizador.';
+$lang['usernotexists']         = 'Desculpe, esse login não existe.';
diff --git a/lib/plugins/authplain/lang/ro/lang.php b/lib/plugins/authplain/lang/ro/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..eb243a12f4bf45e2f95ad8ede358450786a90b0c
--- /dev/null
+++ b/lib/plugins/authplain/lang/ro/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Ne pare rău, un utilizator cu acest nume este deja autentificat.';
diff --git a/lib/plugins/authplain/lang/ru/lang.php b/lib/plugins/authplain/lang/ru/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..a53a57b40bbdb9ee2b1ba86e3b5ff36da5d21a08
--- /dev/null
+++ b/lib/plugins/authplain/lang/ru/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author RainbowSpike <1@2.ru>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ */
+$lang['userexists']            = 'Извините, пользователь с таким логином уже существует.';
+$lang['usernotexists']         = 'Этот пользователь не зарегистрирован.';
+$lang['writefail']             = 'Невозможно обновить данные пользователя. Свяжитесь с администратором вики';
diff --git a/lib/plugins/authplain/lang/sk/lang.php b/lib/plugins/authplain/lang/sk/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..46ce389f3d38f5534f5a3d3ca5671cd3c9e6696f
--- /dev/null
+++ b/lib/plugins/authplain/lang/sk/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['userexists']            = 'Užívateľ s rovnakým menom je už zaregistrovaný.';
+$lang['writefail']             = 'Nie je možné zmeniť údaje používateľa, informujte prosím administrátora Wiki.';
diff --git a/lib/plugins/authplain/lang/sl/lang.php b/lib/plugins/authplain/lang/sl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..d4ee30fda514aadd47e958be644251b755dfe5f3
--- /dev/null
+++ b/lib/plugins/authplain/lang/sl/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Uporabnik s tem imenom že obstaja.';
diff --git a/lib/plugins/authplain/lang/sq/lang.php b/lib/plugins/authplain/lang/sq/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..e3a93502f0f8e6c4aa4edc7d50ee790f4bd334c0
--- /dev/null
+++ b/lib/plugins/authplain/lang/sq/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Na vjen keq, ekziston një përdorues tjetër me të njëjtin emër.';
diff --git a/lib/plugins/authplain/lang/sr/lang.php b/lib/plugins/authplain/lang/sr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d85ca42a1f52092e610789eac66d75b22f60967
--- /dev/null
+++ b/lib/plugins/authplain/lang/sr/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Извините, корисник са истим именом већ постоји.';
diff --git a/lib/plugins/authplain/lang/sv/lang.php b/lib/plugins/authplain/lang/sv/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..fb80df956601d67ecb91d4590edf3145db660688
--- /dev/null
+++ b/lib/plugins/authplain/lang/sv/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Det finns redan en användare med det användarnamnet.';
diff --git a/lib/plugins/authplain/lang/th/lang.php b/lib/plugins/authplain/lang/th/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..463a2799296a1e466e78046ef86fa924ddc1d5c6
--- /dev/null
+++ b/lib/plugins/authplain/lang/th/lang.php
@@ -0,0 +1,7 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ */
+$lang['userexists']            = 'ชื่อบัญชีที่ใส่นั้นมีผู้อื่นได้ใช้แล้ว กรุณาเลือกชื่อผู้ใช้อื่น';
diff --git a/lib/plugins/authplain/lang/tr/lang.php b/lib/plugins/authplain/lang/tr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..6111085c21cc607f148ea14327bbe0f324e19a0a
--- /dev/null
+++ b/lib/plugins/authplain/lang/tr/lang.php
@@ -0,0 +1,7 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ */
+$lang['userexists']            = 'Üzgünüz, bu isime sahip bir kullanıcı zaten mevcut.';
diff --git a/lib/plugins/authplain/lang/uk/lang.php b/lib/plugins/authplain/lang/uk/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8a796870facee443e46266b50ea9ccc35402c110
--- /dev/null
+++ b/lib/plugins/authplain/lang/uk/lang.php
@@ -0,0 +1,7 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ */
+$lang['userexists']            = 'Користувач з таким іменем вже існує.';
diff --git a/lib/plugins/authplain/lang/vi/lang.php b/lib/plugins/authplain/lang/vi/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7ecb0a27cff5728cc084649f0219da11728c5b25
--- /dev/null
+++ b/lib/plugins/authplain/lang/vi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ */
+$lang['userexists']     = 'Bạn khác đã dùng username này rồi.';
diff --git a/lib/plugins/authplain/lang/zh-tw/lang.php b/lib/plugins/authplain/lang/zh-tw/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..39578f52da79cc9f99a53b39d741164a760e686e
--- /dev/null
+++ b/lib/plugins/authplain/lang/zh-tw/lang.php
@@ -0,0 +1,7 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ */
+$lang['userexists']            = '很抱歉,有人已使用了這個帳號。';
diff --git a/lib/plugins/authplain/lang/zh/lang.php b/lib/plugins/authplain/lang/zh/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..3dcebd28dbe22f01ae1b8d6528e678cd29a31cf6
--- /dev/null
+++ b/lib/plugins/authplain/lang/zh/lang.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['userexists']            = '对不起,该用户名已经存在。';
+$lang['usernotexists']         = '抱歉,该用户不存在';
+$lang['writefail']             = '无法修改用户数据。请联系维基管理员';
diff --git a/lib/plugins/authplain/plugin.info.txt b/lib/plugins/authplain/plugin.info.txt
index 2659ac7ad5c38cb121caede91f3a1a6a9c7381cd..c09dbcb34bc281eb8c2de9c3d47c86d8d5e0d5e2 100644
--- a/lib/plugins/authplain/plugin.info.txt
+++ b/lib/plugins/authplain/plugin.info.txt
@@ -1,7 +1,7 @@
 base   authplain
 author Andreas Gohr
 email  andi@splitbrain.org
-date   2014-07-01
+date   2015-07-18
 name   Plain Auth Plugin
 desc   Provides user authentication against DokuWiki's local password storage
 url    http://www.dokuwiki.org/plugin:authplain
diff --git a/lib/plugins/config/_test/configuration.test.php b/lib/plugins/config/_test/configuration.test.php
index b808ad505844c8cf2cc5e1e9636fe8d41c8eec2e..6e9eb0cc6f4ea6f9303d84cfce78b12ee5944447 100644
--- a/lib/plugins/config/_test/configuration.test.php
+++ b/lib/plugins/config/_test/configuration.test.php
@@ -1,4 +1,10 @@
 <?php
+/**
+ * @group plugin_config
+ * @group admin_plugins
+ * @group plugins
+ * @group bundled_plugins
+ */
 
 class plugin_config_configuration_test extends DokuWikiTest {
 
diff --git a/lib/plugins/config/admin.php b/lib/plugins/config/admin.php
index 2ef570b682c0738880d19cc737818446af5ef53f..ec8ee0b842bf566a635754c554b86cb969383cec 100644
--- a/lib/plugins/config/admin.php
+++ b/lib/plugins/config/admin.php
@@ -212,8 +212,8 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
 
         if (!$this->_config->locked) {
             ptln('  <input type="hidden" name="save"   value="1" />');
-            ptln('  <input type="submit" name="submit" class="button" value="'.$lang['btn_save'].'" accesskey="s" />');
-            ptln('  <input type="reset" class="button" value="'.$lang['btn_reset'].'" />');
+            ptln('  <button type="submit" name="submit" accesskey="s">'.$lang['btn_save'].'</button>');
+            ptln('  <button type="reset">'.$lang['btn_reset'].'</button>');
         }
 
         ptln('</p>');
diff --git a/lib/plugins/config/images/danger.png b/lib/plugins/config/images/danger.png
index 7bd84f7a36dedfa8107314e54836462ab93e5f7a..da0692429e404d4620f23a496890f09f6c8fc8ec 100644
Binary files a/lib/plugins/config/images/danger.png and b/lib/plugins/config/images/danger.png differ
diff --git a/lib/plugins/config/images/security.png b/lib/plugins/config/images/security.png
index 1800f8e56b81fe93899caf3e79d840e83a66c0f2..3ee8476accd6ef3ae50b5b869d24446d1a7c60c6 100644
Binary files a/lib/plugins/config/images/security.png and b/lib/plugins/config/images/security.png differ
diff --git a/lib/plugins/config/images/warning.png b/lib/plugins/config/images/warning.png
index c5e482f84b3a140a062da69cd86d0a98019a8fcb..c1af79f0ffa5b8ebe561b8983fb0e843d8157e4d 100644
Binary files a/lib/plugins/config/images/warning.png and b/lib/plugins/config/images/warning.png differ
diff --git a/lib/plugins/config/lang/ar/intro.txt b/lib/plugins/config/lang/ar/intro.txt
index d447ec315eb66deb8fa0c874956759f94684545c..15905189f94bd5c9b7cf00826ace90a10af9e551 100644
--- a/lib/plugins/config/lang/ar/intro.txt
+++ b/lib/plugins/config/lang/ar/intro.txt
@@ -4,4 +4,4 @@
 
 الاعدادات الظاهرة بخلفية حمراء فاتحة اعدادات محمية ولا يمكن تغييرها بهذه الاضافة. الاعدادات الظاهرة بخلفية زرقاء هي القيم الافتراضية والاعدادات الظاهرة بخلفية بيضاء خصصت لهذا التثبيت محليا. الاعدادات الزرقاء والبيضاء يمكن تغييرها.
 
-تأكد من ضغط زر **SAVE** قبل ترك الصفحة وإلا ستضيع تعديلاتك.
\ No newline at end of file
+تأكد من ضغط زر **SAVE** قبل ترك الصفحة وإلا ستضيع تعديلاتك.
diff --git a/lib/plugins/config/lang/bg/lang.php b/lib/plugins/config/lang/bg/lang.php
index 64ddb1eae873a749a4f1d33c82b5123809b6531c..0426df0609c5a546e4a1368e61c978c6e31182b7 100644
--- a/lib/plugins/config/lang/bg/lang.php
+++ b/lib/plugins/config/lang/bg/lang.php
@@ -1,259 +1,195 @@
 <?php
+
 /**
- * bulgarian language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
  * @author Viktor Usunov <usun0v@mail.bg>
  * @author Kiril <neohidra@gmail.com>
  */
-
-// for admin plugins, the menu prompt to be displayed in the admin menu
-// if set here, the plugin doesn't need to override the getMenuText() method
-$lang['menu']       = 'Настройки';
-
-$lang['error']      = 'Обновяването на настройките не е възможно, поради невалидна стойност, моля, прегледайте промените си и пробвайте отново.
+$lang['menu']                  = 'Настройки';
+$lang['error']                 = 'Обновяването на настройките не е възможно, поради невалидна стойност, моля, прегледайте промените си и пробвайте отново.
                        <br />Неверните стойности ще бъдат обградени с червена рамка.';
-$lang['updated']    = 'Обновяването на настройките е успешно.';
-$lang['nochoice']   = '(няма друг възможен избор)';
-$lang['locked']     = 'Обновяването на файла с настройките не е възможно, ако това не е нарочно, проверете,<br />
+$lang['updated']               = 'Обновяването на настройките е успешно.';
+$lang['nochoice']              = '(няма друг възможен избор)';
+$lang['locked']                = 'Обновяването на файла с настройките не е възможно, ако това не е нарочно, проверете,<br />
                        дали името на локалния файл с настройки и правата са верни.';
-
-$lang['danger']     = 'Внимание: промяна на опцията може да направи Wiki-то и менюто за настройване недостъпни.';
-$lang['warning']    = 'Предупреждение: промяна на опцията може предизвика нежелани последици.';
-$lang['security']   = 'Предупреждение: промяна на опцията може да представлява риск за сигурността.';
-
-/* --- Config Setting Headers --- */
-$lang['_configuration_manager'] = 'Диспечер на настройките'; //same as heading in intro.txt
-$lang['_header_dokuwiki'] = 'Настройки на DokuWiki';
-$lang['_header_plugin']  = 'Настройки на приставки';
-$lang['_header_template'] = 'Настройки на шаблона';
-$lang['_header_undefined'] = 'Неопределени настройки';
-
-/* --- Config Setting Groups --- */
-$lang['_basic'] = 'Основни настройки';
-$lang['_display'] = 'Настройки за изобразяване';
-$lang['_authentication'] = 'Настройки за удостоверяване';
-$lang['_anti_spam'] = 'Настройки за борба със SPAM-ма';
-$lang['_editing'] = 'Настройки за редактиране';
-$lang['_links'] = 'Настройки на препратките';
-$lang['_media'] = 'Настройки на медията';
-$lang['_notifications'] = 'Настройки за известяване';
-$lang['_syndication']   = 'Настройки на RSS емисиите';
-$lang['_advanced'] = 'Допълнителни настройки';
-$lang['_network'] = 'Мрежови настройки';
-
-/* --- Undefined Setting Messages --- */
+$lang['danger']                = 'Внимание: промяна на опцията може да направи Wiki-то и менюто за настройване недостъпни.';
+$lang['warning']               = 'Предупреждение: промяна на опцията може предизвика нежелани последици.';
+$lang['security']              = 'Предупреждение: промяна на опцията може да представлява риск за сигурността.';
+$lang['_configuration_manager'] = 'Диспечер на настройките';
+$lang['_header_dokuwiki']      = 'Настройки на DokuWiki';
+$lang['_header_plugin']        = 'Настройки на приставки';
+$lang['_header_template']      = 'Настройки на шаблона';
+$lang['_header_undefined']     = 'Неопределени настройки';
+$lang['_basic']                = 'Основни настройки';
+$lang['_display']              = 'Настройки за изобразяване';
+$lang['_authentication']       = 'Настройки за удостоверяване';
+$lang['_anti_spam']            = 'Настройки за борба със SPAM-ма';
+$lang['_editing']              = 'Настройки за редактиране';
+$lang['_links']                = 'Настройки на препратките';
+$lang['_media']                = 'Настройки на медията';
+$lang['_notifications']        = 'Настройки за известяване';
+$lang['_syndication']          = 'Настройки на RSS емисиите';
+$lang['_advanced']             = 'Допълнителни настройки';
+$lang['_network']              = 'Мрежови настройки';
 $lang['_msg_setting_undefined'] = 'Няма метаданни за настройките.';
 $lang['_msg_setting_no_class'] = 'Няма клас настройки.';
 $lang['_msg_setting_no_default'] = 'Няма стандартна стойност.';
-
-/* -------------------- Config Options --------------------------- */
-
-/* Basic Settings */
-$lang['title']      = 'Заглавие за Wiki-то, тоест името';
-$lang['start']      = 'Име на началната страница';
-$lang['lang']       = 'Език на интерфейса';
-$lang['template']   = 'Шаблон (определя вида на страниците)';
-$lang['tagline']    = 'Подзаглавие - изобразява се под името на Wiki-то (ако се поддържа от шаблона)';
-$lang['sidebar']    = 'Име на страницата за страничната лента (ако се поддържа от шаблона). Оставите ли полето празно лентата ще бъде изключена';
-$lang['license']    = 'Под какъв лиценз да бъде публикувано съдържанието?';
-$lang['savedir']    = 'Директория за записване на данните';
-$lang['basedir']    = 'Главна директория (напр. <code>/dokuwiki/</code>). Оставете празно, за да бъде засечена автоматично.';
-$lang['baseurl']    = 'URL адрес (напр. <code>http://www.yourserver.com</code>). Оставете празно, за да бъде засечен автоматично.';
-$lang['cookiedir']  = 'Път за бисквитките. Оставите ли полето празно ще се ползва горния URL адрес.';
-$lang['dmode']      = 'Режим (права) за създаване на директории';
-$lang['fmode']      = 'Режим (права) за създаване на файлове';
-$lang['allowdebug'] = 'Включване на режи debug - <b>изключете, ако не е нужен!</b>';
-
-/* Display Settings */
-$lang['recent']      = 'Скорошни промени - брой елементи на страница';
-$lang['recent_days'] = 'Колко от скорошните промени да се пазят (дни)';
-$lang['breadcrumbs'] = 'Брой на следите. За изключване на функцията задайте 0.';
-$lang['youarehere']  = 'Йерархични следи (в този случай можете да изключите горната опция)';
-$lang['fullpath']    = 'Показване на пълния път до страниците в долния колонтитул.';
-$lang['typography']  = 'Замяна на последователност от символи с типографски еквивалент';
-$lang['dformat']     = 'Формат на датата (виж. <a href="http://www.php.net/strftime">strftime</a> функцията на PHP)';
-$lang['signature']   = 'Подпис - какво да внася бутона "Вмъкване на подпис" от редактора';
-$lang['showuseras']  = 'Какво да се показва за потребителя, който последно е променил дадена страницата';
-$lang['toptoclevel'] = 'Главно ниво (заглавие) за съдържанието';
-$lang['tocminheads'] = 'Минимален брой заглавия, определящ дали да бъде създадено съдържание';
-$lang['maxtoclevel'] = 'Максимален брой нива (заглавия) за включване в съдържанието';
-$lang['maxseclevel'] = 'Максимален брой нива предоставяни за самостоятелно редактиране';
-$lang['camelcase']   = 'Ползване на CamelCase за линкове';
-$lang['deaccent']    = 'Почистване имената на страниците (на файловете)';
-$lang['useheading']  = 'Ползване на първото заглавие за име на страница';
-$lang['sneaky_index'] = 'Стандартно DokuWiki ще показва всички именни пространства в индекса. Опцията скрива тези, за които потребителят няма права за четене. Това може да доведе и до скриване на иначе достъпни подименни пространства. С определени настройки на списъците за контрол на достъпа (ACL) може да направи индекса неизползваем. ';
-$lang['hidepages']   = 'Скриване на страниците съвпадащи с този регулярен израз(regular expressions)';
-
-/* Authentication Settings */
-$lang['useacl']      = 'Ползване на списъци за достъп';
-$lang['autopasswd']  = 'Автоматично генериране на пароли, на нови потребители и пращане по пощата';
-$lang['authtype']    = 'Метод за удостоверяване';
-$lang['passcrypt']   = 'Метод за криптиране на паролите';
-$lang['defaultgroup']= 'Стандартна група';
-$lang['superuser']   = 'Супер потребител -  група, потребител или списък със стойности разделени чрез запетая (user1,@group1,user2) с пълен достъп до всички страници и функции без значение от настройките на списъците за достъп (ACL)';
-$lang['manager']     = 'Управител - група, потребител или списък със стойности разделени чрез запетая (user1,@group1,user2) с достъп до определени управленски функции ';
-$lang['profileconfirm'] = 'Потвърждаване на промени в профила с парола';
-$lang['rememberme'] = 'Ползване на постоянни бисквитки за вписване (за функцията "Запомни ме")';
-$lang['disableactions'] = 'Изключване функции на DokuWiki';
-$lang['disableactions_check'] = 'Проверка';
+$lang['title']                 = 'Заглавие за Wiki-то, тоест името';
+$lang['start']                 = 'Име на началната страница';
+$lang['lang']                  = 'Език на интерфейса';
+$lang['template']              = 'Шаблон (определя вида на страниците)';
+$lang['tagline']               = 'Подзаглавие - изобразява се под името на Wiki-то (ако се поддържа от шаблона)';
+$lang['sidebar']               = 'Име на страницата за страничната лента (ако се поддържа от шаблона). Оставите ли полето празно лентата ще бъде изключена';
+$lang['license']               = 'Под какъв лиценз да бъде публикувано съдържанието?';
+$lang['savedir']               = 'Директория за записване на данните';
+$lang['basedir']               = 'Главна директория (напр. <code>/dokuwiki/</code>). Оставете празно, за да бъде засечена автоматично.';
+$lang['baseurl']               = 'URL адрес (напр. <code>http://www.yourserver.com</code>). Оставете празно, за да бъде засечен автоматично.';
+$lang['cookiedir']             = 'Път за бисквитките. Оставите ли полето празно ще се ползва горния URL адрес.';
+$lang['dmode']                 = 'Режим (права) за създаване на директории';
+$lang['fmode']                 = 'Режим (права) за създаване на файлове';
+$lang['allowdebug']            = 'Включване на режи debug - <b>изключете, ако не е нужен!</b>';
+$lang['recent']                = 'Скорошни промени - брой елементи на страница';
+$lang['recent_days']           = 'Колко от скорошните промени да се пазят (дни)';
+$lang['breadcrumbs']           = 'Брой на следите. За изключване на функцията задайте 0.';
+$lang['youarehere']            = 'Йерархични следи (в този случай можете да изключите горната опция)';
+$lang['fullpath']              = 'Показване на пълния път до страниците в долния колонтитул.';
+$lang['typography']            = 'Замяна на последователност от символи с типографски еквивалент';
+$lang['dformat']               = 'Формат на датата (виж. <a href="http://www.php.net/strftime">strftime</a> функцията на PHP)';
+$lang['signature']             = 'Подпис - какво да внася бутона "Вмъкване на подпис" от редактора';
+$lang['showuseras']            = 'Какво да се показва за потребителя, който последно е променил дадена страницата';
+$lang['toptoclevel']           = 'Главно ниво (заглавие) за съдържанието';
+$lang['tocminheads']           = 'Минимален брой заглавия, определящ дали да бъде създадено съдържание';
+$lang['maxtoclevel']           = 'Максимален брой нива (заглавия) за включване в съдържанието';
+$lang['maxseclevel']           = 'Максимален брой нива предоставяни за самостоятелно редактиране';
+$lang['camelcase']             = 'Ползване на CamelCase за линкове';
+$lang['deaccent']              = 'Почистване имената на страниците (на файловете)';
+$lang['useheading']            = 'Ползване на първото заглавие за име на страница';
+$lang['sneaky_index']          = 'Стандартно DokuWiki ще показва всички именни пространства в индекса. Опцията скрива тези, за които потребителят няма права за четене. Това може да доведе и до скриване на иначе достъпни подименни пространства. С определени настройки на списъците за контрол на достъпа (ACL) може да направи индекса неизползваем. ';
+$lang['hidepages']             = 'Скриване на страниците съвпадащи с този регулярен израз(regular expressions)';
+$lang['useacl']                = 'Ползване на списъци за достъп';
+$lang['autopasswd']            = 'Автоматично генериране на пароли, на нови потребители и пращане по пощата';
+$lang['authtype']              = 'Метод за удостоверяване';
+$lang['passcrypt']             = 'Метод за криптиране на паролите';
+$lang['defaultgroup']          = 'Стандартна група';
+$lang['superuser']             = 'Супер потребител -  група, потребител или списък със стойности разделени чрез запетая (user1,@group1,user2) с пълен достъп до всички страници и функции без значение от настройките на списъците за достъп (ACL)';
+$lang['manager']               = 'Управител - група, потребител или списък със стойности разделени чрез запетая (user1,@group1,user2) с достъп до определени управленски функции ';
+$lang['profileconfirm']        = 'Потвърждаване на промени в профила с парола';
+$lang['rememberme']            = 'Ползване на постоянни бисквитки за вписване (за функцията "Запомни ме")';
+$lang['disableactions']        = 'Изключване функции на DokuWiki';
+$lang['disableactions_check']  = 'Проверка';
 $lang['disableactions_subscription'] = 'Абониране/Отписване';
 $lang['disableactions_wikicode'] = 'Преглед на кода/Експортиране на оригинална версия';
-$lang['disableactions_other'] = 'Други действия (разделени със запетая)';
+$lang['disableactions_other']  = 'Други действия (разделени със запетая)';
 $lang['auth_security_timeout'] = 'Автоматично проверяване на удостоверяването всеки (сек)';
-$lang['securecookie'] = 'Да се изпращат ли бисквитките зададени чрез HTTPS, само чрез HTTPS от браузъра? Изключете опцията, когато SSL се ползва само за вписване, а четенето е без SSL.';
-$lang['remote']      = 'Включване на системата за отдалечен API достъп. Това ще позволи на приложения да се свързват с DokuWiki чрез XML-RPC или друг механизъм.';
-$lang['remoteuser']  = 'Ограничаване на отдалечения API достъп - активиране само за следните групи и потребители (отделени със запетая). Ако оставите полето празно всеки ще има достъп достъп.';
-
-/* Anti-Spam Settings */
-$lang['usewordblock']    = 'Блокиране на SPAM въз основа на на списък от думи';
-$lang['relnofollow']     = 'Ползване на rel="nofollow" за външни препратки';
-$lang['indexdelay']      = 'Забавяне преди индексиране (сек)';
-$lang['mailguard']       = 'Промяна на адресите на ел. поща (във форма непозволяваща пращането на SPAM)';
-$lang['iexssprotect']    = 'Проверяване на качените файлове за вероятен зловреден JavaScript и HTML код';
-
-/* Editing Settings */
-$lang['usedraft']   = 'Автоматично запазване на чернова по време на редактиране';
-$lang['htmlok']     = 'Разрешаване вграждането на HTML код';
-$lang['phpok']      = 'Разрешаване вграждането на PHP код';
-$lang['locktime']   = 'Макс. период за съхраняване на заключените файлове (сек)';
-$lang['cachetime']  = 'Макс. период за съхраняване на кеша (сек)';
-
-/* Link settings */
-$lang['target____wiki']      = 'Прозорец за вътрешни препратки';
-$lang['target____interwiki'] = 'Прозорец за препратки към други Wiki сайтове';
-$lang['target____extern']    = 'Прозорец за външни препратки';
-$lang['target____media']     = 'Прозорец за медийни препратки';
-$lang['target____windows']   = 'Прозорец за препратки към Windows';
-
-/* Media Settings */
-$lang['mediarevisions'] = 'Да се пазят ли стари версии на качените файлове (Mediarevisions)?';
-$lang['refcheck']    = 'Проверка за препратка към медия, преди да бъде изтрита';
-$lang['gdlib']       = 'Версия на GD Lib';
-$lang['im_convert']  = 'Път до инструмента за трансформация на ImageMagick';
-$lang['jpg_quality'] = 'Качество на JPG компресията (0-100)';
-$lang['fetchsize']   = 'Максимален размер (байтове), който fetch.php може да сваля';
-
-/* Notification Settings */
-$lang['subscribers'] = 'Включване на поддръжката за абониране към страници';
-$lang['subscribe_time'] = 'Време след което абонаментните списъци и обобщения се изпращат (сек); Трябва да е по-малко от времето определено в recent_days.';
-$lang['notify']      = 'Пращане на съобщения за промени по страниците на следната eл. поща';
-$lang['registernotify'] = 'Пращане на информация за нови потребители на следната ел. поща';
-$lang['mailfrom']    = 'Ел. поща, която да се ползва за автоматично изпращане на ел. писма';
-$lang['mailprefix']  = 'Представка за темите (поле subject) на автоматично изпращаните ел. писма';
-$lang['htmlmail']    = 'Изпращане на по-добре изглеждащи, но по-големи по-размер HTML ел. писма. Изключете ако желаете писмата да се изпращат като чист текст.';
-
-/* Syndication Settings */
-$lang['sitemap']     = 'Генериране на Google sitemap (дни)';
-$lang['rss_type']    = 'Тип на XML емисията';
-$lang['rss_linkto']  = 'XML емисията препраща към';
-$lang['rss_content'] = 'Какво да показват елементите на XML емисията?';
-$lang['rss_update']  = 'Интервал на актуализиране на XML емисията (сек)';
-$lang['rss_show_summary'] = 'Показване на обобщение в заглавието на XML емисията';
-$lang['rss_media']   = 'Кой тип промени да се включват в XML мисията?';
-
-/* Advanced Options */
-$lang['updatecheck'] = 'Проверяване за за нови версии и предупреждения за сигурността? Необходимо е Dokiwiki да може да се свързва със update.dokuwiki.org за тази функционалност.';
-$lang['userewrite']  = 'Ползване на nice URL адреси';
-$lang['useslash']    = 'Ползване на наклонена черта за разделител на именните пространства в URL';
-$lang['sepchar']     = 'Разделител между думите в имената на страници';
-$lang['canonical']   = 'Ползване на напълно уеднаквени URL адреси (абсолютни адреси - http://server/path)';
-$lang['fnencode']    = 'Метод за кодиране на не-ASCII именуваните файлове.';
-$lang['autoplural']  = 'Проверяване за множествено число в препратките';
-$lang['compression'] = 'Метод за компресия на attic файлове';
-$lang['gzip_output'] = 'Кодиране на съдържанието с gzip за xhtml';
-$lang['compress']    = 'Компактен CSS и javascript изглед';
-$lang['cssdatauri']  = 'Максимален размер, в байтове, до който изображенията посочени в .CSS файл ще бъдат вграждани в стила (stylesheet), за да се намали броя на HTTP заявките. Техниката не работи за версиите на IE преди 8! Препоръчителни стойности: <code>400</code> до <code>600</code> байта. Въведете <code>0</code> за изключване.';
-$lang['send404']     = 'Пращане на "HTTP 404/Page Not Found" за несъществуващи страници';
-$lang['broken_iua']  = 'Отметнете, ако ignore_user_abort функцията не работи. Може да попречи на търсенето в страниците. Знае се, че комбинацията IIS+PHP/CGI е лоша. Вижте  <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">Грешка 852</a> за повече информация.';
-$lang['xsendfile']   = 'Ползване на Х-Sendfile header, за да може уебсървъра да дава статични файлове? Вашият уеб сървър трябва да го поддържа.';
-$lang['renderer_xhtml']   = 'Представяне на основните изходни данни (xhtml) от Wiki-то с';
-$lang['renderer__core']   = '%s (ядрото на DokuWiki)';
-$lang['renderer__plugin'] = '%s (приставка)';
-
-/* Network Options */
-$lang['dnslookups'] = 'DokuWiki ще търси имената на хостовете, на отдалечени IP адреси, от които потребители редактират страници. НЕ е желателно да ползвате опцията ако имате бавен или неработещ DNS сървър.';
-
-/* Proxy Options */
-$lang['proxy____host']   = 'Име на прокси сървър';
-$lang['proxy____port']   = 'Порт за проксито';
-$lang['proxy____user']   = 'Потребител за проксито';
-$lang['proxy____pass']   = 'Парола за проксито';
-$lang['proxy____ssl']    = 'Ползване на SSL при свързване с проксито';
-$lang['proxy____except'] = 'Регулярен израз определящ за кои URL адреси да не се ползва прокси сървър.';
-
-/* Safemode Hack */
-$lang['safemodehack']    = 'Ползване на хака safemode';
-$lang['ftp____host']     = 'FTP сървър за хака safemode';
-$lang['ftp____port']     = 'FTP порт за хака safemode';
-$lang['ftp____user']     = 'FTP потребител за хака safemode';
-$lang['ftp____pass']     = 'FTP парола за хака safemode';
-$lang['ftp____root']     = 'FTP главна директория за хака safemode';
-
-/* License Options */
-$lang['license_o_']      = 'Нищо не е избрано';
-
-/* typography options */
-$lang['typography_o_0']  = 'без';
-$lang['typography_o_1']  = 'с изключение на единични кавички';
-$lang['typography_o_2']  = 'включително единични кавички (не винаги работи)';
-
-/* userewrite options */
-$lang['userewrite_o_0']  = 'без';
-$lang['userewrite_o_1']  = 'файлът .htaccess';
-$lang['userewrite_o_2']  = 'вътрешно от DokuWiki ';
-
-/* deaccent options */
-$lang['deaccent_o_0']    = 'изключено';
-$lang['deaccent_o_1']    = 'премахване на акценти';
-$lang['deaccent_o_2']    = 'транслитерация';
-
-/* gdlib options */
-$lang['gdlib_o_0']       = 'GD Lib не е достъпна';
-$lang['gdlib_o_1']       = 'Версия 1.x';
-$lang['gdlib_o_2']       = 'Автоматично разпознаване';
-
-/* rss_type options */
-$lang['rss_type_o_rss']   = 'RSS версия 0.91';
-$lang['rss_type_o_rss1']  = 'RSS версия 1.0';
-$lang['rss_type_o_rss2']  = 'RSS версия 2.0';
-$lang['rss_type_o_atom']  = 'Atom версия 0.3';
-$lang['rss_type_o_atom1'] = 'Atom версия 1.0';
-
-/* rss_content options */
+$lang['securecookie']          = 'Да се изпращат ли бисквитките зададени чрез HTTPS, само чрез HTTPS от браузъра? Изключете опцията, когато SSL се ползва само за вписване, а четенето е без SSL.';
+$lang['remote']                = 'Включване на системата за отдалечен API достъп. Това ще позволи на приложения да се свързват с DokuWiki чрез XML-RPC или друг механизъм.';
+$lang['remoteuser']            = 'Ограничаване на отдалечения API достъп - активиране само за следните групи и потребители (отделени със запетая). Ако оставите полето празно всеки ще има достъп достъп.';
+$lang['usewordblock']          = 'Блокиране на SPAM въз основа на на списък от думи';
+$lang['relnofollow']           = 'Ползване на rel="nofollow" за външни препратки';
+$lang['indexdelay']            = 'Забавяне преди индексиране (сек)';
+$lang['mailguard']             = 'Промяна на адресите на ел. поща (във форма непозволяваща пращането на SPAM)';
+$lang['iexssprotect']          = 'Проверяване на качените файлове за вероятен зловреден JavaScript и HTML код';
+$lang['usedraft']              = 'Автоматично запазване на чернова по време на редактиране';
+$lang['htmlok']                = 'Разрешаване вграждането на HTML код';
+$lang['phpok']                 = 'Разрешаване вграждането на PHP код';
+$lang['locktime']              = 'Макс. период за съхраняване на заключените файлове (сек)';
+$lang['cachetime']             = 'Макс. период за съхраняване на кеша (сек)';
+$lang['target____wiki']        = 'Прозорец за вътрешни препратки';
+$lang['target____interwiki']   = 'Прозорец за препратки към други Wiki сайтове';
+$lang['target____extern']      = 'Прозорец за външни препратки';
+$lang['target____media']       = 'Прозорец за медийни препратки';
+$lang['target____windows']     = 'Прозорец за препратки към Windows';
+$lang['mediarevisions']        = 'Да се пазят ли стари версии на качените файлове (Mediarevisions)?';
+$lang['refcheck']              = 'Проверка за препратка към медия, преди да бъде изтрита';
+$lang['gdlib']                 = 'Версия на GD Lib';
+$lang['im_convert']            = 'Път до инструмента за трансформация на ImageMagick';
+$lang['jpg_quality']           = 'Качество на JPG компресията (0-100)';
+$lang['fetchsize']             = 'Максимален размер (байтове), който fetch.php може да сваля';
+$lang['subscribers']           = 'Включване на поддръжката за абониране към страници';
+$lang['subscribe_time']        = 'Време след което абонаментните списъци и обобщения се изпращат (сек); Трябва да е по-малко от времето определено в recent_days.';
+$lang['notify']                = 'Пращане на съобщения за промени по страниците на следната eл. поща';
+$lang['registernotify']        = 'Пращане на информация за нови потребители на следната ел. поща';
+$lang['mailfrom']              = 'Ел. поща, която да се ползва за автоматично изпращане на ел. писма';
+$lang['mailprefix']            = 'Представка за темите (поле subject) на автоматично изпращаните ел. писма';
+$lang['htmlmail']              = 'Изпращане на по-добре изглеждащи, но по-големи по-размер HTML ел. писма. Изключете ако желаете писмата да се изпращат като чист текст.';
+$lang['sitemap']               = 'Генериране на Google sitemap (дни)';
+$lang['rss_type']              = 'Тип на XML емисията';
+$lang['rss_linkto']            = 'XML емисията препраща към';
+$lang['rss_content']           = 'Какво да показват елементите на XML емисията?';
+$lang['rss_update']            = 'Интервал на актуализиране на XML емисията (сек)';
+$lang['rss_show_summary']      = 'Показване на обобщение в заглавието на XML емисията';
+$lang['rss_media']             = 'Кой тип промени да се включват в XML мисията?';
+$lang['updatecheck']           = 'Проверяване за за нови версии и предупреждения за сигурността? Необходимо е Dokiwiki да може да се свързва със update.dokuwiki.org за тази функционалност.';
+$lang['userewrite']            = 'Ползване на nice URL адреси';
+$lang['useslash']              = 'Ползване на наклонена черта за разделител на именните пространства в URL';
+$lang['sepchar']               = 'Разделител между думите в имената на страници';
+$lang['canonical']             = 'Ползване на напълно уеднаквени URL адреси (абсолютни адреси - http://server/path)';
+$lang['fnencode']              = 'Метод за кодиране на не-ASCII именуваните файлове.';
+$lang['autoplural']            = 'Проверяване за множествено число в препратките';
+$lang['compression']           = 'Метод за компресия на attic файлове';
+$lang['gzip_output']           = 'Кодиране на съдържанието с gzip за xhtml';
+$lang['compress']              = 'Компактен CSS и javascript изглед';
+$lang['cssdatauri']            = 'Максимален размер, в байтове, до който изображенията посочени в .CSS файл ще бъдат вграждани в стила (stylesheet), за да се намали броя на HTTP заявките. Техниката не работи за версиите на IE преди 8! Препоръчителни стойности: <code>400</code> до <code>600</code> байта. Въведете <code>0</code> за изключване.';
+$lang['send404']               = 'Пращане на "HTTP 404/Page Not Found" за несъществуващи страници';
+$lang['broken_iua']            = 'Отметнете, ако ignore_user_abort функцията не работи. Може да попречи на търсенето в страниците. Знае се, че комбинацията IIS+PHP/CGI е лоша. Вижте  <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">Грешка 852</a> за повече информация.';
+$lang['xsendfile']             = 'Ползване на Х-Sendfile header, за да може уебсървъра да дава статични файлове? Вашият уеб сървър трябва да го поддържа.';
+$lang['renderer_xhtml']        = 'Представяне на основните изходни данни (xhtml) от Wiki-то с';
+$lang['renderer__core']        = '%s (ядрото на DokuWiki)';
+$lang['renderer__plugin']      = '%s (приставка)';
+$lang['dnslookups']            = 'DokuWiki ще търси имената на хостовете, на отдалечени IP адреси, от които потребители редактират страници. НЕ е желателно да ползвате опцията ако имате бавен или неработещ DNS сървър.';
+$lang['proxy____host']         = 'Име на прокси сървър';
+$lang['proxy____port']         = 'Порт за проксито';
+$lang['proxy____user']         = 'Потребител за проксито';
+$lang['proxy____pass']         = 'Парола за проксито';
+$lang['proxy____ssl']          = 'Ползване на SSL при свързване с проксито';
+$lang['proxy____except']       = 'Регулярен израз определящ за кои URL адреси да не се ползва прокси сървър.';
+$lang['safemodehack']          = 'Ползване на хака safemode';
+$lang['ftp____host']           = 'FTP сървър за хака safemode';
+$lang['ftp____port']           = 'FTP порт за хака safemode';
+$lang['ftp____user']           = 'FTP потребител за хака safemode';
+$lang['ftp____pass']           = 'FTP парола за хака safemode';
+$lang['ftp____root']           = 'FTP главна директория за хака safemode';
+$lang['license_o_']            = 'Нищо не е избрано';
+$lang['typography_o_0']        = 'без';
+$lang['typography_o_1']        = 'с изключение на единични кавички';
+$lang['typography_o_2']        = 'включително единични кавички (не винаги работи)';
+$lang['userewrite_o_0']        = 'без';
+$lang['userewrite_o_1']        = 'файлът .htaccess';
+$lang['userewrite_o_2']        = 'вътрешно от DokuWiki ';
+$lang['deaccent_o_0']          = 'изключено';
+$lang['deaccent_o_1']          = 'премахване на акценти';
+$lang['deaccent_o_2']          = 'транслитерация';
+$lang['gdlib_o_0']             = 'GD Lib не е достъпна';
+$lang['gdlib_o_1']             = 'Версия 1.x';
+$lang['gdlib_o_2']             = 'Автоматично разпознаване';
+$lang['rss_type_o_rss']        = 'RSS версия 0.91';
+$lang['rss_type_o_rss1']       = 'RSS версия 1.0';
+$lang['rss_type_o_rss2']       = 'RSS версия 2.0';
+$lang['rss_type_o_atom']       = 'Atom версия 0.3';
+$lang['rss_type_o_atom1']      = 'Atom версия 1.0';
 $lang['rss_content_o_abstract'] = 'Извлечение';
-$lang['rss_content_o_diff']     = 'Обединени разлики';
+$lang['rss_content_o_diff']    = 'Обединени разлики';
 $lang['rss_content_o_htmldiff'] = 'Таблица с разликите в HTML формат';
-$lang['rss_content_o_html']     = 'Цялото съдържание на HTML страницата';
-
-/* rss_linkto options */
+$lang['rss_content_o_html']    = 'Цялото съдържание на HTML страницата';
 $lang['rss_linkto_o_diff']     = 'изглед на разликите';
 $lang['rss_linkto_o_page']     = 'променената страница';
 $lang['rss_linkto_o_rev']      = 'списък на версиите';
 $lang['rss_linkto_o_current']  = 'текущата страница';
-
-/* compression options */
-$lang['compression_o_0']   = 'без';
-$lang['compression_o_gz']  = 'gzip';
-$lang['compression_o_bz2'] = 'bz2';
-
-/* xsendfile header */
-$lang['xsendfile_o_0'] = 'без';
-$lang['xsendfile_o_1'] = 'Специфичен lighttpd header (преди версия 1.5)';
-$lang['xsendfile_o_2'] = 'Стандартен X-Sendfile header';
-$lang['xsendfile_o_3'] = 'Специфичен Nginx X-Accel-Redirect header за пренасочване';
-
-/* Display user info */
-$lang['showuseras_o_loginname']  = 'Име за вписване';
-$lang['showuseras_o_username']   = 'Пълно потребителско име';
-$lang['showuseras_o_email']      = 'Ел, поща (променени според настройките на mailguard)';
+$lang['compression_o_0']       = 'без';
+$lang['compression_o_gz']      = 'gzip';
+$lang['compression_o_bz2']     = 'bz2';
+$lang['xsendfile_o_0']         = 'без';
+$lang['xsendfile_o_1']         = 'Специфичен lighttpd header (преди версия 1.5)';
+$lang['xsendfile_o_2']         = 'Стандартен X-Sendfile header';
+$lang['xsendfile_o_3']         = 'Специфичен Nginx X-Accel-Redirect header за пренасочване';
+$lang['showuseras_o_loginname'] = 'Име за вписване';
+$lang['showuseras_o_username'] = 'Пълно потребителско име';
+$lang['showuseras_o_email']    = 'Ел, поща (променени според настройките на mailguard)';
 $lang['showuseras_o_email_link'] = 'Ел. поща под формата на връзка тип mailto:';
-
-/* useheading options */
-$lang['useheading_o_0']  = 'Никога';
+$lang['useheading_o_0']        = 'Никога';
 $lang['useheading_o_navigation'] = 'Само за навигация';
-$lang['useheading_o_content'] = 'Само за съдържанието на Wiki-то';
-$lang['useheading_o_1'] = 'Винаги';
-
-$lang['readdircache'] = 'Максимален период за съхраняване кеша на readdir (сек)';
+$lang['useheading_o_content']  = 'Само за съдържанието на Wiki-то';
+$lang['useheading_o_1']        = 'Винаги';
+$lang['readdircache']          = 'Максимален период за съхраняване кеша на readdir (сек)';
diff --git a/lib/plugins/config/lang/ca-valencia/intro.txt b/lib/plugins/config/lang/ca-valencia/intro.txt
index 40729e5fe9adb569d8a482e146b9f7ad488e9d24..6dd461db344b9519c5f47f9d1bee8c5aa353db59 100644
--- a/lib/plugins/config/lang/ca-valencia/intro.txt
+++ b/lib/plugins/config/lang/ca-valencia/intro.txt
@@ -7,4 +7,4 @@ Per a més informació al voltant d'este plúgin vaja a [[doku>config]].
 Els ajusts mostrats en un fondo roig claret estan protegits i no els pot
 modificar en este plúgin. Els ajusts mostrats en un fondo blau tenen els valors predeterminats i els ajusts mostrats en un fondo blanc han segut modificats localment per ad esta instalació. Abdós ajusts, blaus i blancs, es poden modificar.
 
-Recorde pulsar el botó **GUARDAR** ans d'anar-se'n d'esta pàgina o perdrà els canvis que haja fet.
\ No newline at end of file
+Recorde pulsar el botó **GUARDAR** ans d'anar-se'n d'esta pàgina o perdrà els canvis que haja fet.
diff --git a/lib/plugins/config/lang/ca/lang.php b/lib/plugins/config/lang/ca/lang.php
index a53a859a0a48f6b8874e6aa2bcd0f531a0b04c76..404d3ea709d22ee165dacec78c80f233466edfd1 100644
--- a/lib/plugins/config/lang/ca/lang.php
+++ b/lib/plugins/config/lang/ca/lang.php
@@ -1,12 +1,14 @@
 <?php
+
 /**
- * Catalan language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Carles Bellver <carles.bellver@gmail.com>
  * @author carles.bellver@gmail.com
  * @author carles.bellver@cent.uji.es
  * @author Carles Bellver <carles.bellver@cent.uji.es>
  * @author daniel@6temes.cat
+ * @author controlonline.net <controlonline.net@gmail.com>
  */
 $lang['menu']                  = 'Paràmetres de configuració';
 $lang['error']                 = 'Els paràmetres no s\'han pogut actualitzar per causa d\'un valor incorrecte Reviseu els canvis i torneu a enviar-los.<br />Els valors incorrectes es ressaltaran amb un marc vermell.';
diff --git a/lib/plugins/config/lang/cs/intro.txt b/lib/plugins/config/lang/cs/intro.txt
index 63381b84e66fb258b56f4b2beb3e356d2a0882fd..f98a62a6e9ae99563738cb0945d85874c3d22e04 100644
--- a/lib/plugins/config/lang/cs/intro.txt
+++ b/lib/plugins/config/lang/cs/intro.txt
@@ -5,4 +5,3 @@ Tuto stránku můžete používat ke správě nastavení vaší instalace DokuWi
 Položky se světle červeným pozadím jsou chráněné a nelze je upravovat tímto pluginem.  Položky s modrým pozadím jsou výchozí hodnoty a položky s bílým pozadím byly nastaveny lokálně v této konkrétní instalaci. Modré i bílé položky je možné upravovat.
 
 Než opustíte tuto stránku, nezapomeňte stisknout tlačítko **Uložit**, jinak budou změny ztraceny.
-
diff --git a/lib/plugins/config/lang/cs/lang.php b/lib/plugins/config/lang/cs/lang.php
index 289c458e5cb1ebe592b4a34be0b6b646d7db20ff..05d2d52f740872bd24f4394eac215d291737dd52 100644
--- a/lib/plugins/config/lang/cs/lang.php
+++ b/lib/plugins/config/lang/cs/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * Czech language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Bohumir Zamecnik <bohumir@zamecnik.org>
  * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
  * @author tomas@valenta.cz
@@ -13,6 +13,8 @@
  * @author Bohumir Zamecnik <bohumir.zamecnik@gmail.com>
  * @author Jakub A. Těšínský (j@kub.cz)
  * @author mkucera66@seznam.cz
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ * @author Turkislav <turkislav@blabla.com>
  */
 $lang['menu']                  = 'Správa nastavení';
 $lang['error']                 = 'Nastavení nebyla změněna kvůli alespoň jedné neplatné položce,
@@ -95,7 +97,9 @@ $lang['disableactions']        = 'Vypnout DokuWiki akce';
 $lang['disableactions_check']  = 'Zkontrolovat';
 $lang['disableactions_subscription'] = 'Přihlásit se/Odhlásit se ze seznamu pro odběr změn';
 $lang['disableactions_wikicode'] = 'Prohlížet zdrojové kódy/Export wiki textu';
+$lang['disableactions_profile_delete'] = 'Smazat vlasní účet';
 $lang['disableactions_other']  = 'Další akce (oddělené čárkou)';
+$lang['disableactions_rss']    = 'XMS syndikace (RSS)';
 $lang['auth_security_timeout'] = 'Časový limit pro autentikaci (v sekundách)';
 $lang['securecookie']          = 'Má prohlížeč posílat cookies nastavené přes HTTPS opět jen přes HTTPS? Vypněte tuto volbu, pokud chcete, aby bylo pomocí SSL zabezpečeno pouze přihlašování do wiki, ale obsah budete prohlížet nezabezpečeně.';
 $lang['remote']                = 'Zapne API systému, umožňující jiným aplikacím vzdálený přístup k wiki pomoci XML-RPC nebo jiných mechanizmů.';
@@ -200,6 +204,7 @@ $lang['xsendfile_o_2']         = 'Standardní hlavička X-Sendfile';
 $lang['xsendfile_o_3']         = 'Proprietární hlavička Nginx X-Accel-Redirect';
 $lang['showuseras_o_loginname'] = 'Přihlašovací jméno';
 $lang['showuseras_o_username'] = 'Celé jméno uživatele';
+$lang['showuseras_o_username_link'] = 'Celé uživatelské jméno jako odkaz mezi wiki';
 $lang['showuseras_o_email']    = 'E-mailová adresa uživatele ("zamaskována" aktuálně nastavenou metodou)';
 $lang['showuseras_o_email_link'] = 'E-mailová adresa uživatele jako mailto: odkaz';
 $lang['useheading_o_0']        = 'Nikdy';
diff --git a/lib/plugins/config/lang/cy/intro.txt b/lib/plugins/config/lang/cy/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..02ccec5860d63e9b62e4313277e84a00b7622c49
--- /dev/null
+++ b/lib/plugins/config/lang/cy/intro.txt
@@ -0,0 +1,7 @@
+====== Rheolwr Ffurfwedd ======
+
+Defnyddiwch y dudalen hon i reoli gosodiadau eich arsefydliad DokuWiki.  Am gymorth ar osodiadau unigol ewch i [[doku>config]]. Am wybodaeth bellach ar yr ategyn hwn ewch i [[doku>plugin:config]].
+
+Mae gosodiadau gyda chefndir coch golau wedi\'u hamddiffyn a \'sdim modd eu newid gyda\'r ategyn hwn. Mae gosodiaadau gyda chefndir glas yn dynodi gwerthoedd diofyn ac mae gosodiadau gyda chefndir gwyn wedi\'u gosod yn lleol ar gyfer yr arsefydliad penodol hwn.  Mae modd newid gosodiadau gwyn a glas.
+
+Cofiwch bwyso y botwm **Cadw** cyn gadael y dudalen neu caiff eich newidiadau eu colli.
diff --git a/lib/plugins/config/lang/cy/lang.php b/lib/plugins/config/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..54f3b4cebe52178ae48d8738a3273280f095fc40
--- /dev/null
+++ b/lib/plugins/config/lang/cy/lang.php
@@ -0,0 +1,262 @@
+<?php
+/**
+ * welsh language file
+ *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author     Christopher Smith <chris@jalakai.co.uk>
+ * @author     Matthias Schulte <dokuwiki@lupo49.de>
+ * @author     Alan Davies <ben.brynsadler@gmail.com>
+ */
+
+// for admin plugins, the menu prompt to be displayed in the admin menu
+// if set here, the plugin doesn't need to override the getMenuText() method
+$lang['menu']       = 'Gosodiadau Ffurwedd';
+
+$lang['error']      = 'Gosodiadau heb eu diweddaru oherwydd gwerth annilys, gwiriwch eich newidiadau ac ailgyflwyno.
+                       <br />Caiff y gwerth(oedd) anghywir ei/eu dangos gydag ymyl coch.';
+$lang['updated']    = 'Diweddarwyd gosodiadau\'n llwyddiannus.';
+$lang['nochoice']   = '(dim dewisiadau eraill ar gael)';
+$lang['locked']     = '\'Sdim modd diweddaru\'r ffeil osodiadau, os ydy hyn yn anfwriadol, <br />
+                       sicrhewch fod enw\'r ffeil osodiadau a\'r hawliau lleol yn gywir.';
+
+$lang['danger']     = 'Perygl: Gall newid yr opsiwn hwn wneud eich wici a\'r ddewislen ffurfwedd yn anghyraeddadwy.';
+$lang['warning']    = 'Rhybudd: Gall newid yr opsiwn hwn achosi ymddygiad anfwriadol.';
+$lang['security']   = 'Rhybudd Diogelwch: Gall newid yr opsiwn hwn achosi risg diogelwch.';
+
+/* --- Config Setting Headers --- */
+$lang['_configuration_manager'] = 'Rheolwr Ffurfwedd'; //same as heading in intro.txt
+$lang['_header_dokuwiki'] = 'DokuWiki';
+$lang['_header_plugin'] = 'Ategyn';
+$lang['_header_template'] = 'Templed';
+$lang['_header_undefined'] = 'Gosodiadau Amhenodol';
+
+/* --- Config Setting Groups --- */
+$lang['_basic'] = 'Sylfaenol';
+$lang['_display'] = 'Dangos';
+$lang['_authentication'] = 'Dilysiad';
+$lang['_anti_spam'] = 'Gwrth-Sbam';
+$lang['_editing'] = 'Yn Golygu';
+$lang['_links'] = 'Dolenni';
+$lang['_media'] = 'Cyfrwng';
+$lang['_notifications'] = 'Hysbysiad';
+$lang['_syndication']   = 'Syndication (RSS)'; //angen newid
+$lang['_advanced'] = 'Uwch';
+$lang['_network'] = 'Rhwydwaith';
+
+/* --- Undefined Setting Messages --- */
+$lang['_msg_setting_undefined'] = 'Dim gosodiad metadata.';
+$lang['_msg_setting_no_class'] = 'Dim gosodiad dosbarth.';
+$lang['_msg_setting_no_default'] = 'Dim gwerth diofyn.';
+
+/* -------------------- Config Options --------------------------- */
+
+/* Basic Settings */
+$lang['title']       = 'Teitl y wici h.y. enw\'ch wici';
+$lang['start']       = 'Enw\'r dudalen i\'w defnyddio fel man cychwyn ar gyfer pob namespace'; //namespace
+$lang['lang']        = 'Iaith y rhyngwyneb';
+$lang['template']    = 'Templed h.y. dyluniad y wici.';
+$lang['tagline']     = 'Taglinell (os yw\'r templed yn ei gynnal)';
+$lang['sidebar']     = 'Enw tudalen y bar ochr (os yw\'r templed yn ei gynnal), Mae maes gwag yn analluogi\'r bar ochr';
+$lang['license']     = 'O dan ba drwydded dylai\'ch cynnwys gael ei ryddhau?';
+$lang['savedir']     = 'Ffolder ar gyfer cadw data';
+$lang['basedir']     = 'Llwybr y gweinydd (ee. <code>/dokuwiki/</code>). Gadewch yn wag ar gyfer awtoddatgeliad.';
+$lang['baseurl']     = 'URL y gweinydd (ee. <code>http://www.yourserver.com</code>). Gadewch yn wag ar gyfer awtoddatgeliad.';
+$lang['cookiedir']   = 'Llwybr cwcis. Gadewch yn wag i ddefnyddio \'baseurl\'.';
+$lang['dmode']       = 'Modd creu ffolderi';
+$lang['fmode']       = 'Modd creu ffeiliau';
+$lang['allowdebug']  = 'Caniatáu dadfygio. <b>Analluogwch os nac oes angen hwn!</b>';
+
+/* Display Settings */
+$lang['recent']      = 'Nifer y cofnodion y dudalen yn y newidiadau diweddar';
+$lang['recent_days'] = 'Sawl newid diweddar i\'w cadw (diwrnodau)';
+$lang['breadcrumbs'] = 'Nifer y briwsion "trywydd". Gosodwch i 0 i analluogi.';
+$lang['youarehere']  = 'Defnyddiwch briwsion hierarchaidd (byddwch chi yn debygol o angen analluogi\'r opsiwn uchod wedyn)';
+$lang['fullpath']    = 'Datgelu llwybr llawn y tudalennau yn y troedyn';
+$lang['typography']  = 'Gwnewch amnewidiadau argraffyddol';
+$lang['dformat']     = 'Fformat dyddiad (gweler swyddogaeth <a href="http://www.php.net/strftime">strftime</a> PHP)';
+$lang['signature']   = 'Yr hyn i\'w mewnosod gyda\'r botwm llofnod yn y golygydd';
+$lang['showuseras']  = 'Yr hyn i\'w harddangos wrth ddangos y defnyddiwr a wnaeth olygu\'r dudalen yn olaf';
+$lang['toptoclevel'] = 'Lefel uchaf ar gyfer tabl cynnwys';
+$lang['tocminheads'] = 'Isafswm y penawdau sy\'n penderfynu os ydy\'r tabl cynnwys yn cael ei adeiladu';
+$lang['maxtoclevel'] = 'Lefel uchaf ar gyfer y tabl cynnwys';
+$lang['maxseclevel'] = 'Lefel uchaf adran olygu';
+$lang['camelcase']   = 'Defnyddio CamelCase ar gyfer dolenni';
+$lang['deaccent']    = 'Sut i lanhau enwau tudalennau';
+$lang['useheading']  = 'Defnyddio\'r pennawd cyntaf ar gyfer enwau tudalennau';
+$lang['sneaky_index'] = 'Yn ddiofyn, bydd DokuWiki yn dangos pob namespace yn y map safle. Bydd galluogi yr opsiwn hwn yn cuddio\'r rheiny lle \'sdim hawliau darllen gan y defnyddiwr. Gall hwn achosi cuddio subnamespaces cyraeddadwy a fydd yn gallu peri\'r indecs i beidio â gweithio gyda gosodiadau ACL penodol.'; //namespace
+$lang['hidepages']   = 'Cuddio tudalennau sy\'n cydweddu gyda\'r mynegiad rheolaidd o\'r chwiliad, y map safle ac indecsau awtomatig eraill';
+
+/* Authentication Settings */
+$lang['useacl']      = 'Defnyddio rhestrau rheoli mynediad';
+$lang['autopasswd']  = 'Awtogeneradu cyfrineiriau';
+$lang['authtype']    = 'Ôl-brosesydd dilysu';
+$lang['passcrypt']   = 'Dull amgryptio cyfrineiriau';
+$lang['defaultgroup']= 'Grŵp diofyn, caiff pob defnyddiwr newydd ei osod yn y grŵp hwn';
+$lang['superuser']   = 'Uwchddefnyddiwr - grŵp, defnyddiwr neu restr gwahanwyd gan goma defnyddiwr1,@group1,defnyddiwr2 gyda mynediad llawn i bob tudalen beth bynnag y gosodiadau ACL';
+$lang['manager']     = 'Rheolwr - grŵp, defnyddiwr neu restr gwahanwyd gan goma defnyddiwr1,@group1,defnyddiwr2 gyda mynediad i swyddogaethau rheoli penodol';
+$lang['profileconfirm'] = 'Cadrnhau newidiadau proffil gyda chyfrinair';
+$lang['rememberme'] = 'Caniatáu cwcis mewngofnodi parhaol (cofio fi)';
+$lang['disableactions'] = 'Analluogi gweithredoedd DokuWiki';
+$lang['disableactions_check'] = 'Gwirio';
+$lang['disableactions_subscription'] = 'Tanysgrifio/Dad-tanysgrifio';
+$lang['disableactions_wikicode'] = 'Dangos ffynhonnell/Allforio Crai';
+$lang['disableactions_profile_delete'] = 'Dileu Cyfrif Eu Hunain';
+$lang['disableactions_other'] = 'Gweithredoedd eraill (gwahanu gan goma)';
+$lang['disableactions_rss'] = 'XML Syndication (RSS)'; //angen newid hwn
+$lang['auth_security_timeout'] = 'Terfyn Amser Diogelwch Dilysiad (eiliadau)';
+$lang['securecookie'] = 'A ddylai cwcis sydd wedi cael eu gosod gan HTTPS gael eu hanfon trwy HTTPS yn unig gan y porwr? Analluogwch yr opsiwn hwn dim ond pan fydd yr unig mewngofnodiad i\'ch wici wedi\'i ddiogelu gydag SSL ond mae pori\'r wici yn cael ei wneud heb ddiogelu.';
+$lang['remote']      = 'Galluogi\'r system API pell. Mae hwn yn galluogi apps eraill i gael mynediad i\'r wici trwy XML-RPC neu fecanweithiau eraill.';
+$lang['remoteuser']  = 'Cyfyngu mynediad API pell i grwpiau neu ddefnydwyr wedi\'u gwahanu gan goma yma. Gadewch yn wag i roi mynediad i bawb.';
+
+/* Anti-Spam Settings */
+$lang['usewordblock']= 'Blocio sbam wedi selio ar restr eiriau';
+$lang['relnofollow'] = 'Defnyddio rel="nofollow" ar ddolenni allanol';
+$lang['indexdelay']  = 'Oediad cyn indecsio (eil)';
+$lang['mailguard']   = 'Tywyllu cyfeiriadau ebost';
+$lang['iexssprotect']= 'Gwirio ffeiliau a lanlwythwyd am JavaScript neu god HTML sydd efallai\'n faleisis';
+
+/* Editing Settings */
+$lang['usedraft']    = 'Cadw drafft yn awtomatig wrth olygu';
+$lang['htmlok']      = 'Caniatáu HTML wedi\'i fewnosod';
+$lang['phpok']       = 'Caniatáu PHP wedi\'i fewnosod';
+$lang['locktime']    = 'Oed mwyaf ar gyfer cloi ffeiliau (eil)';
+$lang['cachetime']   = 'Oed mwyaf ar gyfer y storfa (eil)';
+
+/* Link settings */
+$lang['target____wiki']      = 'Ffenestr darged ar gyfer dolenni mewnol';
+$lang['target____interwiki'] = 'Ffenestr darged ar gyfer dolenni interwiki';
+$lang['target____extern']    = 'Ffenestr darged ar gyfer dolenni allanol';
+$lang['target____media']     = 'Ffenestr darged ar gyfer dolenni cyfrwng';
+$lang['target____windows']   = 'Ffenestr darged ar gyfer dolenni ffenestri';
+
+/* Media Settings */
+$lang['mediarevisions'] = 'Galluogi Mediarevisions?';
+$lang['refcheck']    = 'Gwirio os ydy ffeil gyfrwng yn dal yn cael ei defnydio cyn ei dileu hi';
+$lang['gdlib']       = 'Fersiwn GD Lib';
+$lang['im_convert']  = 'Llwybr i declyn trosi ImageMagick';
+$lang['jpg_quality'] = 'Ansawdd cywasgu JPG (0-100)';
+$lang['fetchsize']   = 'Uchafswm maint (beit) gall fetch.php lawlwytho o URL allanol, ee. i storio ac ailfeintio delweddau allanol.';
+
+/* Notification Settings */
+$lang['subscribers'] = 'Caniatáu defnyddwyr i danysgrifio i newidiadau tudalen gan ebost';
+$lang['subscribe_time'] = 'Yr amser cyn caiff rhestrau tanysgrifio a chrynoadau eu hanfon (eil); Dylai hwn fod yn llai na\'r amser wedi\'i gosod mewn recent_days.';
+$lang['notify']      = 'Wastad anfon hysbysiadau newidiadau i\'r cyfeiriad ebost hwn';
+$lang['registernotify'] = 'Wastad anfon gwybodaeth ar ddefnyddwyr newydd gofrestru i\'r cyfeiriad ebost hwn';
+$lang['mailfrom']    = 'Cyfeiriad anfon ebyst i\'w ddefnyddio ar gyfer pyst awtomatig';
+$lang['mailprefix']  = 'Rhagddodiad testun ebyst i\'w ddefnyddio ar gyfer pyst awtomatig. Gadewch yn wag i ddefnyddio teitl y wici';
+$lang['htmlmail']    = 'Anfonwch ebyst aml-ddarn HTML sydd yn edrych yn well, ond sy\'n fwy mewn maint. Analluogwch ar gyfer pyst testun plaen yn unig.';
+
+/* Syndication Settings */
+$lang['sitemap']     = 'Generadu map safle Google mor aml â hyn (mewn diwrnodau). 0 i anallogi';
+$lang['rss_type']    = 'Math y ffrwd XML';
+$lang['rss_linkto']  = 'Ffrwd XML yn cysylltu â';
+$lang['rss_content'] = 'Beth i\'w ddangos mewn eitemau\'r ffrwd XML?';
+$lang['rss_update']  = 'Cyfnod diwedaru ffrwd XML (eil)';
+$lang['rss_show_summary'] = 'Dangos crynodeb mewn teitl y ffrwd XML';
+$lang['rss_media']   = 'Pa fath newidiadau a ddylai cael eu rhestru yn y ffrwd XML??';
+
+/* Advanced Options */
+$lang['updatecheck'] = 'Gwirio am ddiweddariadau a rhybuddion diogelwch? Mae\'n rhaid i DokuWiki gysylltu ag update.dokuwiki.org ar gyfer y nodwedd hon.';
+$lang['userewrite']  = 'Defnyddio URLs pert';
+$lang['useslash']    = 'Defnyddio slaes fel gwahanydd namespace mewn URL';
+$lang['sepchar']     = 'Gwanahydd geiriau mewn enw tudalennau';
+$lang['canonical']   = 'Defnyddio URLs canonaidd llawn';
+$lang['fnencode']    = 'Dull amgodio enw ffeiliau \'non-ASCII\'.';
+$lang['autoplural']  = 'Gwirio am ffurfiau lluosog mewn dolenni';
+$lang['compression'] = 'Dull cywasgu ar gyfer ffeiliau llofft (hen adolygiadau)';
+$lang['gzip_output'] = 'Defnyddio gzip Content-Encoding ar gyfer xhtml'; //pwy a wyr
+$lang['compress']    = 'Cywasgu allbwn CSS a javascript';
+$lang['cssdatauri']  = 'Uchafswm maint mewn beitiau ar gyfer delweddau i\'w cyfeirio atynt mewn ffeiliau CSS a ddylai cael eu mewnosod i\'r ddalen arddull i leihau gorbenion pennyn cais HTTP. \'Dyw\'r dechneg hon ddim yn gweithio mewn IE 7 ac is! Mae <code>400</code> i <code>600</code> beit yn werth da. Gosodwch i <code>0</code> i\'w analluogi.';
+$lang['send404']     = 'Anfon "HTTP 404/Page Not Found" ar gyfer tudalennau sy ddim yn bodoli';
+$lang['broken_iua']  = 'Ydy\'r swyddogaeth ignore_user_abort wedi torri ar eich system? Gall hwn achosi\'r indecs chwilio i beidio â gweithio. Rydym yn gwybod bod IIS+PHP/CGI wedi torri. Gweler <a href="http://bugs.dokuwiki.org/?do=details&amp;task_id=852">Bug 852</a> am wybodaeth bellach.';
+$lang['xsendfile']   = 'Defnyddio\'r pennyn X-Sendfile i ganiatáu\'r gweinydd gwe i ddanfon ffeiliau statig? Mae\'n rhaid bod eich gweinydd gwe yn caniatáu hyn.';
+$lang['renderer_xhtml']   = 'Cyflwynydd i ddefnyddio ar gyfer prif allbwn (xhtml) y wici';
+$lang['renderer__core']   = '%s (craidd dokuwiki)';
+$lang['renderer__plugin'] = '%s (ategyn)';
+
+/* Network Options */
+$lang['dnslookups'] = 'Bydd DokuWiki yn edrych i fyny enwau gwesteiwyr ar gyfer cyfeiriadau IP pell y defnyddwyr hynny sy\'n golygu tudalennau. Os oes gweinydd DNS sy\'n araf neu sy ddim yn gweithio \'da chi neu \'dych chi ddim am ddefnyddio\'r nodwedd hon, analluogwch yr opsiwn hwn.';
+
+/* Proxy Options */
+$lang['proxy____host']    = 'Enw\'r gweinydd procsi';
+$lang['proxy____port']    = 'Porth procsi';
+$lang['proxy____user']    = 'Defnyddair procsi';
+$lang['proxy____pass']    = 'Cyfrinair procsi';
+$lang['proxy____ssl']     = 'Defnyddio SSL i gysylltu â\'r procsi';
+$lang['proxy____except']  = 'Mynegiad rheolaidd i gydweddu URL ar gyfer y procsi a ddylai cael eu hanwybyddu.';
+
+/* Safemode Hack */
+$lang['safemodehack'] = 'Galluogi safemode hack';
+$lang['ftp____host'] = 'Gweinydd FTP safemode hack';
+$lang['ftp____port'] = 'Porth FTP safemode hack';
+$lang['ftp____user'] = 'Defnyddair FTP safemode hack';
+$lang['ftp____pass'] = 'Cyfrinair FTP safemode hack';
+$lang['ftp____root'] = 'Gwraiddffolder FTP safemode hack';
+
+/* License Options */
+$lang['license_o_'] = 'Dim wedi\'i ddewis';
+
+/* typography options */
+$lang['typography_o_0'] = 'dim';
+$lang['typography_o_1'] = 'eithrio dyfynodau sengl';
+$lang['typography_o_2'] = 'cynnwys dyfynodau sengl (efallai ddim yn gweithio pob tro)';
+
+/* userewrite options */
+$lang['userewrite_o_0'] = 'dim';
+$lang['userewrite_o_1'] = '.htaccess';
+$lang['userewrite_o_2'] = 'DokuWiki mewnol';
+
+/* deaccent options */
+$lang['deaccent_o_0'] = 'bant';
+$lang['deaccent_o_1'] = 'tynnu acenion';
+$lang['deaccent_o_2'] = 'rhufeinio';
+
+/* gdlib options */
+$lang['gdlib_o_0'] = 'GD Lib ddim ar gael';
+$lang['gdlib_o_1'] = 'Fersiwn 1.x';
+$lang['gdlib_o_2'] = 'Awtoddatgeliad';
+
+/* rss_type options */
+$lang['rss_type_o_rss']   = 'RSS 0.91';
+$lang['rss_type_o_rss1']  = 'RSS 1.0';
+$lang['rss_type_o_rss2']  = 'RSS 2.0';
+$lang['rss_type_o_atom']  = 'Atom 0.3';
+$lang['rss_type_o_atom1'] = 'Atom 1.0';
+
+/* rss_content options */
+$lang['rss_content_o_abstract'] = 'Crynodeb';
+$lang['rss_content_o_diff']     = 'Gwahan. Unedig';
+$lang['rss_content_o_htmldiff'] = 'Gwahaniaethau ar ffurf tabl HTML';
+$lang['rss_content_o_html']     = 'Cynnwys tudalen HTML llawn';
+
+/* rss_linkto options */
+$lang['rss_linkto_o_diff']    = 'golwg gwahaniaethau';
+$lang['rss_linkto_o_page']    = 'y dudalen a adolygwyd';
+$lang['rss_linkto_o_rev']     = 'rhestr adolygiadau';
+$lang['rss_linkto_o_current'] = 'y dudalen gyfredol';
+
+/* compression options */
+$lang['compression_o_0']   = 'dim';
+$lang['compression_o_gz']  = 'gzip';
+$lang['compression_o_bz2'] = 'bz2';
+
+/* xsendfile header */
+$lang['xsendfile_o_0'] = "peidio â defnyddio";
+$lang['xsendfile_o_1'] = 'Pennyn perchnogol lighttpd (cyn rhyddhad 1.5)';
+$lang['xsendfile_o_2'] = 'Pennyn safonol X-Sendfile';
+$lang['xsendfile_o_3'] = 'Pennyn perchnogol Nginx X-Accel-Redirect';
+
+/* Display user info */
+$lang['showuseras_o_loginname']     = 'Enw mewngofnodi';
+$lang['showuseras_o_username']      = "Enw llawn y defnyddiwr";
+$lang['showuseras_o_username_link'] = "Enw llawn y defnyddiwr fel dolen defnyddiwr interwiki";
+$lang['showuseras_o_email']         = "Cyfeiriad e-bost y defnyddiwr (tywyllu yn ôl gosodiad mailguard)";
+$lang['showuseras_o_email_link']    = "Cyfeiriad e-bost y defnyddiwr fel dolen mailto:";
+
+/* useheading options */
+$lang['useheading_o_0'] = 'Byth';
+$lang['useheading_o_navigation'] = 'Llywio yn Unig';
+$lang['useheading_o_content'] = 'Cynnwys Wici yn Unig';
+$lang['useheading_o_1'] = 'Wastad';
+
+$lang['readdircache'] = 'Uchafswm amser ar gyfer storfa readdir (eil)';
diff --git a/lib/plugins/config/lang/da/intro.txt b/lib/plugins/config/lang/da/intro.txt
index f20961b9881014b440374465bf6d7b57e7105eae..14cd3d601d43f9ff0007ed313f335af647b4193c 100644
--- a/lib/plugins/config/lang/da/intro.txt
+++ b/lib/plugins/config/lang/da/intro.txt
@@ -5,4 +5,3 @@ Brug denne side til at kontrollere indstillingerne for din Dokuwiki-opsætning.
 Indstillinger vist med lys rød baggrund er beskyttede og kan ikke ændres med denne udvidelse. Indstillinger vist med blå baggrund er standardindstillinger og indstillinger vist med hvid baggrund er blevet sat lokalt denne konkrete opsætning.  Både blå og hvide indstillinger kan ændres.
 
 Husk at trykke på **Gem**-knappen før du forlader siden, for at du ikke mister dine ændringer.
-
diff --git a/lib/plugins/config/lang/de-informal/intro.txt b/lib/plugins/config/lang/de-informal/intro.txt
index df9845ebc0610e1d8508da0ec967f4e3289013dd..ce4625cffb079869ebeaf49a5b254078edbd8c8b 100644
--- a/lib/plugins/config/lang/de-informal/intro.txt
+++ b/lib/plugins/config/lang/de-informal/intro.txt
@@ -4,4 +4,4 @@ Benutze diese Seite zur Kontrolle der Einstellungen deiner DokuWiki-Installation
 
 Einstellungen die mit einem hellroten Hintergrund angezeigt werden, können mit dieser Erweiterung nicht verändert werden. Einstellungen mit einem blauen Hintergrund sind Standardwerte und Einstellungen mit einem weißen Hintergrund wurden lokal gesetzt für diese Installation. Sowohl blaue als auch weiße Einstellungen können angepasst werden.
 
-Denke dran **Speichern** zu drücken bevor du die Seite verlässt, andernfalls werden deine Änderungen nicht übernommen.
\ No newline at end of file
+Denke dran **Speichern** zu drücken bevor du die Seite verlässt, andernfalls werden deine Änderungen nicht übernommen.
diff --git a/lib/plugins/config/lang/de/intro.txt b/lib/plugins/config/lang/de/intro.txt
index b79b5f871c05c9087754b4eea33a750b979b5d89..e743379ff53d50273612f00ee461aeaf246daf00 100644
--- a/lib/plugins/config/lang/de/intro.txt
+++ b/lib/plugins/config/lang/de/intro.txt
@@ -5,6 +5,3 @@ Dieses Plugin hilft Ihnen bei der Konfiguration von DokuWiki. Hilfe zu den einze
 Einstellungen mit einem hellroten Hintergrund sind gesichert und können nicht mit diesem Plugin verändert werden, Einstellungen mit hellblauem Hintergrund sind Voreinstellungen, weiß hinterlegte Felder zeigen lokal veränderte Werte an. Sowohl die blauen als auch die weißen Felder können verändert werden.
 
 Bitte vergessen Sie nicht **Speichern** zu drücken bevor Sie die Seite verlassen, andernfalls gehen Ihre Änderungen verloren.
-
-
-
diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php
index d398ebf843872a31f6c25d7511b6fd7a32eba662..f3ddefd9b5057a756bbd2758d8411dd4228b50f0 100644
--- a/lib/plugins/config/lang/de/lang.php
+++ b/lib/plugins/config/lang/de/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * German language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Andreas Gohr <andi@splitbrain.org>
  * @author Michael Klier <chi@chimeric.de>
  * @author Leo Moll <leo@yeasoft.com>
@@ -18,6 +18,7 @@
  * @author Pierre Corell <info@joomla-praxis.de>
  * @author Matthias Schulte <dokuwiki@lupo49.de>
  * @author Mateng Schimmerlos <mateng@firemail.de>
+ * @author Anika Henke <anika@selfthinker.org>
  */
 $lang['menu']                  = 'Konfiguration';
 $lang['error']                 = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert.<br /> Bitte überprüfen sie die rot umrandeten Eingaben und speichern Sie erneut.';
@@ -46,28 +47,29 @@ $lang['_network']              = 'Netzwerk';
 $lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.';
 $lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.';
 $lang['_msg_setting_no_default'] = 'Kein Standardwert.';
-$lang['fmode']                 = 'Berechtigungen für neue Dateien';
-$lang['dmode']                 = 'Berechtigungen für neue Verzeichnisse';
-$lang['lang']                  = 'Sprache';
-$lang['basedir']               = 'Installationsverzeichnis';
-$lang['baseurl']               = 'Installationspfad (URL)';
-$lang['savedir']               = 'Speicherverzeichnis';
-$lang['cookiedir']             = 'Cookiepfad. Frei lassen, um den gleichen Pfad wie "baseurl" zu benutzen.';
-$lang['start']                 = 'Startseitenname';
 $lang['title']                 = 'Titel des Wikis';
+$lang['start']                 = 'Startseitenname';
+$lang['lang']                  = 'Sprache';
 $lang['template']              = 'Designvorlage (Template)';
 $lang['tagline']               = 'Tag-Linie (nur, wenn vom Template unterstützt)';
 $lang['sidebar']               = 'Name der Sidebar-Seite (nur, wenn vom Template unterstützt), ein leeres Feld deaktiviert die Sidebar';
 $lang['license']               = 'Unter welcher Lizenz sollen Ihre Inhalte veröffentlicht werden?';
-$lang['fullpath']              = 'Den kompletten Dateipfad im Footer anzeigen';
+$lang['savedir']               = 'Speicherverzeichnis';
+$lang['basedir']               = 'Installationsverzeichnis';
+$lang['baseurl']               = 'Installationspfad (URL)';
+$lang['cookiedir']             = 'Cookiepfad. Frei lassen, um den gleichen Pfad wie "baseurl" zu benutzen.';
+$lang['dmode']                 = 'Berechtigungen für neue Verzeichnisse';
+$lang['fmode']                 = 'Berechtigungen für neue Dateien';
+$lang['allowdebug']            = 'Debug-Ausgaben erlauben <b>Abschalten wenn nicht benötigt!</b>';
 $lang['recent']                = 'Anzahl der Einträge in der Änderungsliste';
+$lang['recent_days']           = 'Wie viele letzte Änderungen sollen einsehbar bleiben? (Tage)';
 $lang['breadcrumbs']           = 'Anzahl der Einträge im "Krümelpfad"';
 $lang['youarehere']            = 'Hierarchische Pfadnavigation verwenden';
+$lang['fullpath']              = 'Den kompletten Dateipfad im Footer anzeigen';
 $lang['typography']            = 'Typographische Ersetzungen';
-$lang['htmlok']                = 'HTML erlauben';
-$lang['phpok']                 = 'PHP erlauben';
 $lang['dformat']               = 'Datumsformat (Siehe PHP <a href="http://www.php.net/strftime">strftime</a> Funktion)';
 $lang['signature']             = 'Signatur';
+$lang['showuseras']            = 'Was angezeigt werden soll, wenn der Benutzer, der zuletzt eine Seite bearbeitet hat, angezeigt wird';
 $lang['toptoclevel']           = 'Inhaltsverzeichnis bei dieser Überschriftengröße beginnen';
 $lang['tocminheads']           = 'Mindestanzahl der Ãœberschriften die entscheidet, ob ein Inhaltsverzeichnis erscheinen soll';
 $lang['maxtoclevel']           = 'Maximale Überschriftengröße für Inhaltsverzeichnis';
@@ -75,15 +77,8 @@ $lang['maxseclevel']           = 'Abschnitte bis zu dieser Stufe einzeln editier
 $lang['camelcase']             = 'CamelCase-Verlinkungen verwenden';
 $lang['deaccent']              = 'Seitennamen bereinigen';
 $lang['useheading']            = 'Erste Ãœberschrift als Seitennamen verwenden';
-$lang['refcheck']              = 'Auf Verwendung beim Löschen von Media-Dateien testen';
-$lang['allowdebug']            = 'Debug-Ausgaben erlauben <b>Abschalten wenn nicht benötigt!</b>';
-$lang['mediarevisions']        = 'Media-Revisionen (ältere Versionen) aktivieren?';
-$lang['usewordblock']          = 'Spam-Blocking benutzen';
-$lang['indexdelay']            = 'Zeit bevor Suchmaschinenindexierung erlaubt ist';
-$lang['relnofollow']           = 'rel="nofollow" verwenden';
-$lang['mailguard']             = 'E-Mail-Adressen schützen';
-$lang['iexssprotect']          = 'Hochgeladene Dateien auf bösartigen JavaScript- und HTML-Code untersuchen';
-$lang['showuseras']            = 'Was angezeigt werden soll, wenn der Benutzer, der zuletzt eine Seite bearbeitet hat, angezeigt wird';
+$lang['sneaky_index']          = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Übersicht. Wenn diese Option aktiviert wird, werden alle Namensräume, für die der Benutzer keine Lese-Rechte hat, nicht angezeigt. Dies kann unter Umständen dazu führen, das lesbare Unter-Namensräume nicht angezeigt werden und macht die Übersicht evtl. unbrauchbar in Kombination mit bestimmten ACL Einstellungen.';
+$lang['hidepages']             = 'Seiten verstecken (Regulärer Ausdruck)';
 $lang['useacl']                = 'Zugangskontrolle verwenden';
 $lang['autopasswd']            = 'Passwort automatisch generieren';
 $lang['authtype']              = 'Authentifizierungsmechanismus';
@@ -92,63 +87,70 @@ $lang['defaultgroup']          = 'Standardgruppe';
 $lang['superuser']             = 'Administrator - Eine Gruppe oder Benutzer mit vollem Zugriff auf alle Seiten und Administrationswerkzeuge.';
 $lang['manager']               = 'Manager - Eine Gruppe oder Benutzer mit Zugriff auf einige Administrationswerkzeuge.';
 $lang['profileconfirm']        = 'Profiländerung nur nach Passwortbestätigung';
+$lang['rememberme']            = 'Permanente Login-Cookies erlauben (Auf diesem Computer eingeloggt bleiben)';
 $lang['disableactions']        = 'DokuWiki-Aktionen deaktivieren';
 $lang['disableactions_check']  = 'Check';
 $lang['disableactions_subscription'] = 'Seiten-Abonnements';
 $lang['disableactions_wikicode'] = 'Quelltext betrachten/exportieren';
 $lang['disableactions_profile_delete'] = 'Eigenes Benutzerprofil löschen';
 $lang['disableactions_other']  = 'Andere Aktionen (durch Komma getrennt)';
-$lang['sneaky_index']          = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Übersicht. Wenn diese Option aktiviert wird, werden alle Namensräume, für die der Benutzer keine Lese-Rechte hat, nicht angezeigt. Dies kann unter Umständen dazu führen, das lesbare Unter-Namensräume nicht angezeigt werden und macht die Übersicht evtl. unbrauchbar in Kombination mit bestimmten ACL Einstellungen.';
+$lang['disableactions_rss']    = 'XML-Syndikation (RSS)';
 $lang['auth_security_timeout'] = 'Authentifikations-Timeout (Sekunden)';
 $lang['securecookie']          = 'Sollen Cookies, die via HTTPS gesetzt wurden nur per HTTPS versendet werden? Deaktivieren Sie diese Option, wenn nur der Login Ihres Wikis mit SSL gesichert ist, aber das Betrachten des Wikis ungesichert geschieht.';
 $lang['remote']                = 'Aktiviert den externen API-Zugang. Diese Option erlaubt es externen Anwendungen von außen auf die XML-RPC-Schnittstelle oder anderweitigen Schnittstellen zu zugreifen.';
 $lang['remoteuser']            = 'Zugriff auf die externen Schnittstellen durch kommaseparierte Angabe von Benutzern oder Gruppen einschränken. Ein leeres Feld erlaubt Zugriff für jeden.';
-$lang['updatecheck']           = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.';
-$lang['userewrite']            = 'URL rewriting';
-$lang['useslash']              = 'Schrägstrich (/) als Namensraumtrenner in URLs verwenden';
+$lang['usewordblock']          = 'Spam-Blocking benutzen';
+$lang['relnofollow']           = 'rel="nofollow" verwenden';
+$lang['indexdelay']            = 'Zeit bevor Suchmaschinenindexierung erlaubt ist';
+$lang['mailguard']             = 'E-Mail-Adressen schützen';
+$lang['iexssprotect']          = 'Hochgeladene Dateien auf bösartigen JavaScript- und HTML-Code untersuchen';
 $lang['usedraft']              = 'Während des Bearbeitens automatisch Zwischenentwürfe speichern';
-$lang['sepchar']               = 'Worttrenner für Seitennamen in URLs';
-$lang['canonical']             = 'Immer Links mit vollständigen URLs erzeugen';
-$lang['fnencode']              = 'Methode um nicht-ASCII Dateinamen zu kodieren.';
-$lang['autoplural']            = 'Bei Links automatisch nach vorhandenen Pluralformen suchen';
-$lang['compression']           = 'Komprimierungsmethode für alte Seitenrevisionen';
-$lang['cachetime']             = 'Maximale Cachespeicherung (Sekunden)';
+$lang['htmlok']                = 'HTML erlauben';
+$lang['phpok']                 = 'PHP erlauben';
 $lang['locktime']              = 'Maximales Alter für Seitensperren (Sekunden)';
+$lang['cachetime']             = 'Maximale Cachespeicherung (Sekunden)';
+$lang['target____wiki']        = 'Zielfenster für interne Links (target Attribut)';
+$lang['target____interwiki']   = 'Zielfenster für InterWiki-Links (target Attribut)';
+$lang['target____extern']      = 'Zielfenster für Externe Links (target Attribut)';
+$lang['target____media']       = 'Zielfenster für (Bild-)Dateien (target Attribut)';
+$lang['target____windows']     = 'Zielfenster für Windows Freigaben (target Attribut)';
+$lang['mediarevisions']        = 'Media-Revisionen (ältere Versionen) aktivieren?';
+$lang['refcheck']              = 'Auf Verwendung beim Löschen von Media-Dateien testen';
+$lang['gdlib']                 = 'GD Lib Version';
+$lang['im_convert']            = 'Pfad zum ImageMagicks-Konvertierwerkzeug';
+$lang['jpg_quality']           = 'JPEG Kompressionsqualität (0-100)';
 $lang['fetchsize']             = 'Maximale Größe (in Bytes), die fetch.php von extern herunterladen darf';
+$lang['subscribers']           = 'E-Mail-Abos zulassen';
+$lang['subscribe_time']        = 'Zeit nach der Zusammenfassungs- und Änderungslisten-E-Mails verschickt werden; Dieser Wert sollte kleiner als die in recent_days konfigurierte Zeit sein.';
 $lang['notify']                = 'Änderungsmitteilungen an diese E-Mail-Adresse versenden';
 $lang['registernotify']        = 'Information über neu registrierte Benutzer an diese E-Mail-Adresse senden';
 $lang['mailfrom']              = 'Absender-E-Mail-Adresse für automatische Mails';
 $lang['mailprefix']            = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen';
 $lang['htmlmail']              = 'Versendet optisch angenehmere, aber größere E-Mails im HTML-Format (multipart). Deaktivieren, um Text-Mails zu versenden.';
+$lang['sitemap']               = 'Google Sitemap erzeugen (Tage)';
+$lang['rss_type']              = 'XML-Feed-Format';
+$lang['rss_linkto']            = 'XML-Feed verlinken auf';
+$lang['rss_content']           = 'Welche Inhalte sollen im XML-Feed dargestellt werden?';
+$lang['rss_update']            = 'XML-Feed Aktualisierungsintervall (Sekunden)';
+$lang['rss_show_summary']      = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen';
+$lang['rss_media']             = 'Welche Änderungen sollen im XML-Feed angezeigt werden?';
+$lang['updatecheck']           = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.';
+$lang['userewrite']            = 'URL rewriting';
+$lang['useslash']              = 'Schrägstrich (/) als Namensraumtrenner in URLs verwenden';
+$lang['sepchar']               = 'Worttrenner für Seitennamen in URLs';
+$lang['canonical']             = 'Immer Links mit vollständigen URLs erzeugen';
+$lang['fnencode']              = 'Methode um nicht-ASCII Dateinamen zu kodieren.';
+$lang['autoplural']            = 'Bei Links automatisch nach vorhandenen Pluralformen suchen';
+$lang['compression']           = 'Komprimierungsmethode für alte Seitenrevisionen';
 $lang['gzip_output']           = 'Seiten mit gzip komprimiert ausliefern';
-$lang['gdlib']                 = 'GD Lib Version';
-$lang['im_convert']            = 'Pfad zum ImageMagicks-Konvertierwerkzeug';
-$lang['jpg_quality']           = 'JPEG Kompressionsqualität (0-100)';
-$lang['subscribers']           = 'E-Mail-Abos zulassen';
-$lang['subscribe_time']        = 'Zeit nach der Zusammenfassungs- und Änderungslisten-E-Mails verschickt werden; Dieser Wert sollte kleiner als die in recent_days konfigurierte Zeit sein.';
 $lang['compress']              = 'JavaScript und Stylesheets komprimieren';
 $lang['cssdatauri']            = 'Größe in Bytes, bis zu der Bilder in CSS-Dateien referenziert werden können, um HTTP-Anfragen zu minimieren. Diese Technik funktioniert nicht im IE 7 und älter!  Empfohlene Einstellung: <code>400</code> to <code>600</code> Bytes. Setzen Sie die Einstellung auf <code>0</code> um die Funktion zu deaktivieren.';
-$lang['hidepages']             = 'Seiten verstecken (Regulärer Ausdruck)';
 $lang['send404']               = 'Bei nicht vorhandenen Seiten mit 404 Fehlercode antworten';
-$lang['sitemap']               = 'Google Sitemap erzeugen (Tage)';
 $lang['broken_iua']            = 'Falls die Funktion ignore_user_abort auf Ihrem System nicht funktioniert, könnte der Such-Index nicht funktionieren. IIS+PHP/CGI ist bekannt dafür. Siehe auch <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">Bug 852</a>.';
 $lang['xsendfile']             = 'Den X-Sendfile-Header nutzen, um Dateien direkt vom Webserver ausliefern zu lassen? Ihr Webserver muss dies unterstützen!';
 $lang['renderer_xhtml']        = 'Standard-Renderer für die normale (XHTML) Wiki-Ausgabe.';
 $lang['renderer__core']        = '%s (DokuWiki Kern)';
 $lang['renderer__plugin']      = '%s (Plugin)';
-$lang['rememberme']            = 'Permanente Login-Cookies erlauben (Auf diesem Computer eingeloggt bleiben)';
-$lang['rss_type']              = 'XML-Feed-Format';
-$lang['rss_linkto']            = 'XML-Feed verlinken auf';
-$lang['rss_content']           = 'Welche Inhalte sollen im XML-Feed dargestellt werden?';
-$lang['rss_update']            = 'XML-Feed Aktualisierungsintervall (Sekunden)';
-$lang['recent_days']           = 'Wie viele letzte Änderungen sollen einsehbar bleiben? (Tage)';
-$lang['rss_show_summary']      = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen';
-$lang['rss_media']             = 'Welche Änderungen sollen im XML-Feed angezeigt werden?';
-$lang['target____wiki']        = 'Zielfenster für interne Links (target Attribut)';
-$lang['target____interwiki']   = 'Zielfenster für InterWiki-Links (target Attribut)';
-$lang['target____extern']      = 'Zielfenster für Externe Links (target Attribut)';
-$lang['target____media']       = 'Zielfenster für (Bild-)Dateien (target Attribut)';
-$lang['target____windows']     = 'Zielfenster für Windows Freigaben (target Attribut)';
 $lang['dnslookups']            = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn du einen langsamen, unbrauchbaren DNS-Server verwendest oder die Funktion nicht benötigst, dann sollte diese Option deaktiviert sein.';
 $lang['proxy____host']         = 'Proxy-Server';
 $lang['proxy____port']         = 'Proxy-Port';
@@ -197,6 +199,7 @@ $lang['xsendfile_o_2']         = 'Standard X-Sendfile-Header';
 $lang['xsendfile_o_3']         = 'Proprietärer Nginx X-Accel-Redirect-Header';
 $lang['showuseras_o_loginname'] = 'Login-Name';
 $lang['showuseras_o_username'] = 'Vollständiger Name des Benutzers';
+$lang['showuseras_o_username_link'] = 'Kompletter Name des Benutzers als Interwiki-Link';
 $lang['showuseras_o_email']    = 'E-Mail-Adresse des Benutzers (je nach Mailguard-Einstellung verschleiert)';
 $lang['showuseras_o_email_link'] = 'E-Mail-Adresse des Benutzers als mailto:-Link';
 $lang['useheading_o_0']        = 'Nie';
diff --git a/lib/plugins/config/lang/en/intro.txt b/lib/plugins/config/lang/en/intro.txt
index 7cf46cee3c23e25a9625c757846765fe11aa2818..01089871c3a15e34dbd1d2d41d21639f60d140bf 100644
--- a/lib/plugins/config/lang/en/intro.txt
+++ b/lib/plugins/config/lang/en/intro.txt
@@ -5,5 +5,3 @@ Use this page to control the settings of your DokuWiki installation.  For help o
 Settings shown with a light red background are protected and can not be altered with this plugin. Settings shown with a blue background are the default values and settings shown with a white background have been set locally for this particular installation.  Both blue and white settings can be altered.
 
 Remember to press the **Save** button before leaving this page otherwise your changes will be lost.
-
-
diff --git a/lib/plugins/config/lang/eo/lang.php b/lib/plugins/config/lang/eo/lang.php
index 440d771dcca39ae24f09b706ed79ffe165ed0d4c..566da0d2d052e67d7589490125fa4cf834d36afd 100644
--- a/lib/plugins/config/lang/eo/lang.php
+++ b/lib/plugins/config/lang/eo/lang.php
@@ -137,7 +137,7 @@ $lang['compress']              = 'Kompaktigi CSS-ajn kaj ĵavaskriptajn elmetojn
 $lang['cssdatauri']            = 'Grandeco en bitokoj, ĝis kiom en CSS-dosieroj referencitaj bildoj enmetiĝu rekte en la stilfolion por malgrandigi vanan HTTP-kapan trafikon. Tiu tekniko ne funkcias en IE 7 aŭ pli frua!
 <code>400</code> ĝis <code>600</code> bitokoj estas bona grandeco. Indiku <code>0</code> por malebligi enmeton.';
 $lang['send404']               = 'Sendi la mesaĝon "HTTP 404/Paĝo ne trovita" por ne ekzistantaj paĝoj';
-$lang['broken_iua']            = 'Ĉu la funkcio "ignore_user_abort" difektas en via sistemo? Tio povus misfunkciigi la serĉindekson. IIS+PHP/CGI estas konata kiel fuŝaĵo. Vidu <a href="http://bugs.splitbrain.org/?do=details&task_id=852&">Cimon 852</a> por pli da informoj.';
+$lang['broken_iua']            = 'Ĉu la funkcio "ignore_user_abort" difektas en via sistemo? Tio povus misfunkciigi la serĉindekson. IIS+PHP/CGI estas konata kiel fuŝaĵo. Vidu <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">Cimon 852</a> por pli da informoj.';
 $lang['xsendfile']             = 'Ĉu uzi la kaplinion X-Sendfile por ebligi al la retservilo liveri fiksajn dosierojn? Via retservilo subtenu tion.';
 $lang['renderer_xhtml']        = 'Prezentilo por la ĉefa vikia rezulto (xhtml)';
 $lang['renderer__core']        = '%s (DokuWiki-a kerno)';
diff --git a/lib/plugins/config/lang/es/lang.php b/lib/plugins/config/lang/es/lang.php
index 847b326a8a241453c9fca9e42b59591ba54eecef..74946bde868c7374054451e4ba64d0f51dcdfb30 100644
--- a/lib/plugins/config/lang/es/lang.php
+++ b/lib/plugins/config/lang/es/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * spanish language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Miguel Pagano <miguel.pagano@gmail.com>
  * @author Oscar M. Lage <r0sk10@gmail.com>
  * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
@@ -24,6 +24,7 @@
  * @author Ruben Figols <ruben.figols@gmail.com>
  * @author Gerardo Zamudio <gerardo@gerardozamudio.net>
  * @author Mercè López mercelz@gmail.com
+ * @author Domingo Redal <docxml@gmail.com>
  */
 $lang['menu']                  = 'Parámetros de configuración';
 $lang['error']                 = 'Los parámetros no han sido actualizados a causa de un valor inválido, por favor revise los cambios y re-envíe el formulario. <br /> Los valores incorrectos se mostrarán con un marco rojo alrededor.';
@@ -97,7 +98,9 @@ $lang['disableactions']        = 'Deshabilitar acciones DokuWiki';
 $lang['disableactions_check']  = 'Controlar';
 $lang['disableactions_subscription'] = 'Suscribirse/Cancelar suscripción';
 $lang['disableactions_wikicode'] = 'Ver la fuente/Exportar en formato raw';
+$lang['disableactions_profile_delete'] = 'Borrar tu propia cuenta';
 $lang['disableactions_other']  = 'Otras acciones (separadas por coma)';
+$lang['disableactions_rss']    = 'Sindicación XML (RSS)';
 $lang['auth_security_timeout'] = 'Tiempo de Autenticación (en segundos), por motivos de seguridad';
 $lang['securecookie']          = 'Las cookies establecidas por HTTPS, ¿el naveagdor solo puede enviarlas por HTTPS? Inhabilite esta opción cuando solo se asegure con SSL la entrada, pero no la navegación de su wiki.';
 $lang['remote']                = 'Activar el sistema API remoto. Esto permite a otras aplicaciones acceder al wiki a traves de XML-RPC u otros mecanismos.';
@@ -202,6 +205,7 @@ $lang['xsendfile_o_2']         = 'Encabezado X-Sendfile estándar';
 $lang['xsendfile_o_3']         = 'Encabezado propietario Nginx X-Accel-Redirect';
 $lang['showuseras_o_loginname'] = 'Nombre de entrada';
 $lang['showuseras_o_username'] = 'Nombre completo del usuario';
+$lang['showuseras_o_username_link'] = 'Nombre completo del usuario como enlace de usuario interwiki';
 $lang['showuseras_o_email']    = 'Dirección de correo electrónico del usuario (ofuscada según la configuración de "mailguard")';
 $lang['showuseras_o_email_link'] = 'Dirección de correo de usuario como enlace de envío de correo';
 $lang['useheading_o_0']        = 'Nunca';
diff --git a/lib/plugins/config/lang/fa/intro.txt b/lib/plugins/config/lang/fa/intro.txt
index f5b6ba235d181fa624043c513ff6f44c6a5b4106..31bbaea98daa731c4bc89b30ba6172e41e25bcb0 100644
--- a/lib/plugins/config/lang/fa/intro.txt
+++ b/lib/plugins/config/lang/fa/intro.txt
@@ -5,4 +5,4 @@
 
 تنظیماتی که با پیش‌زمینه‌ی قرمز مشخص شده‌اند، غیرقابل تغییر می‌باشند. تنظیماتی که به پیش‌زمینه‌ی آبی مشخص شده‌اند نیز حامل مقادیر پیش‌فرض می‌باشند و تنظیماتی که پیش‌زمینه‌ی سفید دارند به طور محلی برای این سیستم تنظیم شده‌اند. تمامی مقادیر آبی و سفید قابلیت تغییر دارند.
 
-به یاد داشته باشید که قبل از ترک صفحه، دکمه‌ی **ذخیره** را بفشارید، در غیر این صورت تنظیمات شما از بین خواهد رفت.
\ No newline at end of file
+به یاد داشته باشید که قبل از ترک صفحه، دکمه‌ی **ذخیره** را بفشارید، در غیر این صورت تنظیمات شما از بین خواهد رفت.
diff --git a/lib/plugins/config/lang/fa/lang.php b/lib/plugins/config/lang/fa/lang.php
index dd97f716e7e0ac3afd96b2b7ea80a465233c8298..00b60f062b9e7b6e5d018576d8c3cfb2ffc9dca4 100644
--- a/lib/plugins/config/lang/fa/lang.php
+++ b/lib/plugins/config/lang/fa/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Persian language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author behrad eslamifar <behrad_es@yahoo.com)
  * @author Mohsen Firoozmandan <info@mambolearn.com>
  * @author omidmr@gmail.com
@@ -9,6 +10,8 @@
  * @author Mohammad Reza Shoaei <shoaei@gmail.com>
  * @author Milad DZand <M.DastanZand@gmail.com>
  * @author AmirH Hassaneini <mytechmix@gmail.com>
+ * @author Mohmmad Razavi <sepent@gmail.com>
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
  */
 $lang['menu']                  = 'تنظیمات پیکر‌بندی';
 $lang['error']                 = 'به دلیل ایراد در مقادیر وارد شده، تنظیمات اعمال نشد، خواهشمندیم تغییرات را مجددن کنترل نمایید و دوباره ارسال کنید.<br/> مقادیر مشکل‌دار با کادر قرمز مشخص شده‌اند.';
@@ -82,7 +85,9 @@ $lang['disableactions']        = 'غیرفعال کردن فعالیت‌های
 $lang['disableactions_check']  = 'بررسی';
 $lang['disableactions_subscription'] = 'عضویت/عدم عضویت';
 $lang['disableactions_wikicode'] = 'نمایش سورس/برون‌بری خام';
+$lang['disableactions_profile_delete'] = 'حذف حساب کاربری خود.';
 $lang['disableactions_other']  = 'فعالیت‌های دیگر (با ویرگول انگلیسی «,» از هم جدا کنید)';
+$lang['disableactions_rss']    = 'خبرخوان (RSS)';
 $lang['auth_security_timeout'] = 'زمان انقضای معتبرسازی به ثانیه';
 $lang['securecookie']          = 'آیا کوکی‌ها باید با قرارداد HTTPS ارسال شوند؟ این گزینه را زمانی که فقط صفحه‌ی ورود ویکی‌تان با SSL امن شده است، اما ویکی را ناامن مرور می‌کنید، غیرفعال نمایید.';
 $lang['remote']                = 'سیستم API راه دور را فعال کنید . این به سایر کاربردها اجازه می دهد که به ویکی از طریق XML-RPC یا سایر مکانیزم ها دسترسی داشته باشند.';
@@ -188,6 +193,7 @@ $lang['xsendfile_o_2']         = 'هدر استاندارد X-Sendfile';
 $lang['xsendfile_o_3']         = 'هدر اختصاصی X-Accel-Redirect در وب سرور Nginx';
 $lang['showuseras_o_loginname'] = 'نام کاربری';
 $lang['showuseras_o_username'] = 'نام کامل کاربران';
+$lang['showuseras_o_username_link'] = 'نام کامل کاربر به عنوان لینک داخلی ویکی';
 $lang['showuseras_o_email']    = 'آدرس ایمیل کاربران (با تنظیمات «نگهبان ایمیل» مبهم می‌شود)';
 $lang['showuseras_o_email_link'] = 'نمایش ایمیل کاربران با افزودن mailto';
 $lang['useheading_o_0']        = 'هرگز';
diff --git a/lib/plugins/config/lang/fi/intro.txt b/lib/plugins/config/lang/fi/intro.txt
index f6eedb50c015238b3cf173405c0e22631eb47db8..2765a18afe19ef025a0ff5258408df190a5382a3 100644
--- a/lib/plugins/config/lang/fi/intro.txt
+++ b/lib/plugins/config/lang/fi/intro.txt
@@ -4,4 +4,4 @@ Käytä tätä sivua hallitaksesi DokuWikisi asetuksia. Apua yksittäisiin asetu
 
 Asetukset, jotka näkyvät vaaleanpunaisella taustalla ovat suojattuja, eikä niitä voi muutta tämän liitännäisen avulla. Asetukset, jotka näkyvät sinisellä taustalla ovat oletusasetuksia. Asetukset valkoisella taustalla ovat asetettu paikallisesti tätä asennusta varten. Sekä sinisiä että valkoisia asetuksia voi muokata.
 
-Muista painaa **TALLENNA**-nappia ennen kuin poistut sivulta. Muuten muutoksesi häviävät.
\ No newline at end of file
+Muista painaa **TALLENNA**-nappia ennen kuin poistut sivulta. Muuten muutoksesi häviävät.
diff --git a/lib/plugins/config/lang/fr/intro.txt b/lib/plugins/config/lang/fr/intro.txt
index 3d71f618488f12de0f93a1d284ce05a365dfab41..afc5805d8a9e9bc3420ee6bd62cc60c6e5278fe2 100644
--- a/lib/plugins/config/lang/fr/intro.txt
+++ b/lib/plugins/config/lang/fr/intro.txt
@@ -5,5 +5,3 @@ Utilisez cette page pour contrôler les paramètres de votre installation de Dok
 Les paramètres affichés sur un fond rouge sont protégés et ne peuvent être modifiés avec cette extension. Les paramètres affichés sur un fond bleu sont les valeurs par défaut et les valeurs spécifiquement définies pour votre installation sont affichées sur un fond blanc. Seuls les paramètres sur fond bleu ou blanc peuvent être modifiés.
 
 N'oubliez pas d'utiliser le bouton **ENREGISTRER** avant de quitter cette page, sinon vos modifications ne seront pas prises en compte !
-
-
diff --git a/lib/plugins/config/lang/fr/lang.php b/lib/plugins/config/lang/fr/lang.php
index e92144b22fe7114a8fd11f8deff0b3b6d9666b4f..88f78f4252e9aac21a7bfa4a491d7a9b2e5f3d7d 100644
--- a/lib/plugins/config/lang/fr/lang.php
+++ b/lib/plugins/config/lang/fr/lang.php
@@ -1,26 +1,30 @@
 <?php
+
 /**
- * french language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Guy Brand <gb@unistra.fr>
  * @author Delassaux Julien <julien@delassaux.fr>
  * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
- * @author stephane.gully@gmail.com
+ * @author <stephane.gully@gmail.com>
  * @author Guillaume Turri <guillaume.turri@gmail.com>
  * @author Erik Pedersen <erik.pedersen@shaw.ca>
  * @author olivier duperray <duperray.olivier@laposte.net>
  * @author Vincent Feltz <psycho@feltzv.fr>
  * @author Philippe Bajoit <philippe.bajoit@gmail.com>
  * @author Florian Gaub <floriang@floriang.net>
- * @author Samuel Dorsaz samuel.dorsaz@novelion.net
+ * @author Samuel Dorsaz <samuel.dorsaz@novelion.net>
  * @author Johan Guilbaud <guilbaud.johan@gmail.com>
- * @author schplurtz@laposte.net
- * @author skimpax@gmail.com
+ * @author <skimpax@gmail.com>
  * @author Yannick Aure <yannick.aure@gmail.com>
  * @author Olivier DUVAL <zorky00@gmail.com>
  * @author Anael Mobilia <contrib@anael.eu>
  * @author Bruno Veilleux <bruno.vey@gmail.com>
+ * @author Carbain Frédéric <fcarbain@yahoo.fr>
+ * @author Nicolas Friedli <nicolas@theologique.ch>
+ * @author Floriang <antispam@floriang.eu>
+ * @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
+ * @author Simon DELAGE <simon.geekitude@gmail.com>
  */
 $lang['menu']                  = 'Paramètres de configuration';
 $lang['error']                 = 'Paramètres non modifiés en raison d\'une valeur invalide, vérifiez vos réglages puis réessayez. <br />Les valeurs erronées sont entourées d\'une bordure rouge.';
@@ -33,7 +37,7 @@ $lang['security']              = 'Avertissement de sécurité : modifier cette o
 $lang['_configuration_manager'] = 'Gestionnaire de configuration';
 $lang['_header_dokuwiki']      = 'Paramètres de DokuWiki';
 $lang['_header_plugin']        = 'Paramètres des extensions';
-$lang['_header_template']      = 'Paramètres des modèles';
+$lang['_header_template']      = 'Paramètres du modèle';
 $lang['_header_undefined']     = 'Paramètres indéfinis';
 $lang['_basic']                = 'Paramètres de base';
 $lang['_display']              = 'Paramètres d\'affichage';
@@ -94,7 +98,9 @@ $lang['disableactions']        = 'Actions à désactiver dans DokuWiki';
 $lang['disableactions_check']  = 'Vérifier';
 $lang['disableactions_subscription'] = 'Abonnement aux pages';
 $lang['disableactions_wikicode'] = 'Afficher le texte source';
+$lang['disableactions_profile_delete'] = 'Supprimer votre propre compte';
 $lang['disableactions_other']  = 'Autres actions (séparées par des virgules)';
+$lang['disableactions_rss']    = 'Syndication XML (RSS)';
 $lang['auth_security_timeout'] = 'Délai d\'expiration de sécurité (secondes)';
 $lang['securecookie']          = 'Les cookies définis via HTTPS doivent-ils n\'être envoyé par le navigateur que via HTTPS ? Désactivez cette option lorsque seule la connexion à votre wiki est sécurisée avec SSL et que la navigation sur le wiki est effectuée de manière non sécurisée.';
 $lang['remote']                = 'Active l\'API système distante. Ceci permet à d\'autres applications d\'accéder au wiki via XML-RPC ou d\'autres mécanismes.';
@@ -200,6 +206,7 @@ $lang['xsendfile_o_2']         = 'Entête standard X-Sendfile';
 $lang['xsendfile_o_3']         = 'En-tête propriétaire Nginx X-Accel-Redirect';
 $lang['showuseras_o_loginname'] = 'Identifiant de l\'utilisateur';
 $lang['showuseras_o_username'] = 'Nom de l\'utilisateur';
+$lang['showuseras_o_username_link'] = 'Nom complet de l\'utilisateur en tant que lien interwiki';
 $lang['showuseras_o_email']    = 'Courriel de l\'utilisateur (brouillé suivant les paramètres de brouillage sélectionnés)';
 $lang['showuseras_o_email_link'] = 'Courriel de l\'utilisateur en tant que lien mailto:';
 $lang['useheading_o_0']        = 'Jamais';
diff --git a/lib/plugins/config/lang/he/intro.txt b/lib/plugins/config/lang/he/intro.txt
index 010c69018d36dc3982554ccb2605d99c7f49f0f5..d61a93861ff6f8def21ceeea7f1f965228f2682f 100644
--- a/lib/plugins/config/lang/he/intro.txt
+++ b/lib/plugins/config/lang/he/intro.txt
@@ -5,5 +5,3 @@
 הגדרות עם רקע אדום-בהיר מוגנות ואין אפשרות לשנותן עם תוסף זה. הגדרות עם רקע כחול הן בעלות ערך ברירת המחדל והגדרות עם רקע לבן הוגדרו באופן מקומי עבור התקנה זו. ההגדרות בעלות הרקעים הכחול והלבן הן ברות שינוי.
 
 יש לזכור ללחוץ על כפתור ה**שמירה** טרם עזיבת דף זה פן יאבדו השינויים.
-
-
diff --git a/lib/plugins/config/lang/he/lang.php b/lib/plugins/config/lang/he/lang.php
index bddfd90afb6bdf6dcc4c3fb9a9a972764bb116b5..416d775d00c0dddeacfa2c19fe172c16b3fe8850 100644
--- a/lib/plugins/config/lang/he/lang.php
+++ b/lib/plugins/config/lang/he/lang.php
@@ -1,13 +1,14 @@
 <?php
+
 /**
- * hebrew language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author DoK <kamberd@yahoo.com>
  * @author Dotan Kamber <kamberd@yahoo.com>
  * @author Moshe Kaplan <mokplan@gmail.com>
  * @author Yaron Yogev <yaronyogev@gmail.com>
  * @author Yaron Shahrabani <sh.yaron@gmail.com>
+ * @author sagi <sagiyosef@gmail.com>
  */
 $lang['menu']                  = 'הגדרות תצורה';
 $lang['error']                 = 'ההגדרות לא עודכנו בגלל ערך לא תקף, נא לעיין בשינויים ולשלוח שנית.
@@ -33,22 +34,22 @@ $lang['_network']              = 'הגדרות רשת';
 $lang['_msg_setting_undefined'] = 'אין מידע-על להגדרה.';
 $lang['_msg_setting_no_class'] = 'אין קבוצה להגדרה.';
 $lang['_msg_setting_no_default'] = 'אין ערך ברירת מחדל.';
-$lang['fmode']                 = 'מצב יצירת קובץ';
-$lang['dmode']                 = 'מצב יצירת ספריה';
+$lang['title']                 = 'כותרת הויקי';
+$lang['start']                 = 'שם דף הפתיחה';
 $lang['lang']                  = 'שפה';
+$lang['template']              = 'תבנית';
+$lang['savedir']               = 'ספריה לשמירת מידע';
 $lang['basedir']               = 'ספרית בסיס';
 $lang['baseurl']               = 'כתובת URL בסיסית';
-$lang['savedir']               = 'ספריה לשמירת מידע';
-$lang['start']                 = 'שם דף הפתיחה';
-$lang['title']                 = 'כותרת הויקי';
-$lang['template']              = 'תבנית';
-$lang['fullpath']              = 'הצגת נתיב מלא לדפים בתחתית';
+$lang['dmode']                 = 'מצב יצירת ספריה';
+$lang['fmode']                 = 'מצב יצירת קובץ';
+$lang['allowdebug']            = 'אפשר דיבוג <b>יש לבטל אם אין צורך!</b>';
 $lang['recent']                = 'שינויים אחרונים';
+$lang['recent_days']           = 'כמה שינויים אחרונים לשמור (ימים)';
 $lang['breadcrumbs']           = 'מספר עקבות להיסטוריה';
 $lang['youarehere']            = 'עקבות היררכיות להיסטוריה';
+$lang['fullpath']              = 'הצגת נתיב מלא לדפים בתחתית';
 $lang['typography']            = 'שימוש בחלופות טיפוגרפיות';
-$lang['htmlok']                = 'אישור שיבוץ HTML';
-$lang['phpok']                 = 'אישור שיבוץ PHP';
 $lang['dformat']               = 'תסדיר תאריך (נא לפנות לפונקציה <a href="http://www.php.net/strftime">strftime</a> של PHP)';
 $lang['signature']             = 'חתימה';
 $lang['toptoclevel']           = 'רמה עליונה בתוכן הענינים';
@@ -57,13 +58,8 @@ $lang['maxseclevel']           = 'רמה מירבית בעריכת קטעים';
 $lang['camelcase']             = 'השתמש בראשיות גדולות לקישורים';
 $lang['deaccent']              = 'נקה שמות דפים';
 $lang['useheading']            = 'השתמש בכותרת הראשונה לשם הדף';
-$lang['refcheck']              = 'בדוק שיוך מדיה';
-$lang['allowdebug']            = 'אפשר דיבוג <b>יש לבטל אם אין צורך!</b>';
-$lang['usewordblock']          = 'חסימת דואר זבל לפי רשימת מילים';
-$lang['indexdelay']            = 'השהיה בטרם הכנסה לאינדקס (שניות)';
-$lang['relnofollow']           = 'השתמש ב- rel="nofollow" לקישורים חיצוניים';
-$lang['mailguard']             = 'הגן על כתובות דוא"ל';
-$lang['iexssprotect']          = 'בדוק את הדפים המועלים לחשד ל-JavaScript או קוד HTML זדוני';
+$lang['sneaky_index']          = 'כברירת מחדל, דוקוויקי יציג את כל מרחבי השמות בתצוגת תוכן הענינים. בחירה באפשרות זאת תסתיר את אלו שבהם למשתמש אין הרשאות קריאה. התוצאה עלולה להיות הסתרת תת מרחבי שמות אליהם יש למשתמש גישה. באופן זה תוכן הענינים עלול להפוך לחסר תועלת עם הגדרות ACL מסוימות';
+$lang['hidepages']             = 'הסתר דפים תואמים (ביטויים רגולריים)';
 $lang['useacl']                = 'השתמש ברשימות בקרת גישה';
 $lang['autopasswd']            = 'צור סיסמאות באופן אוטומטי';
 $lang['authtype']              = 'מנוע הזדהות';
@@ -77,47 +73,52 @@ $lang['disableactions_check']  = 'בדיקה';
 $lang['disableactions_subscription'] = 'הרשמה/הסרה מרשימה';
 $lang['disableactions_wikicode'] = 'הצגת המקור/יצוא גולמי';
 $lang['disableactions_other']  = 'פעולות אחרות (מופרדות בפסיק)';
-$lang['sneaky_index']          = 'כברירת מחדל, דוקוויקי יציג את כל מרחבי השמות בתצוגת תוכן הענינים. בחירה באפשרות זאת תסתיר את אלו שבהם למשתמש אין הרשאות קריאה. התוצאה עלולה להיות הסתרת תת מרחבי שמות אליהם יש למשתמש גישה. באופן זה תוכן הענינים עלול להפוך לחסר תועלת עם הגדרות ACL מסוימות';
 $lang['auth_security_timeout'] = 'מגבלת אבטח פסק הזמן להזדהות (שניות)';
+$lang['usewordblock']          = 'חסימת דואר זבל לפי רשימת מילים';
+$lang['relnofollow']           = 'השתמש ב- rel="nofollow" לקישורים חיצוניים';
+$lang['indexdelay']            = 'השהיה בטרם הכנסה לאינדקס (שניות)';
+$lang['mailguard']             = 'הגן על כתובות דוא"ל';
+$lang['iexssprotect']          = 'בדוק את הדפים המועלים לחשד ל-JavaScript או קוד HTML זדוני';
+$lang['usedraft']              = 'שמור טיוטות באופן אוטומטי בעת עריכה';
+$lang['htmlok']                = 'אישור שיבוץ HTML';
+$lang['phpok']                 = 'אישור שיבוץ PHP';
+$lang['locktime']              = 'גיל מירבי לקבצי נעילה (שניות)';
+$lang['cachetime']             = 'גיל מירבי לזכרון מטמון (שניות)';
+$lang['target____wiki']        = 'חלון יעד לקישורים פנימיים';
+$lang['target____interwiki']   = 'חלון יעד לקישורים בין מערכות ויקי';
+$lang['target____extern']      = 'חלון יעד לקישורים חיצוניים';
+$lang['target____media']       = 'חלון יעד לקישור למדיה';
+$lang['target____windows']     = 'חלון יעד לתיקיות משותפות';
+$lang['refcheck']              = 'בדוק שיוך מדיה';
+$lang['gdlib']                 = 'גרסת ספרית ה-GD';
+$lang['im_convert']            = 'נתיב לכלי ה-convert של ImageMagick';
+$lang['jpg_quality']           = 'איכות הדחיסה של JPG (0-100)';
+$lang['fetchsize']             = 'גודל הקובץ המירבי (bytes) ש-fetch.php יכול להוריד מבחוץ';
+$lang['subscribers']           = 'התר תמיכה ברישום לדפים';
+$lang['notify']                = 'שלח התראות על שינויים לכתובת דוא"ל זו';
+$lang['registernotify']        = 'שלח מידע על משתמשים רשומים חדשים לכתובת דוא"ל זו';
+$lang['mailfrom']              = 'כתובת הדוא"ל לשימוש בדברי דוא"ל אוטומטיים';
+$lang['sitemap']               = 'צור מפת אתר של Google (ימים)';
+$lang['rss_type']              = 'סוג פלט XML';
+$lang['rss_linkto']            = 'פלט ה-XML מקשר אל';
+$lang['rss_content']           = 'מה להציג בפרטי פלט ה-XML';
+$lang['rss_update']            = 'פלט ה-XML מתעדכן כל (שניות)';
+$lang['rss_show_summary']      = 'פלט ה-XML מציג תקציר בכותרת';
 $lang['updatecheck']           = 'בדיקת עידכוני אבטחה והתראות? על DokuWiki להתקשר אל update.dokuwiki.org לצורך כך.';
 $lang['userewrite']            = 'השתמש בכתובות URL יפות';
 $lang['useslash']              = 'השתמש בלוכסן להגדרת מרחבי שמות בכתובות';
-$lang['usedraft']              = 'שמור טיוטות באופן אוטומטי בעת עריכה';
 $lang['sepchar']               = 'מפריד בין מילות שם-דף';
 $lang['canonical']             = 'השתמש בכתובות URL מלאות';
 $lang['autoplural']            = 'בדוק לצורת רבים בקישורים';
 $lang['compression']           = 'אופן דחיסת קבצים ב-attic';
-$lang['cachetime']             = 'גיל מירבי לזכרון מטמון (שניות)';
-$lang['locktime']              = 'גיל מירבי לקבצי נעילה (שניות)';
-$lang['fetchsize']             = 'גודל הקובץ המירבי (bytes) ש-fetch.php יכול להוריד מבחוץ';
-$lang['notify']                = 'שלח התראות על שינויים לכתובת דוא"ל זו';
-$lang['registernotify']        = 'שלח מידע על משתמשים רשומים חדשים לכתובת דוא"ל זו';
-$lang['mailfrom']              = 'כתובת הדוא"ל לשימוש בדברי דוא"ל אוטומטיים';
 $lang['gzip_output']           = 'השתמש בקידוד תוכן של gzip עבור xhtml';
-$lang['gdlib']                 = 'גרסת ספרית ה-GD';
-$lang['im_convert']            = 'נתיב לכלי ה-convert של ImageMagick';
-$lang['jpg_quality']           = 'איכות הדחיסה של JPG (0-100)';
-$lang['subscribers']           = 'התר תמיכה ברישום לדפים';
 $lang['compress']              = 'פלט קומפקטי של CSS ו-javascript';
-$lang['hidepages']             = 'הסתר דפים תואמים (ביטויים רגולריים)';
 $lang['send404']               = 'שלח "HTTP 404/Page Not Found" עבור דפים שאינם קיימים';
-$lang['sitemap']               = 'צור מפת אתר של Google (ימים)';
 $lang['broken_iua']            = 'האם הפעולה ignore_user_abort תקולה במערכת שלך? הדבר עלול להביא לתוכן חיפוש שאינו תקין. IIS+PHP/CGI ידוע כתקול. ראה את <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">באג 852</a> למידע נוסף';
 $lang['xsendfile']             = 'להשתמש בכותר X-Sendfile כדי לאפשר לשרת לספק קבצים סטטיים? על השרת שלך לתמוך באפשרות זאת.';
 $lang['renderer_xhtml']        = 'מחולל לשימוש עבור פלט הויקי העיקרי (xhtml)';
 $lang['renderer__core']        = '%s (ליבת דוקוויקי)';
 $lang['renderer__plugin']      = '%s (הרחבות)';
-$lang['rss_type']              = 'סוג פלט XML';
-$lang['rss_linkto']            = 'פלט ה-XML מקשר אל';
-$lang['rss_content']           = 'מה להציג בפרטי פלט ה-XML';
-$lang['rss_update']            = 'פלט ה-XML מתעדכן כל (שניות)';
-$lang['recent_days']           = 'כמה שינויים אחרונים לשמור (ימים)';
-$lang['rss_show_summary']      = 'פלט ה-XML מציג תקציר בכותרת';
-$lang['target____wiki']        = 'חלון יעד לקישורים פנימיים';
-$lang['target____interwiki']   = 'חלון יעד לקישורים בין מערכות ויקי';
-$lang['target____extern']      = 'חלון יעד לקישורים חיצוניים';
-$lang['target____media']       = 'חלון יעד לקישור למדיה';
-$lang['target____windows']     = 'חלון יעד לתיקיות משותפות';
 $lang['proxy____host']         = 'שם השרת המתווך';
 $lang['proxy____port']         = 'שער השרת המתווך';
 $lang['proxy____user']         = 'שם המשתמש בשרת המתווך';
diff --git a/lib/plugins/config/lang/hu/lang.php b/lib/plugins/config/lang/hu/lang.php
index 6f774bfacc893895ddaf70e4fad26d60d7845cf7..59d7e9f57a49cd6739d591b11b6d6ceb178410a4 100644
--- a/lib/plugins/config/lang/hu/lang.php
+++ b/lib/plugins/config/lang/hu/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Hungarian language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
  * @author Siaynoq Mage <siaynoqmage@gmail.com>
  * @author schilling.janos@gmail.com
@@ -84,7 +85,9 @@ $lang['disableactions']        = 'Bizonyos DokuWiki tevékenységek (action) til
 $lang['disableactions_check']  = 'Ellenőrzés';
 $lang['disableactions_subscription'] = 'Feliratkozás/Leiratkozás';
 $lang['disableactions_wikicode'] = 'Forrás megtekintése/Nyers adat exportja';
+$lang['disableactions_profile_delete'] = 'Saját felhasználó törlése';
 $lang['disableactions_other']  = 'Egyéb tevékenységek (vesszővel elválasztva)';
+$lang['disableactions_rss']    = 'XML hírfolyam (RSS)';
 $lang['auth_security_timeout'] = 'Authentikációs biztonsági időablak (másodperc)';
 $lang['securecookie']          = 'A böngészők a HTTPS felett beállított sütijüket csak HTTPS felett küldhetik? Kapcsoljuk ki ezt az opciót, ha csak a bejelentkezést védjük SSL-lel, a wiki tartalmának böngészése nyílt forgalommal történik.';
 $lang['remote']                = 'Távoli API engedélyezése. Ezzel más alkalmazások XML-RPC-n keresztül hozzáférhetnek a wikihez.';
@@ -189,6 +192,7 @@ $lang['xsendfile_o_2']         = 'Standard X-Sendfile fejléc';
 $lang['xsendfile_o_3']         = 'Nginx saját X-Accel-Redirect fejléce';
 $lang['showuseras_o_loginname'] = 'Azonosító';
 $lang['showuseras_o_username'] = 'Teljes név';
+$lang['showuseras_o_username_link'] = 'A felhasználó teljes neve belső wiki-hivatkozásként';
 $lang['showuseras_o_email']    = 'E-mail cím (olvashatatlanná téve az e-mailcím védelem beállítása szerint)';
 $lang['showuseras_o_email_link'] = 'E-mail cím mailto: linkként';
 $lang['useheading_o_0']        = 'Soha';
diff --git a/lib/plugins/config/lang/ia/intro.txt b/lib/plugins/config/lang/ia/intro.txt
index 37b970c4f935231a1f015c8b38029d58bf2193fe..eb2e105915ff740f3c7c08df34e9947a9450e399 100644
--- a/lib/plugins/config/lang/ia/intro.txt
+++ b/lib/plugins/config/lang/ia/intro.txt
@@ -4,4 +4,4 @@ Usa iste pagina pro controlar le configurationes de tu installation de DokuWiki.
 
 Le configurationes monstrate super un fundo rubie clar es protegite e non pote esser alterate con iste plug-in. Le configurationes monstrate super un fundo blau es le valores predefinite e le configurationes monstrate super un fundo blanc ha essite definite localmente pro iste particular installation. Le configurationes blau e blanc pote esser alterate.
 
-Rememora de premer le button **SALVEGUARDAR** ante de quitar iste pagina, alteremente tu modificationes essera perdite.
\ No newline at end of file
+Rememora de premer le button **SALVEGUARDAR** ante de quitar iste pagina, alteremente tu modificationes essera perdite.
diff --git a/lib/plugins/config/lang/it/intro.txt b/lib/plugins/config/lang/it/intro.txt
index 617e8c7b5f9baa0498baea0daad922e2ac74a2e8..02984baa7c0be4230d70e23478f698f3e26b4548 100644
--- a/lib/plugins/config/lang/it/intro.txt
+++ b/lib/plugins/config/lang/it/intro.txt
@@ -5,5 +5,3 @@ Usa questa pagina per gestire la configurazione della tua installazione DokuWiki
 Le impostazioni con lo sfondo rosso chiaro sono protette e non possono essere modificate con questo plugin. Le impostazioni con lo sfondo blu contengono i valori predefiniti, e le impostazioni con lo sfondo bianco sono relative solo a questa particolare installazione. Sia le impostazioni su sfondo blu che quelle su sfondo bianco possono essere modificate.
 
 Ricordati di premere il pulsante **SALVA** prima di lasciare questa pagina altrimenti le modifiche andranno perse.
-
-
diff --git a/lib/plugins/config/lang/it/lang.php b/lib/plugins/config/lang/it/lang.php
index 7a831c8ded2aa1e50d02f83851f5c6874de3c790..1e371613c330bc39233e8c5e9dfd4f2c6d41d93f 100644
--- a/lib/plugins/config/lang/it/lang.php
+++ b/lib/plugins/config/lang/it/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * Italian language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Christopher Smith <chris@jalakai.co.uk>
  * @author Silvia Sargentoni <polinnia@tin.it>
  * @author Pietro Battiston toobaz@email.it
@@ -15,6 +15,7 @@
  * @author Jacopo Corbetta <jacopo.corbetta@gmail.com>
  * @author Matteo Pasotti <matteo@xquiet.eu>
  * @author snarchio@gmail.com
+ * @author Torpedo <dgtorpedo@gmail.com>
  */
 $lang['menu']                  = 'Configurazione Wiki';
 $lang['error']                 = 'Impostazioni non aggiornate a causa di un valore non corretto, controlla le modifiche apportate e salva di nuovo.
@@ -90,7 +91,9 @@ $lang['disableactions']        = 'Disabilita azioni DokuWiki';
 $lang['disableactions_check']  = 'Controlla';
 $lang['disableactions_subscription'] = 'Sottoscrivi/Rimuovi sottoscrizione';
 $lang['disableactions_wikicode'] = 'Mostra sorgente/Esporta Raw';
+$lang['disableactions_profile_delete'] = 'Elimina il proprio account';
 $lang['disableactions_other']  = 'Altre azioni (separate da virgola)';
+$lang['disableactions_rss']    = 'XML Syndication (RSS)';
 $lang['auth_security_timeout'] = 'Tempo di sicurezza per l\'autenticazione (secondi)';
 $lang['securecookie']          = 'Devono i cookies impostati tramite HTTPS essere inviati al browser solo tramite HTTPS? Disattiva questa opzione solo quando l\'accesso al tuo wiki viene effettuato con il protocollo SSL ma la navigazione del wiki non risulta sicura.';
 $lang['remote']                = 'Abilita il sistema di API remoto. Questo permette ad altre applicazioni di accedere al wiki tramite XML-RPC o altri meccanismi.';
@@ -195,6 +198,7 @@ $lang['xsendfile_o_2']         = 'Header standard X-Sendfile';
 $lang['xsendfile_o_3']         = 'Header proprietario Nginx X-Accel-Redirect';
 $lang['showuseras_o_loginname'] = 'Nome utente';
 $lang['showuseras_o_username'] = 'Nome completo dell\'utente';
+$lang['showuseras_o_username_link'] = 'Nome completo dell\'utente come link interwiki';
 $lang['showuseras_o_email']    = 'Indirizzo email dell\'utente (offuscato in base alle impostazioni di sicurezza posta)';
 $lang['showuseras_o_email_link'] = 'Indirizzo email dell\'utente come collegamento mailto:';
 $lang['useheading_o_0']        = 'Mai';
diff --git a/lib/plugins/config/lang/ja/intro.txt b/lib/plugins/config/lang/ja/intro.txt
index 0c45471c6ce6194df42e77b58a9e8ded0736b75d..4d98dd3ed0fbae0e2f4a94984abb476ff2b1702c 100644
--- a/lib/plugins/config/lang/ja/intro.txt
+++ b/lib/plugins/config/lang/ja/intro.txt
@@ -1,9 +1,11 @@
 ====== 設定管理 ======
 
-この画面で、Dokuwikiの設定を管理することが出来ます。 個々の設定に関しては [[doku>config]] を参照してください。 このプラグインに関する詳細な情報は [[doku>plugin:config]] を参照してください。
-
-背景が薄い赤になっている場合、その設定は変更することが出来ません。 背景が青の値はデフォルト、背景が白の値は現在の設定となっており、 どちらの値も変更が可能です。
-
-設定の変更後は必ず **保存** ボタンを押して変更を確定してください。 ボタンを押さなかった場合、変更は破棄されます。
+この画面で、Dokuwikiの設定を管理することが出来ます。
+個々の設定に関しては[[doku>ja:config|DokuWiki の設定]]を参照してください。
+このプラグインに関する詳細な情報は[[doku>ja:plugin:config|設定管理プラグイン]]を参照してください。
 
+背景が薄い赤の場合、その設定は変更することが出来ません。
+背景が青の場合はデフォルト設定、背景が白の場合はサイト固有の設定になっており、どちら設定も変更が可能です。
 
+設定の変更後は必ず **保存** ボタンを押して変更を確定してください。
+ボタンを押さなかった場合、変更は破棄されます。
diff --git a/lib/plugins/config/lang/ja/lang.php b/lib/plugins/config/lang/ja/lang.php
index e8cf8227b92fbff0a97a6e94bc9104e40db8f66a..83445e6f12bfaffc4854489bfbd421244d69a453 100644
--- a/lib/plugins/config/lang/ja/lang.php
+++ b/lib/plugins/config/lang/ja/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * japanese language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Yuji Takenaka <webmaster@davilin.com>
  * @author Christopher Smith <chris@jalakai.co.uk>
  * @author Ikuo Obataya <i.obataya@gmail.com>
@@ -10,6 +10,7 @@
  * @author Kazutaka Miyasaka <kazmiya@gmail.com>
  * @author Taisuke Shimamoto <dentostar@gmail.com>
  * @author Satoshi Sahara <sahara.satoshi@gmail.com>
+ * @author Hideaki SAWADA <chuno@live.jp>
  */
 $lang['menu']                  = 'サイト設定';
 $lang['error']                 = '不正な値が存在するため、設定は更新されませんでした。入力値を確認してから、再度更新してください。
@@ -83,9 +84,11 @@ $lang['profileconfirm']        = 'プロフィール変更時に現在のパス
 $lang['rememberme']            = 'ログイン用クッキーを永久に保持することを許可(ログインを保持)';
 $lang['disableactions']        = 'DokuWiki の動作を無効にする';
 $lang['disableactions_check']  = 'チェック';
-$lang['disableactions_subscription'] = '登録 / 解除';
+$lang['disableactions_subscription'] = '変更履歴配信の登録・解除';
 $lang['disableactions_wikicode'] = 'ソース閲覧 / 生データ出力';
+$lang['disableactions_profile_delete'] = '自分のアカウントの抹消';
 $lang['disableactions_other']  = 'その他の動作(カンマ区切り)';
+$lang['disableactions_rss']    = 'XML 配信(RSS)';
 $lang['auth_security_timeout'] = '認証タイムアウト設定(秒)';
 $lang['securecookie']          = 'クッキーをHTTPSにてセットする場合は、ブラウザよりHTTPS経由で送信された場合にみに制限しますか?ログインのみをSSLで行う場合は、この機能を無効にしてください。';
 $lang['remote']                = 'リモートAPIを有効化します。有効化するとXML-RPCまたは他の手段でwikiにアプリケーションがアクセスすることを許可します。';
@@ -190,6 +193,7 @@ $lang['xsendfile_o_2']         = '標準 X-Sendfile ヘッダー';
 $lang['xsendfile_o_3']         = 'Nginx X-Accel-Redirect ヘッダー';
 $lang['showuseras_o_loginname'] = 'ログイン名';
 $lang['showuseras_o_username'] = 'ユーザーのフルネーム';
+$lang['showuseras_o_username_link'] = 'user という InterWiki リンクになったユーザーのフルネーム';
 $lang['showuseras_o_email']    = 'ユーザーのメールアドレス(メールガード設定による難読化)';
 $lang['showuseras_o_email_link'] = 'ユーザーのメールアドレスをリンクにする';
 $lang['useheading_o_0']        = '使用しない';
diff --git a/lib/plugins/config/lang/ko/intro.txt b/lib/plugins/config/lang/ko/intro.txt
index 979bbcb147643ec542388ceaf05d455e8d8e7a68..b05264a64350d86f61fd21e8ee6f0655c14ff065 100644
--- a/lib/plugins/config/lang/ko/intro.txt
+++ b/lib/plugins/config/lang/ko/intro.txt
@@ -1,8 +1,7 @@
 ====== 환경 설정 관리자 ======
 
-도쿠위키를 설치할 때 설정을 바꾸려면 이 페이지를 사용하세요. 개별 설정에 대한 도움말은 [[doku>ko:config]]를 참고하세요. 이 플러그인에 대한 자세한 내용은 [[doku>ko:plugin:config]]를 참고하세요.
+설치된 도쿠위키의 설정을 제어하려면 이 페이지를 사용하세요. 개별 설정에 대한 도움말은 [[doku>ko:config]]를 참조하세요. 이 플러그인에 대한 자세한 내용은 [[doku>ko:plugin:config]]를 참조하세요.
 
-밝은 빨간색 배경으로 보이는 설정은 이 플러그인에서 바꿀 수 없도록 보호되어 있습니다. 파란색 배경으로 보이는 설정은 기본값이며 하얀색 배경으로 보이는 설정은 특수한 설치를 위해 로컬로 설정되어 있습니다. 파란색과 하얀색 배경으로 된 설정은 바꿀 수 있습니다.
-
-이 페이지를 떠나기 전에 **저장** 버튼을 누르지 않으면 바뀜이 사라지는 것에 주의하세요.
+밝은 빨간색 배경으로 보이는 설정은 이 플러그인으로 바꿀 수 없도록 보호되어 있습니다. 파란색 배경으로 보이는 설정은 기본값이며 하얀색 배경으로 보이는 설정은 특정 설치에 대해 로컬로 설정되어 있습니다. 파란색과 하얀색 배경으로 된 설정은 바꿀 수 있습니다.
 
+이 페이지를 떠나기 전에 **저장** 버튼을 누르지 않으면 바뀜이 사라지는 것에 주의하세요.
\ No newline at end of file
diff --git a/lib/plugins/config/lang/ko/lang.php b/lib/plugins/config/lang/ko/lang.php
index 0cdaca90db1208522d21f864fe3132ebc7fa790e..9793595267ac9e17f61b37672895b0893361ff5f 100644
--- a/lib/plugins/config/lang/ko/lang.php
+++ b/lib/plugins/config/lang/ko/lang.php
@@ -1,199 +1,202 @@
 <?php
+
 /**
- * Korean language file
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author jk Lee
  * @author dongnak@gmail.com
  * @author Song Younghwan <purluno@gmail.com>
  * @author Seung-Chul Yoo <dryoo@live.com>
  * @author erial2@gmail.com
  * @author Myeongjin <aranet100@gmail.com>
+ * @author Erial <erial2@gmail.com>
  */
 $lang['menu']                  = '환경 설정';
-$lang['error']                 = '잘못된 값 때문에 설정을 바꿀 수 없습니다. 바뀜을 검토하고 확인을 누르세요.
-<br />잘못된 값은 빨간 선으로 둘러싸여 있습니다.';
+$lang['error']                 = '잘못된 값 때문에 설정을 바꿀 수 없습니다, 바뀜을 검토하고 다시 제출하세요.
+                       <br />잘못된 값은 빨간 선으로 둘러싸여 보여집니다.';
 $lang['updated']               = '설정이 성공적으로 바뀌었습니다.';
-$lang['nochoice']              = '(다른 선택이 불가능합니다)';
-$lang['locked']                = '환경 설정 파일을 바꿀 수 없습니다. 의도한 행동이 아니라면,<br />
-파일 이름과 권한이 맞는지 확인하세요.';
-$lang['danger']                = '위험: 이 옵션을 잘못 바꾸면 환경 설정 메뉴를 사용할 수 없을 수도 있습니다.';
-$lang['warning']               = '경고: 이 옵션을 잘못 바꾸면 잘못 동작할 수 있습니다.';
-$lang['security']              = '보안 경고: 이 옵션은 보안에 위험이 있을 수 있습니다.';
+$lang['nochoice']              = '(다른 선택은 할 수 없습니다)';
+$lang['locked']                = '설정 파일을 바꿀 수 없습니다, 의도하지 않았다면, <br />
+                       로컬 설정 파일 이름과 권한이 맞는지 확인하세요.';
+$lang['danger']                = '위험: 이 옵션을 바꾸면 위키와 환경 설정 메뉴에 접근할 수 없을 수도 있습니다.';
+$lang['warning']               = '경고: 이 옵션을 바꾸면 의도하지 않는 동작을 일으킬 수 있습니다.';
+$lang['security']              = '보안 경고: 이 옵션을 바꾸면 보안 위험이 있을 수 있습니다.';
 $lang['_configuration_manager'] = '환경 설정 관리자';
-$lang['_header_dokuwiki']      = '도쿠위키 설정';
-$lang['_header_plugin']        = '플러그인 설정';
-$lang['_header_template']      = '템플릿 설정';
+$lang['_header_dokuwiki']      = '도쿠위키';
+$lang['_header_plugin']        = '플러그인';
+$lang['_header_template']      = '템플릿';
 $lang['_header_undefined']     = '정의되지 않은 설정';
-$lang['_basic']                = '기본 설정';
-$lang['_display']              = '화면 표시 설정';
-$lang['_authentication']       = '인증 설정';
-$lang['_anti_spam']            = '스팸 방지 설정';
-$lang['_editing']              = '편집 설정';
-$lang['_links']                = '링크 설정';
-$lang['_media']                = '미디어 설정';
-$lang['_notifications']        = '알림 설정';
-$lang['_syndication']          = '신디케이션 설정';
-$lang['_advanced']             = '고급 설정';
-$lang['_network']              = '네트워크 설정';
-$lang['_msg_setting_undefined'] = '설정된 메타데이터가 없습니다.';
-$lang['_msg_setting_no_class'] = '설정된 클래스가 없습니다.';
+$lang['_basic']                = '기본';
+$lang['_display']              = '보이기';
+$lang['_authentication']       = '인증';
+$lang['_anti_spam']            = '스팸 방지';
+$lang['_editing']              = '편집';
+$lang['_links']                = '링크';
+$lang['_media']                = '미디어';
+$lang['_notifications']        = '알림';
+$lang['_syndication']          = '신디케이션 (RSS)';
+$lang['_advanced']             = '고급';
+$lang['_network']              = '네트워크';
+$lang['_msg_setting_undefined'] = '설정에 메타데이터가 없습니다.';
+$lang['_msg_setting_no_class'] = '설정에 클래스가 없습니다.';
 $lang['_msg_setting_no_default'] = '기본값이 없습니다.';
 $lang['title']                 = '위키 제목 (위키 이름)';
-$lang['start']                 = '각 이름공간에서 사용할 시작 문서 이름';
+$lang['start']                 = '각 이름공간에 시작점으로 사용할 문서 이름';
 $lang['lang']                  = '인터페이스 언어';
 $lang['template']              = '템플릿 (위키 디자인)';
-$lang['tagline']               = '태그 라인 (템플릿이 지원할 때에 한함)';
-$lang['sidebar']               = '사이드바 문서 이름 (템플릿이 지원할 때에 한함), 비워두면 사이드바를 비활성화';
-$lang['license']               = '내용에 어떤 라이선스를 적용하겠습니까?';
-$lang['savedir']               = '데이터 저장 디렉터리';
-$lang['basedir']               = '서버 경로 (예를 들어 <code>/dokuwiki/</code>). 자동 감지를 하려면 비우세요.';
-$lang['baseurl']               = '서버 URL (예를 들어 <code>http://www.yourserver.com</code>). 자동 감지를 하려면 비우세요.';
-$lang['cookiedir']             = '쿠키 위치. 비워두면 기본 URL 위치로 지정됩니다.';
+$lang['tagline']               = '태그라인 (템플릿이 지원할 경우)';
+$lang['sidebar']               = '사이드바 문서 이름 (템플릿이 지원할 경우), 필드를 비우면 사이드바를 비활성화';
+$lang['license']               = '내용을 배포할 때 어떤 라이선스에 따라야 합니까?';
+$lang['savedir']               = '데이터를 저장할 디렉터리';
+$lang['basedir']               = '서버 경로 (예 <code>/dokuwiki/</code>). 자동 감지를 하려면 비워 두세요.';
+$lang['baseurl']               = '서버 URL (예 <code>http://www.yourserver.com</code>). 자동 감지를 하려면 비워 두세요.';
+$lang['cookiedir']             = '쿠키 경로. 기본 URL 위치로 지정하려면 비워 두세요.';
 $lang['dmode']                 = '디렉터리 만들기 모드';
 $lang['fmode']                 = '파일 만들기 모드';
-$lang['allowdebug']            = '디버그 허용 <b>필요하지 않으면 비활성화하세요!</b>';
-$lang['recent']                = '최근 바뀐 문서당 항목 수';
-$lang['recent_days']           = '최근 바뀐 문서 기준 시간 (일)';
-$lang['breadcrumbs']           = '위치 "추적" 수. 0으로 설정하면 비활성화합니다.';
-$lang['youarehere']            = '계층형 위치 추적 (다음 위의 옵션을 비활성화하게 됩니다)';
-$lang['fullpath']              = '문서 하단에 전체 경로 보여주기';
-$lang['typography']            = '기호 대체';
-$lang['dformat']               = '날짜 형식 (PHP <a href="http://www.php.net/strftime">strftime</a> 기능 참고)';
+$lang['allowdebug']            = '디버그 허용. <b>필요하지 않으면 비활성화하세요!</b>';
+$lang['recent']                = '최근 바뀜에서 문서당 항목 수';
+$lang['recent_days']           = '최근 바뀜을 유지할 기한 (일)';
+$lang['breadcrumbs']           = '이동 경로 "추적" 수. 비활성화하려면 0으로 설정하세요.';
+$lang['youarehere']            = '계층적 이동 경로 사용 (다음에 위 옵션을 비활성화하기를 원할 겁니다)';
+$lang['fullpath']              = '바닥글에 문서의 전체 경로 밝히기';
+$lang['typography']            = '타이포그래피 대체';
+$lang['dformat']               = '날짜 형식 (PHP의 <a href="http://www.php.net/strftime">strftime</a> 함수 참고)';
 $lang['signature']             = '편집기에서 서명 버튼을 누를 때 넣을 내용';
-$lang['showuseras']            = '마지막에 문서를 편집한 사용자를 보여줄지 여부';
-$lang['toptoclevel']           = '목차 최상위 항목';
-$lang['tocminheads']           = '목차 표시 여부를 결정할 최소한의 문단 제목 항목의 수';
-$lang['maxtoclevel']           = '목차 최대 단계';
-$lang['maxseclevel']           = '문단 최대 편집 단계';
+$lang['showuseras']            = '문서를 마지막으로 편집한 사용자를 보여줄지 여부';
+$lang['toptoclevel']           = '목차의 최상위 단계';
+$lang['tocminheads']           = '목차를 넣을 여부를 결정할 최소 문단 수';
+$lang['maxtoclevel']           = '목차의 최대 단계';
+$lang['maxseclevel']           = '문단의 최대 편집 단계';
 $lang['camelcase']             = '링크에 CamelCase 사용';
 $lang['deaccent']              = '문서 이름을 지우는 방법';
-$lang['useheading']            = '문서 이름으로 첫 문단 제목 사용';
-$lang['sneaky_index']          = '기본적으로 도쿠위키는 색인 목록에 모든 이름공간을 보여줍니다.
-이 옵션을 설정하면 사용자가 읽기 권한을 가지고 있지 않은 이름공간은 보여주지 않습니다. 접근 가능한 하위 이름공간을 보이지 않게 설정하면 자동으로 설정됩니다. 특정 ACL 설정은 색인 사용이 불가능하게 할 수도 있습니다.';
-$lang['hidepages']             = '검색, 사이트맵과 기타 자동 색인에서 정규 표현식과 일치하는 문서 숨기기';
+$lang['useheading']            = '문서 이름을 첫 문단 제목으로 사용';
+$lang['sneaky_index']          = '기본적으로, 도쿠위키는 사이트맵에 모든 이름공간을 보여줍니다. 이 옵션을 활성화하면 사용자가 읽기 권한이 없는 이름공간을 숨기게 됩니다. 특정 ACL 설정으로 색인을 사용할 수 없게 할 수 있는 접근할 수 있는 하위 이름공간을 숨기면 설정됩니다.';
+$lang['hidepages']             = '검색, 사이트맵 및 다른 자동 색인에서 이 정규 표현식과 일치하는 문서 숨기기';
 $lang['useacl']                = '접근 제어 목록 (ACL) 사용';
-$lang['autopasswd']            = '자동으로 만들어진 비밀번호';
-$lang['authtype']              = '인증 백-엔드';
+$lang['autopasswd']            = '자동 생성 비밀번호';
+$lang['authtype']              = '인증 백엔드';
 $lang['passcrypt']             = '비밀번호 암호화 방법';
-$lang['defaultgroup']          = '기본 그룹, 모든 새 사용자는 이 그룹에 속합니다';
-$lang['superuser']             = '슈퍼 유저 - ACL 설정과 상관없이 모든 문서와 기능에 대한 전체 접근 권한을 가진 그룹이나 사용자 또는 사용자1,@그룹1,사용자2 쉼표로 구분한 목록';
-$lang['manager']               = '관리자 - 관리 기능을 사용할 수 있는 그룹이나 사용자 또는 사용자1,@그룹1,사용자2 쉼표로 구분한 목록';
-$lang['profileconfirm']        = '개인 정보를 바꿀 때 비밀번호 다시 확인';
-$lang['rememberme']            = '항상 로그인 정보 저장 허용 (기억하기)';
-$lang['disableactions']        = '도쿠위키 활동 비활성화';
+$lang['defaultgroup']          = '기본 그룹, 모든 새 사용자는 이 그룹에 속하게 됩니다';
+$lang['superuser']             = '슈퍼유저 - ACL 설정과 상관없이 모든 문서와 기능에 완전히 접근할 수 있는 그룹, 사용자 또는 쉼표로 구분된 목록 사용자1,@그룹1,사용자2';
+$lang['manager']               = '관리자 - 특정 관리 기능에 접근할 수 있는 그룹, 사용자 또는 쉼표로 구분된 목록 사용자1,@그룹1,사용자2';
+$lang['profileconfirm']        = '프로필을 바꿀 때 비밀번호로 확인';
+$lang['rememberme']            = '영구적으로 로그인 쿠키 허용 (기억하기)';
+$lang['disableactions']        = '도쿠위키 동작 비활성화';
 $lang['disableactions_check']  = '검사';
-$lang['disableactions_subscription'] = '구독 신청/구독 취소';
+$lang['disableactions_subscription'] = '구독/구독 취소';
 $lang['disableactions_wikicode'] = '원본 보기/원본 내보내기';
-$lang['disableactions_other']  = '다른 활동 (쉼표로 구분)';
-$lang['auth_security_timeout'] = '인증 보안 초과 시간 (초)';
-$lang['securecookie']          = 'HTTPS로 보내진 쿠키는 HTTPS에만 적용 할까요? 위키의 로그인 페이지만 SSL로 암호화하고 위키 문서는 그렇지 않은 경우 비활성화 합니다.';
-$lang['remote']                = '원격 API를 활성화 합니다. 이 항목을 허용하면 XML-RPC 및 기타 메커니즘을 통해 다른 어플리케이션으로 접근 가능합니다.';
-$lang['remoteuser']            = '이 항목에 입력된 쉼표로 나눠진 그룹이나 사용자에게 원격 API 접근을 제한합니다. 빈칸으로 두면 모두에게 허용합니다.';
-$lang['usewordblock']          = '금지 단어를 사용해 스팸 막기';
+$lang['disableactions_profile_delete'] = '자신의 계정 삭제';
+$lang['disableactions_other']  = '다른 동작 (쉼표로 구분)';
+$lang['disableactions_rss']    = 'XML 신디케이션 (RSS)';
+$lang['auth_security_timeout'] = '인증 보안 시간 초과 (초)';
+$lang['securecookie']          = 'HTTPS를 통해 설정된 쿠키는 HTTPS를 통해서만 보내져야 합니까? 위키 로그인에만 SSL로 보호하고 위키를 둘러보는 것에는 보호하지 않게 하려면 이 옵션을 비활성화하세요.';
+$lang['remote']                = '원격 API 시스템 활성화. 다른 어플리케이션이 XML-RPC 또는 다른 메커니즘을 통해 위키에 접근할 수 있습니다.';
+$lang['remoteuser']            = '여기에 입력한 쉼표로 구분된 그룹 또는 사용자에게 원격 API 접근을 제한합니다. 모두에게 접근 권한을 주려면 비워 두세요.';
+$lang['usewordblock']          = '낱말 목록을 바탕으로 스팸 막기';
 $lang['relnofollow']           = '바깥 링크에 rel="nofollow" 사용';
-$lang['indexdelay']            = '색인 연기 시간 (초)';
+$lang['indexdelay']            = '색인 전 지연 시간 (초)';
 $lang['mailguard']             = '이메일 주소를 알아볼 수 없게 하기';
 $lang['iexssprotect']          = '올린 파일의 악성 자바스크립트, HTML 코드 가능성 여부를 검사';
-$lang['usedraft']              = '편집하는 동안 자동으로 문서 초안 저장';
-$lang['htmlok']                = 'HTML 내장 허용';
-$lang['phpok']                 = 'PHP 내장 허용';
-$lang['locktime']              = '최대 파일 잠금 시간(초)';
-$lang['cachetime']             = '최대 캐시 생존 시간 (초)';
+$lang['usedraft']              = '편집하는 동안 자동으로 초안 저장';
+$lang['htmlok']                = 'HTML 포함 허용';
+$lang['phpok']                 = 'PHP 포함 허용';
+$lang['locktime']              = '파일 잠그기에 대한 최대 시간 (초)';
+$lang['cachetime']             = '캐시에 대한 최대 시간 (초)';
 $lang['target____wiki']        = '안쪽 링크에 대한 타겟 창';
 $lang['target____interwiki']   = '인터위키 링크에 대한 타겟 창';
 $lang['target____extern']      = '바깥 링크에 대한 타겟 창';
 $lang['target____media']       = '미디어 링크에 대한 타겟 창';
-$lang['target____windows']     = '창 링크에 대한 타겟 창';
-$lang['mediarevisions']        = '미디어 판 관리를 사용하겠습니까?';
-$lang['refcheck']              = '미디어 파일을 삭제하기 전에 사용하고 있는지 검사';
+$lang['target____windows']     = 'Windows 링크에 대한 타겟 창';
+$lang['mediarevisions']        = '미디어 판을 활성화하겠습니까?';
+$lang['refcheck']              = '미디어 파일을 삭제하기 전에 아직 사용하고 있는지 검사';
 $lang['gdlib']                 = 'GD 라이브러리 버전';
-$lang['im_convert']            = 'ImageMagick 변환 도구 위치';
+$lang['im_convert']            = 'ImageMagick의 변환 도구의 경로';
 $lang['jpg_quality']           = 'JPG 압축 품질 (0-100)';
-$lang['fetchsize']             = 'fetch.php가 바깥에서 다운로드할 수도 있는 최대 크기 (바이트)';
-$lang['subscribers']           = '사용자가 이메일로 문서 바뀜에 구독하도록 허용';
-$lang['subscribe_time']        = '구독 목록과 요약이 보내질 경과 시간 (초); recent_days에서 설정된 시간보다 작아야 합니다.';
+$lang['fetchsize']             = 'fetch.php가 바깥 URL에서 다운로드할 수 있는 최대 크기 (바이트), 예를 들어 바깥 그림을 캐시하고 크기 조절할 때.';
+$lang['subscribers']           = '사용자가 이메일로 문서 바뀜을 구독하는 것을 허용';
+$lang['subscribe_time']        = '구독 목록과 요약이 보내질 경과 시간 (초); recent_days에 지정된 시간보다 작아야 합니다.';
 $lang['notify']                = '항상 이 이메일 주소로 바뀜 알림을 보냄';
-$lang['registernotify']        = '항상 새 사용자한테 이 이메일 주소로 정보를 보냄';
-$lang['mailfrom']              = '자동으로 보내지는 메일 발신자';
-$lang['mailprefix']            = '자동으로 보내지는 메일의 제목 말머리 내용. 비웠을 경우 위키 제목 사용';
-$lang['htmlmail']              = '용량은 조금 더 크지만 보기 좋은 HTML 태그가 포함된 메일을 보냅니다. 텍스트만의 메일을 보내려면 비활성화하세요.';
-$lang['sitemap']               = '구글 사이트맵 생성 날짜 빈도. 0일 경우 비활성화합니다';
-$lang['rss_type']              = 'XML 피드 타입';
+$lang['registernotify']        = '항상 이 이메일 주소로 새로 등록한 사용자의 정보를 보냄';
+$lang['mailfrom']              = '자동으로 보내는 메일에 사용할 보내는 사람 이메일 주소';
+$lang['mailprefix']            = '자동으로 보내는 메일에 사용할 이메일 제목 접두어. 위키 제목을 사용하려면 비워 두세요';
+$lang['htmlmail']              = '보기에는 더 좋지만 크키가 조금 더 큰 HTML 태그가 포함된 이메일을 보내기. 일반 텍스트만으로 된 메일을 보내려면 비활성화하세요.';
+$lang['sitemap']               = 'Google 사이트맵 생성 날짜 빈도 (일). 비활성화하려면 0';
+$lang['rss_type']              = 'XML 피드 형식';
 $lang['rss_linkto']            = 'XML 피드 링크 정보';
-$lang['rss_content']           = 'XML 피드 항목에 표시되는 내용은 무엇입니까?';
-$lang['rss_update']            = 'XML 피드 업데이트 주기 (초)';
-$lang['rss_show_summary']      = 'XML 피드 제목에서 요약 보여주기';
-$lang['rss_media']             = '어떤 규격으로 XML 피드를 받아보시겠습니까?';
-$lang['updatecheck']           = '업데이트와 보안 문제를 검사할까요? 이 기능을 사용하려면 도쿠위키를 update.dokuwiki.org에 연결해야 합니다.';
+$lang['rss_content']           = 'XML 피드 항목에 보여주는 내용은 무엇입니까?';
+$lang['rss_update']            = 'XML 피드 업데이트 간격 (초)';
+$lang['rss_show_summary']      = 'XML 피드의 제목에서 요악 보여주기';
+$lang['rss_media']             = '어떤 규격으로 XML 피드에 바뀜을 나열해야 합니까?';
+$lang['updatecheck']           = '데이트와 보안 경고를 검사할까요? 도쿠위키는 이 기능을 위해 update.dokuwiki.org에 연결이 필요합니다.';
 $lang['userewrite']            = '멋진 URL 사용';
-$lang['useslash']              = 'URL에서 이름 구분자로 슬래시 문자 사용';
-$lang['sepchar']               = '문서 이름 단어 구분자';
+$lang['useslash']              = 'URL에서 이름공간 구분자로 슬래시 사용';
+$lang['sepchar']               = '문서 이름 낱말 구분자';
 $lang['canonical']             = '완전한 canonical URL 사용';
-$lang['fnencode']              = 'ASCII가 아닌 파일 이름을 인코딩 하는 방법.';
-$lang['autoplural']            = '링크 연결시 복수 양식 검사';
-$lang['compression']           = '첨부 파일 압축 방법 선택';
-$lang['gzip_output']           = 'xhml 내용 gzip 압축 사용';
-$lang['compress']              = '최적화된 CSS, 자바스크립트 출력';
-$lang['cssdatauri']            = '그림이 렌더링될 최대 용량 크기를 CSS에 규정해야 HTTP 요청 헤더 오버헤드 크기를 감소시킬 수 있습니다. 이 기술은 IE 7 이하에서는 작동하지 않습니다! <code>400</code>에서 <code>600</code> 정도면 좋은 효율을 가져옵니다. <code>0</code>로 지정할 경우 비활성화 됩니다.';
-$lang['send404']               = '존재하지 않는 페이지에 대해 "HTTP 404/페이지를 찾을 수 없습니다" 응답';
-$lang['broken_iua']            = '설치된 시스템에서 ignore_user_abort 기능에 문제가 있습니까? 문제가 있다면 검색 색인이 정상적으로 동작하지 않습니다. 이 기능이 IIS+PHP/CGI에서 문제가 있는 것으로 알려졌습니다. 자세한 정보는 <a href="http://bugs.dokuwiki.org/?do=details&amp;task_id=852">버그 852</a>를 참고하시기 바랍니다.';
-$lang['xsendfile']             = '웹 서버가 정적 파일을 제공하도록 X-Sendfile 헤더를 사용하겠습니까? 웹 서버가 이 기능을 지원해야 합니다.';
-$lang['renderer_xhtml']        = '주 (xhtml) 위키 출력 처리기';
-$lang['renderer__core']        = '%s (도쿠위키 내부)';
+$lang['fnencode']              = 'ASCII가 아닌 파일 이름을 인코딩하는 방법.';
+$lang['autoplural']            = '링크에서 복수형 검사';
+$lang['compression']           = '첨부 파일의 압축 방법';
+$lang['gzip_output']           = 'xhtml에 대해 gzip 내용 인코딩 사용';
+$lang['compress']              = 'CSS 및 자바스크립트를 압축하여 출력';
+$lang['cssdatauri']            = 'CSS 파일에서 그림이 참조되는 최대 바이트 크기를 스타일시트에 규정해야 HTTP 요청 헤더 오버헤드 크기를 줄일 수 있습니다. 이 기술은 IE 7 이하에서는 작동하지 않습니다! <code>400</code>에서 <code>600</code> 바이트 정도면 좋은 효율을 가져옵니다. 비활성화하려면 <code>0</code>으로 설정하세요.';
+$lang['send404']               = '존재하지 않는 문서에 "HTTP 404/페이지를 찾을 수 없습니다" 보내기';
+$lang['broken_iua']            = '시스템에서 ignore_user_abort 함수에 문제가 있습니까? 문제가 있다면 검색 색인이 동작하지 않는 원인이 됩니다. 이 함수가 IIS+PHP/CGI에서 문제가 있는 것으로 알려져 있습니다. 자세한 정보는 <a href="http://bugs.dokuwiki.org/?do=details&amp;task_id=852">버그 852</a>를 참조하시기 바랍니다.';
+$lang['xsendfile']             = '웹 서버가 정적 파일을 제공할 수 있도록 X-Sendfile 헤더를 사용하겠습니까? 웹 서버가 이 기능을 지원해야 합니다.';
+$lang['renderer_xhtml']        = '주요 (xhtml) 위키 출력에 사용할 렌더러';
+$lang['renderer__core']        = '%s (도쿠위키 코어)';
 $lang['renderer__plugin']      = '%s (플러그인)';
-$lang['dnslookups']            = '이 옵션을 활성화하면 도쿠위키가 문서를 편집하는 사용자의 호스트 네임과 원격 IP 주소를 확인합니다. 서버가 느리거나, DNS를 운영하지 않거나 이 기능을 원치 않으면 비활성화하세요';
+$lang['dnslookups']            = '도쿠위키가 문서를 편집하는 사용자의 원격 IP 주소에 대한 호스트 이름을 조회합니다. 서버가 느리거나 DNS 서버를 작동하지 않거나 이 기능을 원하지 않으면, 이 옵션을 비활성화하세요';
 $lang['proxy____host']         = '프록시 서버 이름';
-$lang['proxy____port']         = '프록시 서버 포트';
+$lang['proxy____port']         = '프록시 포트';
 $lang['proxy____user']         = '프록시 사용자 이름';
 $lang['proxy____pass']         = '프록시 비밀번호';
-$lang['proxy____ssl']          = '프록시 연결시 SSL 사용';
-$lang['proxy____except']       = '프록시 설정이 무시될 URL주소의 정규 표현식';
-$lang['safemodehack']          = 'safemode hack기능 사용';
+$lang['proxy____ssl']          = '프록시로 연결하는 데 SSL 사용';
+$lang['proxy____except']       = '프록시가 건너뛰어야 할 일치하는 URL의 정규 표현식.';
+$lang['safemodehack']          = 'safemode hack 활성화';
 $lang['ftp____host']           = 'safemode hack의 FTP 서버';
 $lang['ftp____port']           = 'safemode hack의 FTP 포트';
 $lang['ftp____user']           = 'safemode hack의 FTP 사용자 이름';
 $lang['ftp____pass']           = 'safemode hack의 FTP 비밀번호';
 $lang['ftp____root']           = 'safemode hack의 FTP 루트 디렉터리';
 $lang['license_o_']            = '선택하지 않음';
-$lang['typography_o_0']        = '사용 안함';
-$lang['typography_o_1']        = '이중 인용부호("")만 지원';
-$lang['typography_o_2']        = '모든 가능한 인용 부호 (동작 안될 수도 있음)';
-$lang['userewrite_o_0']        = '사용 안함';
+$lang['typography_o_0']        = '없음';
+$lang['typography_o_1']        = '작은따옴표를 제외';
+$lang['typography_o_2']        = '작은따옴표를 포함 (항상 동작하지 않을 수도 있음)';
+$lang['userewrite_o_0']        = '없음';
 $lang['userewrite_o_1']        = '.htaccess';
-$lang['userewrite_o_2']        = '도쿠위키 내부 기능';
+$lang['userewrite_o_2']        = '도쿠위키 내부';
 $lang['deaccent_o_0']          = '끄기';
 $lang['deaccent_o_1']          = '악센트 제거';
-$lang['deaccent_o_2']          = '라틴문자화';
-$lang['gdlib_o_0']             = 'GD 라이브러리 사용 불가';
+$lang['deaccent_o_2']          = '로마자화';
+$lang['gdlib_o_0']             = 'GD 라이브러리를 사용할 수 없음';
 $lang['gdlib_o_1']             = '버전 1.x';
-$lang['gdlib_o_2']             = '자동 인식';
+$lang['gdlib_o_2']             = '자동 감지';
 $lang['rss_type_o_rss']        = 'RSS 0.91';
 $lang['rss_type_o_rss1']       = 'RSS 1.0';
 $lang['rss_type_o_rss2']       = 'RSS 2.0';
 $lang['rss_type_o_atom']       = 'Atom 0.3';
 $lang['rss_type_o_atom1']      = 'Atom 1.0';
 $lang['rss_content_o_abstract'] = '개요';
-$lang['rss_content_o_diff']    = '통합 차이 목록';
-$lang['rss_content_o_htmldiff'] = 'HTML 차이 목록 형식';
-$lang['rss_content_o_html']    = '최대 HTML 페이지 내용';
+$lang['rss_content_o_diff']    = '통합 차이';
+$lang['rss_content_o_htmldiff'] = 'HTML 형식의 차이 표';
+$lang['rss_content_o_html']    = '전체 HTML 페이지 내용';
 $lang['rss_linkto_o_diff']     = '차이 보기';
-$lang['rss_linkto_o_page']     = '바뀐 문서 보기';
-$lang['rss_linkto_o_rev']      = '바뀐 목록 보기';
-$lang['rss_linkto_o_current']  = '현재 문서 보기';
+$lang['rss_linkto_o_page']     = '개정된 문서';
+$lang['rss_linkto_o_rev']      = '판의 목록';
+$lang['rss_linkto_o_current']  = '현재 문서';
 $lang['compression_o_0']       = '없음';
 $lang['compression_o_gz']      = 'gzip';
 $lang['compression_o_bz2']     = 'bz2';
-$lang['xsendfile_o_0']         = '사용 불가';
-$lang['xsendfile_o_1']         = '비공개 lighttpd 헤더 (1.5 이전 버전)';
+$lang['xsendfile_o_0']         = '사용하지 않음';
+$lang['xsendfile_o_1']         = '사유 lighttpd 헤더 (릴리스 1.5 이전)';
 $lang['xsendfile_o_2']         = '표준 X-Sendfile 헤더';
-$lang['xsendfile_o_3']         = '비공개 Nginx X-Accel-Redirect 헤더';
+$lang['xsendfile_o_3']         = '사유 Nginx X-Accel-Redirect 헤더';
 $lang['showuseras_o_loginname'] = '로그인 이름';
-$lang['showuseras_o_username'] = '사용자의 전체 이름';
+$lang['showuseras_o_username'] = '사용자의 실명';
+$lang['showuseras_o_username_link'] = '인터위키 사용자 링크로 된 사용자의 실명';
 $lang['showuseras_o_email']    = '사용자의 이메일 주소 (메일 주소 설정에 따라 안보일 수 있음)';
-$lang['showuseras_o_email_link'] = 'mailto: link로 표현될 사용자 이메일 주소';
-$lang['useheading_o_0']        = '아니오';
+$lang['showuseras_o_email_link'] = 'mailto: 링크로 된 사용자의 이메일 주소';
+$lang['useheading_o_0']        = '전혀 없음';
 $lang['useheading_o_navigation'] = '둘러보기에만';
 $lang['useheading_o_content']  = '위키 내용에만';
 $lang['useheading_o_1']        = '항상';
-$lang['readdircache']          = 'readdir 캐시를 위한 최대 시간 (초)';
+$lang['readdircache']          = 'readdir 캐시의 최대 시간 (초)';
diff --git a/lib/plugins/config/lang/la/intro.txt b/lib/plugins/config/lang/la/intro.txt
index 573d34ac1e42943f3c06ca3ed8b0e4da6dd2914f..51d8c3d711f7034a64cda573ec3504d95dd84a03 100644
--- a/lib/plugins/config/lang/la/intro.txt
+++ b/lib/plugins/config/lang/la/intro.txt
@@ -4,4 +4,4 @@ In hac pagina administratoris optiones mutare et inspicere potes. Auxilia in pag
 
 Optiones ostensae rubro colore tutae et non nunc mutabiles sunt. Optiones ostensae caeruleo colore praecipuae sunt et optiones ostensae in area alba singulares huic uici sunt. Et caerulae et albae optiones mutabiles sunt.
 
-Memento premere **SERVA** ante quam nouam paginam eas: si hoc non facias, mutata amissa sunt.
\ No newline at end of file
+Memento premere **SERVA** ante quam nouam paginam eas: si hoc non facias, mutata amissa sunt.
diff --git a/lib/plugins/config/lang/mr/intro.txt b/lib/plugins/config/lang/mr/intro.txt
index 12ada73a146c76f7fea7725d39df7bb1d7d73d6e..e068295e5aab88efbdcc14c2c15da54ed721271a 100644
--- a/lib/plugins/config/lang/mr/intro.txt
+++ b/lib/plugins/config/lang/mr/intro.txt
@@ -7,4 +7,4 @@
 निळ्या पार्श्वभूमीमधे दाखवलेले सेटिंग आपोआप सेट होणार्या किमती आहेत आणि पांढर्या पार्श्वभूमीमधे 
 दाखवलेले सेटिंग या इन्स्टॉलेशनसाठी ख़ास सेट केलेले आहेत. निळे आणि पांढरे दोन्ही सेटिंग बदलता येतील.
 
-ह्या पानावरून बाहर जाण्याआधी "Save" चे बटन क्लिक करायला विसरू नका नाहीतर सर्व बदल नाहीसे होतील.
\ No newline at end of file
+ह्या पानावरून बाहर जाण्याआधी "Save" चे बटन क्लिक करायला विसरू नका नाहीतर सर्व बदल नाहीसे होतील.
diff --git a/lib/plugins/config/lang/nl/intro.txt b/lib/plugins/config/lang/nl/intro.txt
index 3814b70bdf139c26558b1a2fe6b440beea9ebe53..4d72b695da1922ebde4292e58b5c3d79e63fe2ef 100644
--- a/lib/plugins/config/lang/nl/intro.txt
+++ b/lib/plugins/config/lang/nl/intro.txt
@@ -5,5 +5,3 @@ Gebruik deze pagina om de instellingen van je DokuWiki te bekijken en/of te wijz
 Instellingen met een rode achtergond kunnen niet worden gewijzigd met deze plugin. Instellingen met een blauwe achtergrond hebben de default waarde, en instellingen met een witte achtergrond zijn lokaal gewijzigd voor deze specifieke installatie. Zowel blauwe als witte instellingen kunnen worden gewijzigd.
 
 Vergeet niet op **Opslaan** te drukken alvorens de pagina te verlaten, anders gaan je wijzigingen verloren.
-
-
diff --git a/lib/plugins/config/lang/nl/lang.php b/lib/plugins/config/lang/nl/lang.php
index 14c8f9b1e311f6c167b166466031c4ab1faaa9f1..a9791b7871f60689230c11ed1f25d4f455450f72 100644
--- a/lib/plugins/config/lang/nl/lang.php
+++ b/lib/plugins/config/lang/nl/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * dutch language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Pieter van der Meulen <pieter@vdmeulen.net>
  * @author Wouter Schoot <wouter@schoot.org>
  * @author John de Graaff <john@de-graaff.net>
@@ -16,6 +16,8 @@
  * @author Jeroen
  * @author Ricardo Guijt <ricardoguijt@gmail.com>
  * @author Gerrit <klapinklapin@gmail.com>
+ * @author Hugo Smet <hugo.smet@scarlet.be>
+ * @author hugo smet <hugo.smet@scarlet.be>
  */
 $lang['menu']                  = 'Configuratie-instellingen';
 $lang['error']                 = 'De instellingen zijn niet gewijzigd wegens een incorrecte waarde, kijk je wijzigingen na en sla dan opnieuw op.<br />Je kunt de incorrecte waarde(s) herkennen aan de rode rand.';
@@ -28,7 +30,7 @@ $lang['security']              = 'Beveiligingswaarschuwing: Het wijzigen van dez
 $lang['_configuration_manager'] = 'Configuratiemanager';
 $lang['_header_dokuwiki']      = 'DokuWiki-instellingen';
 $lang['_header_plugin']        = 'Plugin-instellingen';
-$lang['_header_template']      = 'Sjabloon-instellingen';
+$lang['_header_template']      = 'Template-instellingen';
 $lang['_header_undefined']     = 'Ongedefinieerde instellingen';
 $lang['_basic']                = 'Basisinstellingen';
 $lang['_display']              = 'Beeldinstellingen';
@@ -47,9 +49,9 @@ $lang['_msg_setting_no_default'] = 'Geen standaard waarde.';
 $lang['title']                 = 'Titel van de wiki';
 $lang['start']                 = 'Naam startpagina';
 $lang['lang']                  = 'Taal';
-$lang['template']              = 'Sjabloon ofwel het design van de wiki.';
-$lang['tagline']               = 'Ondertitel (als het sjabloon dat ondersteunt)';
-$lang['sidebar']               = 'Zijbalk-paginanaam (als het sjabloon dat ondersteunt), leeg veld betekent geen zijbalk';
+$lang['template']              = 'Template ofwel het design van de wiki.';
+$lang['tagline']               = 'Ondertitel (als het template dat ondersteunt)';
+$lang['sidebar']               = 'Zijbalk-paginanaam (als het template dat ondersteunt), leeg veld betekent geen zijbalk';
 $lang['license']               = 'Onder welke licentie zou je tekst moeten worden gepubliceerd?';
 $lang['savedir']               = 'Directory om data op te slaan';
 $lang['basedir']               = 'Basisdirectory';
@@ -89,7 +91,9 @@ $lang['disableactions']        = 'Aangevinkte DokuWiki-akties uitschakelen';
 $lang['disableactions_check']  = 'Controleer';
 $lang['disableactions_subscription'] = 'Inschrijven/opzeggen';
 $lang['disableactions_wikicode'] = 'Bron bekijken/exporteer rauw';
+$lang['disableactions_profile_delete'] = 'Schrap eigen account';
 $lang['disableactions_other']  = 'Andere akties (gescheiden door komma\'s)';
+$lang['disableactions_rss']    = 'XML Syndication (RSS)';
 $lang['auth_security_timeout'] = 'Authenticatiebeveiligings-timeout (seconden)';
 $lang['securecookie']          = 'Moeten cookies die via HTTPS gezet zijn alleen via HTTPS verzonden worden door de browser? Zet deze optie uit als alleen het inloggen op de wiki beveiligd is, maar het gebruik verder niet.';
 $lang['remote']                = 'Activeer het remote API-systeem. Hiermee kunnen andere applicaties de wiki benaderen via XML-RPC of andere mechanismen.';
@@ -194,6 +198,7 @@ $lang['xsendfile_o_2']         = 'Standaard X-Sendfile header';
 $lang['xsendfile_o_3']         = 'Merkgebonden Nginx X-Accel-Redirect header';
 $lang['showuseras_o_loginname'] = 'Loginnaam';
 $lang['showuseras_o_username'] = 'Volledige naam';
+$lang['showuseras_o_username_link'] = 'Gebruikers volledige naam als interwiki gebruikers link';
 $lang['showuseras_o_email']    = 'E-mailadres (onherkenbaar gemaakt volgens mailguard-instelling)';
 $lang['showuseras_o_email_link'] = 'E-mailadres als mailto: link';
 $lang['useheading_o_0']        = 'Nooit';
diff --git a/lib/plugins/config/lang/pl/intro.txt b/lib/plugins/config/lang/pl/intro.txt
index 72c0e1c13bb84a0842454aba321bc28c819c034c..9d85c7a7ccd99066502010d052f868926d4b7540 100644
--- a/lib/plugins/config/lang/pl/intro.txt
+++ b/lib/plugins/config/lang/pl/intro.txt
@@ -5,5 +5,3 @@ Na tej stronie można zmienić ustawienia tej instalacji DokuWiki. W celu uzyska
 Ustawienia w kolorze jasnoczerwonym są chronione i nie mogą być zmienioną z użyciem tej wtyczki. Ustawienia w kolorze niebieskim mają domyślne wartości. Ustawienia w kolorze białym są specyficzne dla tej instalacji. Ustawienia w kolorach niebieskim i białym mogą być zmienione.
 
 W celu zapisania nowej konfiguracji naciśnij **zapisz** przed opuszczeniem tej strony.
-
-
diff --git a/lib/plugins/config/lang/pt-br/intro.txt b/lib/plugins/config/lang/pt-br/intro.txt
index 850ba25cb7e4363f58e7e8a1cdb2634b2db23d58..db31de4cf2e72c685c2b57f6c5a68c205e90ec1f 100644
--- a/lib/plugins/config/lang/pt-br/intro.txt
+++ b/lib/plugins/config/lang/pt-br/intro.txt
@@ -4,4 +4,4 @@ Use essa página para controlar as configurações da instalação do seu DokuWi
 
 Definições que apresentem um fundo vermelho claro são protegidas e não podem ser alteradas com esse plug-in. As definições com um fundo azul são o padrão e as com um fundo branco foram configuradas localmente para essa instalação em particular. Tanto as definições em azul quanto as em branco podem ser alteradas.
 
-Lembre-se de pressionar o botão **Salvar** antes de sair dessa página, caso contrário, suas configurações serão perdidas.
\ No newline at end of file
+Lembre-se de pressionar o botão **Salvar** antes de sair dessa página, caso contrário, suas configurações serão perdidas.
diff --git a/lib/plugins/config/lang/pt-br/lang.php b/lib/plugins/config/lang/pt-br/lang.php
index 795ee81c0c9c364de9473aedbaaa897b458b8b43..abda9640ec7d90a5b551777a719df8455394c902 100644
--- a/lib/plugins/config/lang/pt-br/lang.php
+++ b/lib/plugins/config/lang/pt-br/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Portuguese language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
  * @author Felipe Castro <fefcas@gmail.com>
  * @author Lucien Raven <lucienraven@yahoo.com.br>
@@ -17,6 +18,7 @@
  * @author Isaias Masiero Filho <masiero@masiero.org>
  * @author Balaco Baco <balacobaco@imap.cc>
  * @author Victor Westmann <victor.westmann@gmail.com>
+ * @author Guilherme Cardoso <guicardoso@gmail.com>
  */
 $lang['menu']                  = 'Configurações do DokuWiki';
 $lang['error']                 = 'As configurações não foram atualizadas devido a um valor inválido. Por favor, reveja suas alterações e reenvie-as.<br />O(s) valor(es) incorreto(s) serão exibidos contornados por uma borda vermelha.';
@@ -92,7 +94,9 @@ $lang['disableactions']        = 'Desabilitar as ações do DokuWiki';
 $lang['disableactions_check']  = 'Verificação';
 $lang['disableactions_subscription'] = 'Monitoramento';
 $lang['disableactions_wikicode'] = 'Ver a fonte/Exportar sem processamento';
+$lang['disableactions_profile_delete'] = 'Excluir a própria conta';
 $lang['disableactions_other']  = 'Outras ações (separadas por vírgula)';
+$lang['disableactions_rss']    = 'Sindicância XML (RSS)';
 $lang['auth_security_timeout'] = 'Tempo limite de segurança para autenticações (seg)';
 $lang['securecookie']          = 'Os cookies definidos via HTTPS devem ser enviados para o navegador somente via HTTPS? Desabilite essa opção quando somente a autenticação do seu wiki for realizada de maneira segura via SSL e a navegação, de maneira insegura.';
 $lang['remote']                = 'Habilitar o sistema de API remota. Isso permite que outras aplicações acessem o wiki via XML-RPC ou outros mecanismos.';
@@ -197,6 +201,7 @@ $lang['xsendfile_o_2']         = 'cabeçalho "X-Sendfile" padrão';
 $lang['xsendfile_o_3']         = 'cabeçalho proprietário "Nginx X-Accel-Redirect"';
 $lang['showuseras_o_loginname'] = 'nome de usuário';
 $lang['showuseras_o_username'] = 'nome completo do usuário';
+$lang['showuseras_o_username_link'] = 'Nome completo do usuário como um link de usuário interwiki';
 $lang['showuseras_o_email']    = 'endereço de e-mail do usuário (obscurecido segundo a definição anterior)';
 $lang['showuseras_o_email_link'] = 'endereço de e-mail de usuário como um link "mailto:"';
 $lang['useheading_o_0']        = 'nunca';
diff --git a/lib/plugins/config/lang/pt/intro.txt b/lib/plugins/config/lang/pt/intro.txt
index 2010dadafa50eec22a952a6a03b5b8c5cbb7456c..06a68c4750c866f016b967dfdeb53377701538d8 100644
--- a/lib/plugins/config/lang/pt/intro.txt
+++ b/lib/plugins/config/lang/pt/intro.txt
@@ -4,4 +4,4 @@ Use esta página para controlar as definições da instalação do seu DokuWiki.
 
 Definições que apresentem um fundo vermelho claro são protegidas e não podem ser alteradas com este plugin. Definições com um fundo azul são padrão e definições com um fundo branco foram configuradas localmente para essa instalação em particular. Tanto as definições em azul como em branco podem ser alteradas.
 
-Lembre-se de pressionar o botão **Guardar** antes de sair desta página, caso contrário, as suas definições serão perdidas.
\ No newline at end of file
+Lembre-se de pressionar o botão **Guardar** antes de sair desta página, caso contrário, as suas definições serão perdidas.
diff --git a/lib/plugins/config/lang/pt/lang.php b/lib/plugins/config/lang/pt/lang.php
index 7a9111c62b9d933ffefa7dde9a11b1f29d150538..509ccc6a78cd9073541ed88486879309f30a027d 100644
--- a/lib/plugins/config/lang/pt/lang.php
+++ b/lib/plugins/config/lang/pt/lang.php
@@ -1,12 +1,15 @@
 <?php
+
 /**
- * Portugueselanguage file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
  * @author Enrico Nicoletto <liverig@gmail.com>
  * @author Fil <fil@meteopt.com>
  * @author André Neves <drakferion@gmail.com>
  * @author José Campos zecarlosdecampos@gmail.com
+ * @author Paulo Carmino <contato@paulocarmino.com>
+ * @author Alfredo Silva <alfredo.silva@sky.com>
  */
 $lang['menu']                  = 'Configuração';
 $lang['error']                 = 'Parâmetros de Configuração não actualizados devido a valores inválidos. Por favor, reveja as modificações que pretende efectuar antes de re-submetê-las.<br /> Os valores incorrectos serão mostrados dentro de uma "moldura" vermelha.';
@@ -29,30 +32,33 @@ $lang['_anti_spam']            = 'Configuração Anti-Spam';
 $lang['_editing']              = 'Configuração de Edição';
 $lang['_links']                = 'Configuração de Ligações';
 $lang['_media']                = 'Configuração de Media';
+$lang['_notifications']        = 'Notificação';
+$lang['_syndication']          = 'Sindicação (RSS)';
 $lang['_advanced']             = 'Configurações Avançadas';
 $lang['_network']              = 'Configuração de Rede';
 $lang['_msg_setting_undefined'] = 'Nenhum metadado configurado.';
 $lang['_msg_setting_no_class'] = 'Nenhuma classe definida.';
 $lang['_msg_setting_no_default'] = 'Sem valor por omissão.';
-$lang['fmode']                 = 'Modo de criação de ficheiros.';
-$lang['dmode']                 = 'Modo de criação de pastas.';
-$lang['lang']                  = 'Idioma';
-$lang['basedir']               = 'Pasta Base';
-$lang['baseurl']               = 'URL Base';
-$lang['savedir']               = 'Pasta para guardar dados';
-$lang['start']                 = 'Nome da Página Inicial';
 $lang['title']                 = 'Título deste Wiki';
+$lang['start']                 = 'Nome da Página Inicial';
+$lang['lang']                  = 'Idioma';
 $lang['template']              = 'Template';
 $lang['license']               = 'Sob que licença o seu conteúdo deverá ser disponibilizado?';
-$lang['fullpath']              = 'Revelar caminho completo no rodapé';
+$lang['savedir']               = 'Pasta para guardar dados';
+$lang['basedir']               = 'Pasta Base';
+$lang['baseurl']               = 'URL Base';
+$lang['dmode']                 = 'Modo de criação de pastas.';
+$lang['fmode']                 = 'Modo de criação de ficheiros.';
+$lang['allowdebug']            = 'Permitir depuração <b>desabilite se não for necessário!</b>';
 $lang['recent']                = 'Alterações recentes';
+$lang['recent_days']           = 'Quantas mudanças recentes devem ser mantidas? (dias)';
 $lang['breadcrumbs']           = 'Número máximo de breadcrumbs';
 $lang['youarehere']            = 'Breadcrumbs hierárquicas';
+$lang['fullpath']              = 'Revelar caminho completo no rodapé';
 $lang['typography']            = 'Executar substituições tipográficas';
-$lang['htmlok']                = 'Permitir embeber HTML';
-$lang['phpok']                 = 'Permitir embeber PHP';
 $lang['dformat']               = 'Formato de Data (ver função PHP\'s <a href="http://www.php.net/strftime">strftime</a>)';
 $lang['signature']             = 'Assinatura';
+$lang['showuseras']            = 'O que exibir quando mostrar o utilizador que editou a página pela última vez';
 $lang['toptoclevel']           = 'Nível de topo para a tabela de conteúdo';
 $lang['tocminheads']           = 'Quantidade mínima de cabeçalhos para a construção da tabela de conteúdos.';
 $lang['maxtoclevel']           = 'Máximo nível para a tabela de conteúdo';
@@ -60,14 +66,8 @@ $lang['maxseclevel']           = 'Máximo nível para editar secção';
 $lang['camelcase']             = 'Usar CamelCase';
 $lang['deaccent']              = 'Nomes das páginas sem acentos';
 $lang['useheading']            = 'Usar o primeiro cabeçalho para o nome da página';
-$lang['refcheck']              = 'Verificação de referência da media';
-$lang['allowdebug']            = 'Permitir depuração <b>desabilite se não for necessário!</b>';
-$lang['usewordblock']          = 'Bloquear spam baseado em lista de palavras (wordlist)';
-$lang['indexdelay']            = 'Tempo de espera antes da indexação (seg)';
-$lang['relnofollow']           = 'Usar rel="nofollow" em links externos';
-$lang['mailguard']             = 'Obscurecer endereços de email';
-$lang['iexssprotect']          = 'Verificar os arquivos enviados contra possíveis códigos maliciosos em HTML ou JavaScript';
-$lang['showuseras']            = 'O que exibir quando mostrar o utilizador que editou a página pela última vez';
+$lang['sneaky_index']          = 'Por norma, o DokuWiki irá exibir todos os espaços de nomes na visualização do índice. Ao habilitar essa opção, serão escondidos aqueles em que o utilizador não tenha permissão de leitura. Isto pode resultar na omissão de sub-ramos acessíveis, que poderá tornar o índice inútil para certas configurações de ACL.';
+$lang['hidepages']             = 'Esconder páginas correspondentes (expressões regulares)';
 $lang['useacl']                = 'Usar ACL - Listas de Controlo de Acessos';
 $lang['autopasswd']            = 'Auto-gerar senhas';
 $lang['authtype']              = 'Método de autenticação';
@@ -76,58 +76,66 @@ $lang['defaultgroup']          = 'Grupo por omissão';
 $lang['superuser']             = 'Superutilizador - um grupo, utilizador ou uma lista separada por vírgulas usuário1,@grupo1,usuário2 que tem acesso completo a todas as páginas e funções, independente das definições da ACL';
 $lang['manager']               = 'Gestor - um grupo, utilizador ou uma lista separada por vírgulas usuário1,@grupo1,usuário2 que tem acesso a certas funções de gestão';
 $lang['profileconfirm']        = 'Confirmar mudanças no perfil com a senha';
+$lang['rememberme']            = 'Permitir cookies de autenticação permanentes (Memorizar?)';
 $lang['disableactions']        = 'Desactivar acções DokuWiki';
 $lang['disableactions_check']  = 'Checar';
 $lang['disableactions_subscription'] = 'Subscrever/Não Subscrver';
 $lang['disableactions_wikicode'] = 'Ver fonte/Exportar em bruto';
+$lang['disableactions_profile_delete'] = 'Deletar Sua Conta.';
 $lang['disableactions_other']  = 'Outras acções (separadas por vírgula)';
-$lang['sneaky_index']          = 'Por norma, o DokuWiki irá exibir todos os espaços de nomes na visualização do índice. Ao habilitar essa opção, serão escondidos aqueles em que o utilizador não tenha permissão de leitura. Isto pode resultar na omissão de sub-ramos acessíveis, que poderá tornar o índice inútil para certas configurações de ACL.';
+$lang['disableactions_rss']    = 'Sindicação XML (RSS)';
 $lang['auth_security_timeout'] = 'Tempo limite de segurança para autenticações (seg)';
 $lang['securecookie']          = 'Os cookies definidos via HTTPS deverão ser enviados para o navegador somente via HTTPS? Desabilite essa opção quando somente a autenticação do seu wiki for realizada de maneira segura via SSL e a navegação de maneira insegura.';
+$lang['usewordblock']          = 'Bloquear spam baseado em lista de palavras (wordlist)';
+$lang['relnofollow']           = 'Usar rel="nofollow" em links externos';
+$lang['indexdelay']            = 'Tempo de espera antes da indexação (seg)';
+$lang['mailguard']             = 'Obscurecer endereços de email';
+$lang['iexssprotect']          = 'Verificar os arquivos enviados contra possíveis códigos maliciosos em HTML ou JavaScript';
+$lang['usedraft']              = 'Guardar o rascunho automaticamente durante a edição';
+$lang['htmlok']                = 'Permitir embeber HTML';
+$lang['phpok']                 = 'Permitir embeber PHP';
+$lang['locktime']              = 'Idade máxima para locks (seg.)';
+$lang['cachetime']             = 'Idade máxima para cache (seg.)';
+$lang['target____wiki']        = 'Parâmetro "target" para links internos';
+$lang['target____interwiki']   = 'Parâmetro "target" para links entre wikis';
+$lang['target____extern']      = 'Parâmetro "target" para links externos';
+$lang['target____media']       = 'Parâmetro "target" para links de media';
+$lang['target____windows']     = 'Parâmetro "target" para links do Windows';
+$lang['mediarevisions']        = 'Ativar Mediarevisions?';
+$lang['refcheck']              = 'Verificação de referência da media';
+$lang['gdlib']                 = 'Versão GD Lib';
+$lang['im_convert']            = 'Caminho para a ferramenta "convert" do ImageMagick';
+$lang['jpg_quality']           = 'Compressão/Qualidade JPG (0-100)';
+$lang['fetchsize']             = 'Tamanho máximo (bytes) que o fetch.php pode transferir do exterior';
+$lang['subscribers']           = 'Habilitar o suporte a subscrição de páginas ';
+$lang['subscribe_time']        = 'Tempo após o qual as listas de subscrição e "digests" são enviados (seg.); Isto deve ser inferior ao tempo especificado em recent_days.';
+$lang['notify']                = 'Enviar notificações de mudanças para este endereço de email';
+$lang['registernotify']        = 'Enviar informações de utilizadores registados para este endereço de email';
+$lang['mailfrom']              = 'Endereço de email a ser utilizado para mensagens automáticas';
+$lang['mailprefix']            = 'Prefixo de email a ser utilizado para mensagens automáticas';
+$lang['sitemap']               = 'Gerar Sitemap Google (dias)';
+$lang['rss_type']              = 'Tipo de feed XML';
+$lang['rss_linkto']            = 'Links de feed XML ara';
+$lang['rss_content']           = 'O que deve ser exibido nos itens do alimentador XML?';
+$lang['rss_update']            = 'Intervalo de actualização do alimentador XML (seg)';
+$lang['rss_show_summary']      = 'Resumo de exibição do alimentador XML no título';
 $lang['updatecheck']           = 'Verificar por actualizações e avisos de segurança? O DokuWiki precisa contactar o "splitbrain.org" para efectuar esta verificação.';
 $lang['userewrite']            = 'Usar URLs SEO';
 $lang['useslash']              = 'Usar a barra como separador de espaços de nomes nas URLs';
-$lang['usedraft']              = 'Guardar o rascunho automaticamente durante a edição';
 $lang['sepchar']               = 'Separador de palavras no nome da página';
 $lang['canonical']             = 'Usar URLs absolutas (http://servidor/caminho)';
 $lang['fnencode']              = 'Método de codificar nomes de ficheiro não-ASCII.';
 $lang['autoplural']            = 'Verificar formas plurais nos links';
 $lang['compression']           = 'Método de compressão para histórico';
-$lang['cachetime']             = 'Idade máxima para cache (seg.)';
-$lang['locktime']              = 'Idade máxima para locks (seg.)';
-$lang['fetchsize']             = 'Tamanho máximo (bytes) que o fetch.php pode transferir do exterior';
-$lang['notify']                = 'Enviar notificações de mudanças para este endereço de email';
-$lang['registernotify']        = 'Enviar informações de utilizadores registados para este endereço de email';
-$lang['mailfrom']              = 'Endereço de email a ser utilizado para mensagens automáticas';
-$lang['mailprefix']            = 'Prefixo de email a ser utilizado para mensagens automáticas';
 $lang['gzip_output']           = 'Usar "Content-Encoding" do gzip para o código xhtml';
-$lang['gdlib']                 = 'Versão GD Lib';
-$lang['im_convert']            = 'Caminho para a ferramenta "convert" do ImageMagick';
-$lang['jpg_quality']           = 'Compressão/Qualidade JPG (0-100)';
-$lang['subscribers']           = 'Habilitar o suporte a subscrição de páginas ';
-$lang['subscribe_time']        = 'Tempo após o qual as listas de subscrição e "digests" são enviados (seg.); Isto deve ser inferior ao tempo especificado em recent_days.';
 $lang['compress']              = 'Compactar as saídas de CSS e JavaScript';
 $lang['cssdatauri']            = 'Tamanho em bytes até ao qual as imagens referenciadas em ficheiros CSS devem ser embutidas diretamente no CSS para reduzir a carga de pedidos HTTP extra. Esta técnica não funciona em IE 7 e abaixo! <code>400</code> a <code>600</code> bytes é um bom valor. Escolher <code>0</code> para desativar.';
-$lang['hidepages']             = 'Esconder páginas correspondentes (expressões regulares)';
 $lang['send404']               = 'Enviar "HTTP 404/Página não encontrada" para páginas não existentes';
-$lang['sitemap']               = 'Gerar Sitemap Google (dias)';
 $lang['broken_iua']            = 'A função "ignore_user_abort" não está a funcionar no seu sistema? Isso pode causar um índice de busca defeituoso. Sistemas com IIS+PHP/CGI são conhecidos por possuírem este problema. Veja o <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">bug 852</a> para mais informações.';
 $lang['xsendfile']             = 'Usar o cabeçalho "X-Sendfile" para permitir o servidor de internet encaminhar ficheiros estáticos? O seu servidor de internet precisa ter suporte a isso.';
 $lang['renderer_xhtml']        = 'Renderizador a ser utilizado para a saída principal do wiki (xhtml)';
 $lang['renderer__core']        = '%s (núcleo dokuwiki)';
 $lang['renderer__plugin']      = '%s (plugin)';
-$lang['rememberme']            = 'Permitir cookies de autenticação permanentes (Memorizar?)';
-$lang['rss_type']              = 'Tipo de feed XML';
-$lang['rss_linkto']            = 'Links de feed XML ara';
-$lang['rss_content']           = 'O que deve ser exibido nos itens do alimentador XML?';
-$lang['rss_update']            = 'Intervalo de actualização do alimentador XML (seg)';
-$lang['recent_days']           = 'Quantas mudanças recentes devem ser mantidas? (dias)';
-$lang['rss_show_summary']      = 'Resumo de exibição do alimentador XML no título';
-$lang['target____wiki']        = 'Parâmetro "target" para links internos';
-$lang['target____interwiki']   = 'Parâmetro "target" para links entre wikis';
-$lang['target____extern']      = 'Parâmetro "target" para links externos';
-$lang['target____media']       = 'Parâmetro "target" para links de media';
-$lang['target____windows']     = 'Parâmetro "target" para links do Windows';
 $lang['proxy____host']         = 'Nome do servidor proxy';
 $lang['proxy____port']         = 'Porta de Proxy';
 $lang['proxy____user']         = 'Nome de utilizador Proxy';
diff --git a/lib/plugins/config/lang/ru/intro.txt b/lib/plugins/config/lang/ru/intro.txt
index a629d9332ce071b17b802b14aa6fb94311488adf..01cf19063721b0744ae6aeaf62c60956bb3bc158 100644
--- a/lib/plugins/config/lang/ru/intro.txt
+++ b/lib/plugins/config/lang/ru/intro.txt
@@ -1,9 +1,7 @@
 ====== Настройки вики ======
 
-Здесь вы можете изменить настройки своей «ДокуВики». Для справки по поводу конкретных опций смотрите [[doku>config]]. Дополнительные детали об этом плагине доступны здесь: [[doku>plugin:config]].
+Здесь вы можете изменить настройки своей «Докувики». Для справки по поводу конкретных опций смотрите [[doku>config|Конфигурирование «Докувики»]]. Дополнительные детали об этом плагине доступны здесь: [[doku>plugin:config]].
 
-Настройки, отображаемые на светло-красном фоне, защищены от изменений и не могут быть отредактированы с помощью этого плагина.  Голубым фоном отмечены настройки со значениями по умолчанию, а белым фоном — настройки, которые были локально изменены для этой конкретной «ДокуВики». Как голубые, так и белые настройки доступны для изменения.
+Настройки, отображаемые на светло-красном фоне, защищены от изменений и не могут быть отредактированы с помощью этого плагина.  Голубым фоном отмечены настройки со значениями по умолчанию, а белым фоном — настройки, которые были локально изменены для этой конкретной «Докувики». Как голубые, так и белые настройки доступны для изменения.
 
 Не забудьте нажать кнопку «**Сохранить**» перед тем, как покинуть эту страницу, иначе все ваши изменения будут потеряны.
-
-
diff --git a/lib/plugins/config/lang/ru/lang.php b/lib/plugins/config/lang/ru/lang.php
index 596ad4eadf787f5a9a9f751a393a2aa549b3370b..0bc6d8f752f23e2f777a76b75cfbbacf5408b9b5 100644
--- a/lib/plugins/config/lang/ru/lang.php
+++ b/lib/plugins/config/lang/ru/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * Russian language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Denis Simakov <akinoame1@gmail.com>
  * @author Andrew Pleshakov <beotiger@mail.ru>
  * @author Змей Этерийский evil_snake@eternion.ru
@@ -18,6 +18,8 @@
  * @author Eugene <windy.wanderer@gmail.com>
  * @author Johnny Utah <pcpa@cyberpunk.su>
  * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
+ * @author RainbowSpike <1@2.ru>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
  */
 $lang['menu']                  = 'Настройки вики';
 $lang['error']                 = 'Настройки не были сохранены из-за ошибки в одном из значений. Пожалуйста, проверьте свои изменения и попробуйте ещё раз.<br />Неправильные значения будут обведены красной рамкой.';
@@ -28,7 +30,7 @@ $lang['danger']                = 'Внимание: изменение этой
 $lang['warning']               = 'Предостережение: изменение этой опции может вызвать непредсказуемое поведение.';
 $lang['security']              = 'Предостережение по безопасности: изменение этой опции может вызвать риск, связанный с безопасностью.';
 $lang['_configuration_manager'] = 'Настройки вики';
-$lang['_header_dokuwiki']      = 'Параметры «ДокуВики»';
+$lang['_header_dokuwiki']      = 'Параметры «Докувики»';
 $lang['_header_plugin']        = 'Параметры плагинов';
 $lang['_header_template']      = 'Параметры шаблонов';
 $lang['_header_undefined']     = 'Прочие параметры';
@@ -51,7 +53,7 @@ $lang['start']                 = 'Имя стартовой страницы';
 $lang['lang']                  = 'Язык';
 $lang['template']              = 'Шаблон';
 $lang['tagline']               = 'Слоган (если поддерживается шаблоном)';
-$lang['sidebar']               = 'Боковая панель, пустое поле отключает боковую панель.';
+$lang['sidebar']               = 'Боковая панель; пустое поле отключает боковую панель.';
 $lang['license']               = 'На условиях какой лицензии будет предоставляться содержимое вики?';
 $lang['savedir']               = 'Директория для данных';
 $lang['basedir']               = 'Корневая директория (например, <code>/dokuwiki/</code>). Оставьте пустым для автоопределения.';
@@ -59,14 +61,14 @@ $lang['baseurl']               = 'Корневой адрес (URL) (напри
 $lang['cookiedir']             = 'Cookie директория. Оставьте пустым для автоопределения.';
 $lang['dmode']                 = 'Права для создаваемых директорий';
 $lang['fmode']                 = 'Права для создаваемых файлов';
-$lang['allowdebug']            = 'Включить отладку (отключите!)';
+$lang['allowdebug']            = 'Включить отладку. <b>Отключите, если она вам не нужна!</b>';
 $lang['recent']                = 'Недавние изменения (кол-во)';
 $lang['recent_days']           = 'На сколько дней назад сохранять недавние изменения';
-$lang['breadcrumbs']           = 'Вы посетили (кол-во)';
+$lang['breadcrumbs']           = 'Вы посетили (кол-во). Поставьте 0 (ноль) для отключения.';
 $lang['youarehere']            = 'Показывать «Вы находитесь здесь»';
 $lang['fullpath']              = 'Полный путь к документу';
 $lang['typography']            = 'Типографские символы';
-$lang['dformat']               = 'Формат даты и времени';
+$lang['dformat']               = 'Формат даты и времени (см. функцию PHP <a href="http://www.php.net/strftime">strftime</a>)';
 $lang['signature']             = 'Шаблон подписи';
 $lang['showuseras']            = 'Что отображать при показе пользователя, редактировавшего страницу последним';
 $lang['toptoclevel']           = 'Мин. уровень в содержании';
@@ -75,30 +77,32 @@ $lang['maxtoclevel']           = 'Макс. уровень в содержани
 $lang['maxseclevel']           = 'Макс. уровень для правки';
 $lang['camelcase']             = 'Использовать ВикиРегистр для ссылок';
 $lang['deaccent']              = 'Транслитерация в именах страниц';
-$lang['useheading']            = 'Первый заголовок вместо имени';
-$lang['sneaky_index']          = 'По умолчанию, «ДокуВики» показывает в индексе страниц все пространства имён. Включение этой опции скроет пространства имён, для которых пользователь не имеет прав чтения. Это может привести к скрытию доступных вложенных пространств имён и потере функциональности индекса страниц при некоторых конфигурациях прав доступа.';
-$lang['hidepages']             = 'Скрыть страницы (рег. выражение)';
+$lang['useheading']            = 'Первый заголовок вместо имени страницы';
+$lang['sneaky_index']          = 'По умолчанию, «Докувики» показывает в индексе страниц все пространства имён. Включение этой опции скроет пространства имён, для которых пользователь не имеет прав чтения. Это может привести к скрытию доступных вложенных пространств имён и потере функциональности индекса страниц при некоторых конфигурациях прав доступа.';
+$lang['hidepages']             = 'Скрыть страницы (регулярное выражение)';
 $lang['useacl']                = 'Использовать списки прав доступа';
 $lang['autopasswd']            = 'Автогенерация паролей';
 $lang['authtype']              = 'Механизм аутентификации';
 $lang['passcrypt']             = 'Метод шифрования пароля';
-$lang['defaultgroup']          = 'Группа по умолчанию';
-$lang['superuser']             = 'Суперпользователь — группа или пользователь с полным доступом ко всем страницам и функциям администрирования, независимо от установок ACL. Перечень разделяйте запятыми: user1,@group1,user2';
+$lang['defaultgroup']          = 'Группа по умолчанию. Все новые пользователю будут добавляться в эту группу.';
+$lang['superuser']             = 'Суперпользователь — группа или пользователь с полным доступом ко всем страницам и функциям администрирования, независимо от установок списков прав доступа. Перечень разделяйте запятыми: user1,@group1,user2';
 $lang['manager']               = 'Менеджер — группа или пользователь с доступом к определённым функциям управления. Перечень разделяйте запятыми: user1,@group1,user2';
 $lang['profileconfirm']        = 'Пароль для изменения профиля';
 $lang['rememberme']            = 'Разрешить перманентные куки (cookies) для входа («запомнить меня»)';
-$lang['disableactions']        = 'Заблокировать операции «ДокуВики»';
+$lang['disableactions']        = 'Заблокировать операции «Докувики»';
 $lang['disableactions_check']  = 'Проверка';
 $lang['disableactions_subscription'] = 'Подписка/Отмена подписки';
 $lang['disableactions_wikicode'] = 'Показ/экспорт исходного текста';
+$lang['disableactions_profile_delete'] = 'Удалить свой аккаунт';
 $lang['disableactions_other']  = 'Другие операции (через запятую)';
+$lang['disableactions_rss']    = 'XML-синдикация (RSS)';
 $lang['auth_security_timeout'] = 'Интервал для безопасности авторизации (сек.)';
 $lang['securecookie']          = 'Должны ли куки (cookies), выставленные через HTTPS, отправляться браузером только через HTTPS. Отключите эту опцию в случае, когда только логин вашей вики передаётся через SSL, а обычный просмотр осуществляется в небезопасном режиме.';
 $lang['remote']                = 'Включить систему API для подключений. Это позволит другим приложениям получить доступ к вики через XML-RPC или другие механизмы.';
-$lang['remoteuser']            = 'Дать права для удаленного API доступа пользователям указанным тут (разделять запятыми). Оставьте это поле пустым что бы открыть доступ всем.';
+$lang['remoteuser']            = 'Дать права для удалённого API-доступа пользователям, указанным здесь (разделяйте запятыми). Оставьте поле пустым для предоставления доступа всем.';
 $lang['usewordblock']          = 'Блокировать спам по ключевым словам';
-$lang['relnofollow']           = 'rel="nofollow" для внешних ссылок';
-$lang['indexdelay']            = 'Задержка перед индексированием';
+$lang['relnofollow']           = 'Использовать rel="nofollow" для внешних ссылок';
+$lang['indexdelay']            = 'Задержка перед индексированием (сек.)';
 $lang['mailguard']             = 'Кодировать адреса электронной почты';
 $lang['iexssprotect']          = 'Проверять закачанные файлы на наличие потенциально опасного кода JavaScript или HTML';
 $lang['usedraft']              = 'Автоматически сохранять черновик во время правки';
@@ -119,35 +123,36 @@ $lang['jpg_quality']           = 'Качество сжатия JPG (0–100). 
 $lang['fetchsize']             = 'Максимальный размер файла (в байтах), который fetch.php может скачивать с внешнего источника';
 $lang['subscribers']           = 'Разрешить подписку на изменения';
 $lang['subscribe_time']        = 'Интервал рассылки подписок и сводок (сек.). Должен быть меньше, чем значение, указанное в recent_days.';
-$lang['notify']                = 'Электронный адрес для извещений';
-$lang['registernotify']        = 'Посылать информацию о новых зарегистрированных пользователях на этот электронный адрес';
+$lang['notify']                = 'Всегда отправлять сообщения об изменениях на этот электронный адрес';
+$lang['registernotify']        = 'Всегода отправлять информацию о новых зарегистрированных пользователях на этот электронный адрес';
 $lang['mailfrom']              = 'Электронный адрес вики (От:)';
-$lang['mailprefix']            = 'Префикс используемый для автоматического письма станет темой сообщений';
-$lang['sitemap']               = 'Число дней, через которое нужно создавать (обновлять) карту сайта для поисковиков (Гугл, Яндекс и др.)';
-$lang['rss_type']              = 'Тип RSS';
-$lang['rss_linkto']            = 'Ссылки в RSS';
-$lang['rss_content']           = 'Что отображать в строках XML-ленты?';
+$lang['mailprefix']            = 'Префикс, используемый для автоматического письма, станет темой сообщения. Оставьте поле пустым для использования названия вики.';
+$lang['htmlmail']              = 'Отправлять красивые, но крупные HTML-многочастные письма. Для отправки простых текстовых писем - отключить';
+$lang['sitemap']               = 'Число дней, через которое нужно создавать (обновлять) карту сайта для поисковиков (Гугл, Яндекс и др.). Укажите 0 (ноль) для отключения.';
+$lang['rss_type']              = 'Тип XML-ленты';
+$lang['rss_linkto']            = 'Ссылки в XML-ленте указывают на';
+$lang['rss_content']           = 'Что показывать в XML-ленте?';
 $lang['rss_update']            = 'Интервал обновления XML-ленты (сек.)';
 $lang['rss_show_summary']      = 'Показывать краткую выдержку в заголовках XML-ленты';
-$lang['rss_media']             = 'Какие изменения должны быть отображены в XML?';
-$lang['updatecheck']           = 'Проверять наличие обновлений и предупреждений о безопасности? Для этого «ДокуВики» потребуется связываться с сайтом <a href="http://www.splitbrain.org/">splitbrain.org</a>.';
+$lang['rss_media']             = 'Какие изменения должны быть отображены в XML-ленте?';
+$lang['updatecheck']           = 'Проверять наличие обновлений и предупреждений о безопасности? Для этого «Докувики» потребуется связываться с update.dokuwiki.org.';
 $lang['userewrite']            = 'Удобочитаемые адреса (URL)';
-$lang['useslash']              = 'Использовать слэш';
+$lang['useslash']              = 'Использовать слэш в URL';
 $lang['sepchar']               = 'Разделитель слов в имени страницы';
 $lang['canonical']             = 'Полные канонические адреса (URL)';
 $lang['fnencode']              = 'Метод кодирования имён файлов, записанных не ASCII-символами.';
-$lang['autoplural']            = 'Автоматическое мн. число';
+$lang['autoplural']            = 'Проверять можественную форму имени страницы в ссылках';
 $lang['compression']           = 'Метод сжатия для архивных файлов';
 $lang['gzip_output']           = 'Использовать gzip-сжатие для xhtml';
 $lang['compress']              = 'Сжимать файлы CSS и javascript';
 $lang['cssdatauri']            = 'Размер в байтах до которого изображения, указанные в CSS-файлах, должны быть встроены прямо в таблицу стилей, для уменьшения избычтоных HTTP-запросов. Этот метод не будет работать в IE версии 7 и ниже! Установка от <code>400</code> до <code>600</code> байт является хорошим показателем. Установите <code>0</code>, чтобы отключить.';
-$lang['send404']               = 'Посылать «HTTP404/Page Not Found»';
+$lang['send404']               = 'Посылать «HTTP 404/Страница не найдена» для несуществующих страниц';
 $lang['broken_iua']            = 'Возможно, функция ignore_user_abort не работает в вашей системе? Это может привести к потере функциональности индексирования поиска. Эта проблема присутствует, например, в IIS+PHP/CGI. Для дополнительной информации смотрите <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">баг 852</a>.';
 $lang['xsendfile']             = 'Используете заголовок X-Sendfile для загрузки файлов на веб-сервер? Ваш веб-сервер должен поддерживать это.';
 $lang['renderer_xhtml']        = 'Обработчик основного (xhtml) вывода вики';
-$lang['renderer__core']        = '%s (ядро dokuwiki)';
+$lang['renderer__core']        = '%s (ядро «Докувики»)';
 $lang['renderer__plugin']      = '%s (плагин)';
-$lang['dnslookups']            = 'DokuWiki ищет DNS имена пользователей редактирующих страницы. Если у вас нет DNS сервера или он работает медленно, рекомендуем отключить эту опцию.';
+$lang['dnslookups']            = '«Докувики» ищет DNS-имена пользователей, редактирующих страницы. Если у вас нет DNS-сервера или он работает медленно, рекомендуем отключить эту опцию.';
 $lang['proxy____host']         = 'proxy-адрес';
 $lang['proxy____port']         = 'proxy-порт';
 $lang['proxy____user']         = 'proxy-имя пользователя';
@@ -162,15 +167,15 @@ $lang['ftp____pass']           = 'ftp-пароль';
 $lang['ftp____root']           = 'ftp-корневая директория';
 $lang['license_o_']            = 'Не выбрано';
 $lang['typography_o_0']        = 'нет';
-$lang['typography_o_1']        = 'Только двойные кавычки';
-$lang['typography_o_2']        = 'Все кавычки (может не всегда работать)';
+$lang['typography_o_1']        = 'только двойные кавычки';
+$lang['typography_o_2']        = 'все кавычки (может не всегда работать)';
 $lang['userewrite_o_0']        = '(нет)';
 $lang['userewrite_o_1']        = '.htaccess';
-$lang['userewrite_o_2']        = 'средствами «ДокуВики»';
+$lang['userewrite_o_2']        = 'средствами «Докувики»';
 $lang['deaccent_o_0']          = 'отключить';
 $lang['deaccent_o_1']          = 'убирать только диакр. знаки';
 $lang['deaccent_o_2']          = 'полная транслитерация';
-$lang['gdlib_o_0']             = 'LibGD недоступна';
+$lang['gdlib_o_0']             = 'GD Lib недоступна';
 $lang['gdlib_o_1']             = 'версия 1.x';
 $lang['gdlib_o_2']             = 'автоопределение';
 $lang['rss_type_o_rss']        = 'RSS 0.91';
@@ -178,10 +183,10 @@ $lang['rss_type_o_rss1']       = 'RSS 1.0';
 $lang['rss_type_o_rss2']       = 'RSS 2.0';
 $lang['rss_type_o_atom']       = 'Atom 0.3';
 $lang['rss_type_o_atom1']      = 'Atom 1.0';
-$lang['rss_content_o_abstract'] = 'Абстрактный';
-$lang['rss_content_o_diff']    = 'Объединённый diff';
+$lang['rss_content_o_abstract'] = 'абстрактный';
+$lang['rss_content_o_diff']    = 'объединённый diff';
 $lang['rss_content_o_htmldiff'] = 'HTML-форматированная таблица diff';
-$lang['rss_content_o_html']    = 'Полное содержимое HTML-страницы';
+$lang['rss_content_o_html']    = 'полное содержимое HTML-страницы';
 $lang['rss_linkto_o_diff']     = 'отличия от текущей';
 $lang['rss_linkto_o_page']     = 'текст страницы';
 $lang['rss_linkto_o_rev']      = 'история правок';
@@ -190,15 +195,16 @@ $lang['compression_o_0']       = 'без сжатия';
 $lang['compression_o_gz']      = 'gzip';
 $lang['compression_o_bz2']     = 'bz2';
 $lang['xsendfile_o_0']         = 'не используется';
-$lang['xsendfile_o_1']         = 'Проприетарный lighttpd-заголовок (перед релизом 1.5)';
+$lang['xsendfile_o_1']         = 'Проприетарный lighttpd-заголовок (до релиза 1.5)';
 $lang['xsendfile_o_2']         = 'Стандартный заголовок X-Sendfile';
 $lang['xsendfile_o_3']         = 'Проприетарный заголовок Nginx X-Accel-Redirect';
-$lang['showuseras_o_loginname'] = 'Логин';
-$lang['showuseras_o_username'] = 'Полное имя пользователя';
-$lang['showuseras_o_email']    = 'Адрес электропочты в шифрованном виде (см. mailguard)';
-$lang['showuseras_o_email_link'] = 'Адрес электропочты в виде ссылки mailto:';
-$lang['useheading_o_0']        = 'Никогда';
-$lang['useheading_o_navigation'] = 'Только навигация';
-$lang['useheading_o_content']  = 'Только содержимое вики';
-$lang['useheading_o_1']        = 'Всегда';
+$lang['showuseras_o_loginname'] = 'логин';
+$lang['showuseras_o_username'] = 'полное имя пользователя';
+$lang['showuseras_o_username_link'] = 'полное имя пользователя как интервики-ссылка';
+$lang['showuseras_o_email']    = 'адрес электропочты в шифрованном виде (см. mailguard)';
+$lang['showuseras_o_email_link'] = 'адрес электропочты в виде ссылки mailto:';
+$lang['useheading_o_0']        = 'никогда';
+$lang['useheading_o_navigation'] = 'только в навигации';
+$lang['useheading_o_content']  = 'только в содержимом вики';
+$lang['useheading_o_1']        = 'всегда';
 $lang['readdircache']          = 'Максимальное время жизни кэша readdir (сек.)';
diff --git a/lib/plugins/config/lang/sk/intro.txt b/lib/plugins/config/lang/sk/intro.txt
index 5de62a3152fbaf5d3a0213f9f6b68f7ab657855a..a3d15bf93ce72a883abc14ca2f6a9befe3804272 100644
--- a/lib/plugins/config/lang/sk/intro.txt
+++ b/lib/plugins/config/lang/sk/intro.txt
@@ -4,4 +4,4 @@ Túto stránku môžete používať na zmenu nastavení Vašej DokuWiki inštal
 
 Nastavenia zobrazené na červenom pozadí sú neprístupné a nemôžu byť týmto pluginom zmenené. Nastavenia s modrým pozadím obsahujú prednastavené hodnoty a nastavenia s bielym pozadím boli nastavené lokálne pre túto konkrétnu inštaláciu. Nastavenia s modrým a bielym pozadím môžu byť zmenené.
 
-Nezabudnite stlačiť tlačidlo **Uložiť** pred opustením stránky, inak budú vaše zmeny stratené.
\ No newline at end of file
+Nezabudnite stlačiť tlačidlo **Uložiť** pred opustením stránky, inak budú vaše zmeny stratené.
diff --git a/lib/plugins/config/lang/sk/lang.php b/lib/plugins/config/lang/sk/lang.php
index 46e4081a959875b87787b88d68d4bec4c78f0f12..f56353680e367bf33a5a5c8a907d1000c698787c 100644
--- a/lib/plugins/config/lang/sk/lang.php
+++ b/lib/plugins/config/lang/sk/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Slovaklanguage file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Michal Mesko <michal.mesko@gmail.com>
  * @author exusik@gmail.com
  * @author Martin Michalek <michalek.dev@gmail.com>
@@ -139,7 +140,7 @@ $lang['renderer__plugin']      = '%s (plugin)';
 $lang['dnslookups']            = 'DokuWiki hľadá mená vzdialených IP adries používateľov editujúcich stránky. Ak máte pomalý alebo nefunkčný DNS server alebo nechcete túto možnosť, deaktivujte túto voľbu';
 $lang['proxy____host']         = 'Proxy server - názov';
 $lang['proxy____port']         = 'Proxy server - port';
-$lang['proxy____user']         = 'Proxy server - užívateľské meno';
+$lang['proxy____user']         = 'Proxy server - používateľské meno';
 $lang['proxy____pass']         = 'Proxy server - heslo';
 $lang['proxy____ssl']          = 'Proxy server - použiť SSL';
 $lang['proxy____except']       = 'Regulárny výraz popisujúci URL odkazy, pre ktoré by proxy nemala byť použitá.';
diff --git a/lib/plugins/config/lang/sq/intro.txt b/lib/plugins/config/lang/sq/intro.txt
index 687b497c9c5500da1efcc37c9ec431ebd5878af8..d2bab0fd562c925e985c7696de6cfbdb02b9087a 100644
--- a/lib/plugins/config/lang/sq/intro.txt
+++ b/lib/plugins/config/lang/sq/intro.txt
@@ -4,4 +4,4 @@ Përdoreni këtë faqe për të kontrolluar kuadrot e instalimit të DokuWiki-t
 
 Kuadrot e treguara me një backgroudn me një ngjyrë të kuqe të lehtë janë të mbrojtura dhe nuk mund të ndryshohen me këtë plugin. Kuadrot e treguara me një background blu janë vlerat default dhe kuadrot e treguara me një background të bardhë janë vendosur lokalisht për këtë instalim të caktuar. Si kuadrot blu, ashtu edhe ato të bardhë mund të ndryshohen.
 
-Kujtohuni të shtypni butonin **Ruaj** para se të dilni nga kjo faqe ose ndryshimet tuaja do të humbasin.
\ No newline at end of file
+Kujtohuni të shtypni butonin **Ruaj** para se të dilni nga kjo faqe ose ndryshimet tuaja do të humbasin.
diff --git a/lib/plugins/config/lang/sv/intro.txt b/lib/plugins/config/lang/sv/intro.txt
index 8887d4a7bd6f57978732a97d0e6aac44597a4172..fd77634c2b0c936c958cb5c7019707c9dd34eed8 100644
--- a/lib/plugins/config/lang/sv/intro.txt
+++ b/lib/plugins/config/lang/sv/intro.txt
@@ -5,5 +5,3 @@ Använd den här sidan för att göra inställningar i din Dokuwiki. För hjälp
 Inställningar med en rosa bakgrund är skyddade och kan inte ändras med den här insticksmodulen. Inställningar med en blå bakgrund är standardvärden, och inställningar som visas med en vit bakgrund har ändrats i den här installationen. Både blåa och vita inställningar kan ändras.
 
 Kom i håg att trycka på knappen **Spara** innan du lämnar den här sidan, annars kommer ändringarna att gå förlorade.
-
-
diff --git a/lib/plugins/config/lang/th/lang.php b/lib/plugins/config/lang/th/lang.php
index 68ee8b8a27a6f38ecfd44c87dee5f8d69405c079..ce1d30d6278905e4272ea50cf4ce309d07803280 100644
--- a/lib/plugins/config/lang/th/lang.php
+++ b/lib/plugins/config/lang/th/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Thai language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Komgrit Niyomrath <n.komgrit@gmail.com>
  * @author Kittithat Arnontavilas mrtomyum@gmail.com
  * @author Arthit Suriyawongkul <arthit@gmail.com>
@@ -23,48 +24,48 @@ $lang['_links']                = 'การตั้งค่าลิงก์'
 $lang['_media']                = 'การตั้งค่าภาพ-เสียง';
 $lang['_advanced']             = 'การตั้งค่าขั้นสูง';
 $lang['_network']              = 'การตั้งค่าเครือข่าย';
+$lang['start']                 = 'ชื่อหน้าเริ่มต้น';
 $lang['lang']                  = 'ภาษา';
+$lang['savedir']               = 'ไดเรคทอรีที่บันทึกข้อมูล';
 $lang['basedir']               = 'ไดเรคทอรีพื้นฐาน';
 $lang['baseurl']               = 'URL พื้นฐาน';
-$lang['savedir']               = 'ไดเรคทอรีที่บันทึกข้อมูล';
-$lang['start']                 = 'ชื่อหน้าเริ่มต้น';
 $lang['recent']                = 'การเปลี่ยนแปลงล่าสุด';
-$lang['htmlok']                = 'อนุญาตให้ใช้ HTML';
-$lang['phpok']                 = 'อนุญาตให้ใช้ PHP';
+$lang['recent_days']           = 'จำนวนวันที่เก็บรายการที่ถูกแก้ไขล่าสุด';
 $lang['signature']             = 'ลายเซนต์';
-$lang['usewordblock']          = 'คำที่จะถือว่าเป็นสแปม';
-$lang['relnofollow']           = 'ใช้ rel="nofollow" สำหรับลิงก์ภายนอก';
+$lang['hidepages']             = 'ซ่อนหน้าที่เข้ากันได้ (regular expressions)';
 $lang['autopasswd']            = 'สร้างรหัสผ่านให้อัตโนมัติ';
 $lang['passcrypt']             = 'กระบวนการเข้ารหัส สำหรับเก็บบันทึกรหัสผ่าน';
 $lang['defaultgroup']          = 'กลุ่มมาตรฐาน';
 $lang['profileconfirm']        = 'ใส่รหัสผ่านเพื่อยืนยันการเปลี่ยนแปลงข้อมูล';
+$lang['rememberme']            = 'อนุญาตให้จดจำการ login แบบถาวร';
 $lang['disableactions_check']  = 'ตรวจสอบ';
 $lang['auth_security_timeout'] = 'ระยะเวลาที่จะตัดการเชื่อมต่อแบบการใช้งานด้วยสิทธิ์ผู้ใช้ (วินาที)';
-$lang['userewrite']            = 'แสดงที่อยู่เว็บ (URL) แบบอ่านเข้าใจง่าย';
-$lang['cachetime']             = 'ระยะเวลาสำหรับการเก็บแคช (วินาที)';
+$lang['usewordblock']          = 'คำที่จะถือว่าเป็นสแปม';
+$lang['relnofollow']           = 'ใช้ rel="nofollow" สำหรับลิงก์ภายนอก';
+$lang['htmlok']                = 'อนุญาตให้ใช้ HTML';
+$lang['phpok']                 = 'อนุญาตให้ใช้ PHP';
 $lang['locktime']              = 'ระยะเวลานานสุด ที่จะล็อคไม่ให้แก้ไขไฟล์ (วินาที)';
+$lang['cachetime']             = 'ระยะเวลาสำหรับการเก็บแคช (วินาที)';
+$lang['target____wiki']        = 'เปิดแสดงลิงก์ภายใน ในหน้าเว็บแบบใด';
+$lang['target____interwiki']   = 'เปิดแสดงลิงก์ interwiki ในหน้าเว็บแบบใด';
+$lang['target____extern']      = 'เปิดแสดงลิงก์ภายนอก ในหน้าเว็บแบบใด';
+$lang['target____media']       = 'เปิดแสดงลิงก์ของมีเดีย ในหน้าเว็บแบบใด';
+$lang['target____windows']     = 'เปิดแสดงลิงก์ของวินโดวส์ ในหน้าเว็บแบบใด';
+$lang['gdlib']                 = 'เลขรุ่นของ GD Library';
 $lang['fetchsize']             = 'ขนาดไฟล์ใหญ่สุด (bytes) fetch.php ที่จะดาวน์โหลดจากภายนอก';
 $lang['notify']                = 'ส่งการแจ้งเตือนไปยังที่อยู่อีเมลนี้';
-$lang['gzip_output']           = 'ใช้ gzip Content-Encoding สำหรับ xhtml';
-$lang['gdlib']                 = 'เลขรุ่นของ GD Library';
-$lang['compress']              = 'บีบย่อ CSS และ javascript (เพื่อให้แสดงหน้าเว็บเร็วขึ้น)';
-$lang['hidepages']             = 'ซ่อนหน้าที่เข้ากันได้ (regular expressions)';
-$lang['send404']               = 'ให้แสดง "HTTP 404/Page Not Found" เมื่อไม่พบข้อมูลหน้านั้น';
 $lang['sitemap']               = 'สร้าง กูเกิ้ล ไซต์แมพ (จำนวนวัน)';
-$lang['renderer__core']        = '%s (แกนหลักของ dokuwiki)';
-$lang['renderer__plugin']      = '%s (โปรแกรมเสริม - plugin)';
-$lang['rememberme']            = 'อนุญาตให้จดจำการ login แบบถาวร';
 $lang['rss_type']              = 'ชนิดของ XML feed';
 $lang['rss_linkto']            = 'ลิงก์เชื่อมโยงไปยัง XML feed';
 $lang['rss_content']           = 'ต้องการให้มีอะไรแสดงอยู่ใน XML feed บ้าง?';
 $lang['rss_update']            = 'ความถี่ในการอัพเดท XML feed (เป็นวินาที)';
-$lang['recent_days']           = 'จำนวนวันที่เก็บรายการที่ถูกแก้ไขล่าสุด';
 $lang['rss_show_summary']      = 'ไตเติ้ลของบทสรุปย่อของ XML feed';
-$lang['target____wiki']        = 'เปิดแสดงลิงก์ภายใน ในหน้าเว็บแบบใด';
-$lang['target____interwiki']   = 'เปิดแสดงลิงก์ interwiki ในหน้าเว็บแบบใด';
-$lang['target____extern']      = 'เปิดแสดงลิงก์ภายนอก ในหน้าเว็บแบบใด';
-$lang['target____media']       = 'เปิดแสดงลิงก์ของมีเดีย ในหน้าเว็บแบบใด';
-$lang['target____windows']     = 'เปิดแสดงลิงก์ของวินโดวส์ ในหน้าเว็บแบบใด';
+$lang['userewrite']            = 'แสดงที่อยู่เว็บ (URL) แบบอ่านเข้าใจง่าย';
+$lang['gzip_output']           = 'ใช้ gzip Content-Encoding สำหรับ xhtml';
+$lang['compress']              = 'บีบย่อ CSS และ javascript (เพื่อให้แสดงหน้าเว็บเร็วขึ้น)';
+$lang['send404']               = 'ให้แสดง "HTTP 404/Page Not Found" เมื่อไม่พบข้อมูลหน้านั้น';
+$lang['renderer__core']        = '%s (แกนหลักของ dokuwiki)';
+$lang['renderer__plugin']      = '%s (โปรแกรมเสริม - plugin)';
 $lang['proxy____host']         = 'ชื่อ server ของ proxy';
 $lang['proxy____port']         = 'port ของ proxy';
 $lang['proxy____user']         = 'user name ของ proxy';
diff --git a/lib/plugins/config/lang/tr/intro.txt b/lib/plugins/config/lang/tr/intro.txt
index 4a965422224afd8031113f95d4026a2af6667e21..2602fb3eda9fb007fc094dfd532b36216fb430f3 100644
--- a/lib/plugins/config/lang/tr/intro.txt
+++ b/lib/plugins/config/lang/tr/intro.txt
@@ -4,4 +4,4 @@ Bu sayfayı DokuWiki kurulumunun ayarlarını değiştirmek için kullanabilirsi
 
 Açık kırmızı renkle gösterilenler bu eklenti ile değiştirilemez. Mavi ile gösterilenler varsayılan değerlerdir. Beyaz altyazı ile gösterilenler is bu kuruluma özel değiştirilmiş ayarlardır. Mavi ve beyaz ayarlar değiştirilebilir.
 
-Değişiklik yapmanız durumunda **Kaydet** tuşuna basmayı unutmayınız. Aksi takdirde sayfayı kapattığınızda tüm ayarlar silinecektir.
\ No newline at end of file
+Değişiklik yapmanız durumunda **Kaydet** tuşuna basmayı unutmayınız. Aksi takdirde sayfayı kapattığınızda tüm ayarlar silinecektir.
diff --git a/lib/plugins/config/lang/tr/lang.php b/lib/plugins/config/lang/tr/lang.php
index cb610f4ff67d97f4f8fa9250dfe77f6b5b1fda6f..344f22de1bd55932d6a300ab325c3b2d42b531ce 100644
--- a/lib/plugins/config/lang/tr/lang.php
+++ b/lib/plugins/config/lang/tr/lang.php
@@ -1,12 +1,14 @@
 <?php
+
 /**
- * Turkish language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Aydın Coşkuner <aydinweb@gmail.com>
  * @author Cihan Kahveci <kahvecicihan@gmail.com>
  * @author Yavuz Selim <yavuzselim@gmail.com>
  * @author Caleb Maclennan <caleb@alerque.com>
  * @author farukerdemoncel@gmail.com
+ * @author Mete Cuma <mcumax@gmail.com>
  */
 $lang['menu']                  = 'Site Ayarları';
 $lang['error']                 = 'Ayarlar yanlış bir değer girildiği için güncellenemedi. Lütfen değişikliklerinizi gözden geçirin ve tekrar gönderin.
diff --git a/lib/plugins/config/lang/uk/lang.php b/lib/plugins/config/lang/uk/lang.php
index dea9203e845246f960f51bdb1cc659a25ed95044..02c3273679022ff6eb252e78c2642a70ecdb740f 100644
--- a/lib/plugins/config/lang/uk/lang.php
+++ b/lib/plugins/config/lang/uk/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * ukrainian language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Oleksiy Voronin <ovoronin@gmail.com>
  * @author serg_stetsuk@ukr.net
  * @author okunia@gmail.com
@@ -10,6 +10,7 @@
  * @author Uko uko@uar.net
  * @author Ulrikhe Lukoie  <lukoie@gmail>.com
  * @author Kate Arzamastseva pshns@ukr.net
+ * @author Maksim <nikropol@yandex.ru>
  */
 $lang['menu']                  = 'Налаштування Вікі';
 $lang['error']                 = 'Параметри не збережено через помилкові значення. Будь ласка, перегляньте ваші зміни та спробуйте ще раз
diff --git a/lib/plugins/config/lang/zh-tw/intro.txt b/lib/plugins/config/lang/zh-tw/intro.txt
index 228c12e0abbceafaac8c7d55448d6f916d203e2e..e131ec342d20e405da5b0dfa08da48fe9874cee1 100644
--- a/lib/plugins/config/lang/zh-tw/intro.txt
+++ b/lib/plugins/config/lang/zh-tw/intro.txt
@@ -4,4 +4,4 @@
 
 淡紅色背景的項目是受到保護的,不能通過這管理器更改。藍色背景的項目是系統的預設值,白色背景的項目是您更改過的。藍色和白色的設定項目都可以更改。
 
-離開本頁之前,不要忘記點擊最下面的 **儲存** 按鈕,否則您的修改不會生效。
\ No newline at end of file
+離開本頁之前,不要忘記點擊最下面的 **儲存** 按鈕,否則您的修改不會生效。
diff --git a/lib/plugins/config/lang/zh-tw/lang.php b/lib/plugins/config/lang/zh-tw/lang.php
index cc2c28c31084c1437f0c6ea6e5d26f071a120cee..e5b051bfbcd186940295d6accf7328d60d490978 100644
--- a/lib/plugins/config/lang/zh-tw/lang.php
+++ b/lib/plugins/config/lang/zh-tw/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Chinese Traditional language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
  * @author http://www.chinese-tools.com/tools/converter-simptrad.html
  * @author Wayne San <waynesan@zerozone.tw>
@@ -11,6 +12,7 @@
  * @author Shuo-Ting Jian <shoting@gmail.com>
  * @author syaoranhinata@gmail.com
  * @author Ichirou Uchiki <syaoranhinata@gmail.com>
+ * @author Liou, Jhe-Yu <lioujheyu@gmail.com>
  */
 $lang['menu']                  = '系統設定';
 $lang['error']                 = '因為含有不合規格的設定值,故未能更新設定。請檢查您的更改並重新送出。
@@ -137,7 +139,7 @@ $lang['gzip_output']           = '對 xhtml 使用 gzip 內容編碼';
 $lang['compress']              = '壓縮 CSS 與 JavaScript 的輸出';
 $lang['cssdatauri']            = '假如 CSS 中所引用的圖片小於該數字大小(bytes),圖片將被直接嵌入 CSS 中,以減少 HTTP Request 的發送。 IE 7 及以下的版本並不支援此功能。推薦把此數值設定成 <code>400</code> 至 <code>600</code> bytes 之間。若輸入 <code>0</code> 則停用此功能。';
 $lang['send404']               = '存取不存在的頁面時送出 "HTTP 404/Page Not Found"';
-$lang['broken_iua']            = 'ignore_user_abort 功能失效了?這有可能導致搜索索引不可用。IIS+PHP/CGI 已損壞。請參閱 <a href=\"http://bugs.splitbrain.org/?do=details&task_id=852\">Bug 852</a> 獲取更多訊息。';
+$lang['broken_iua']            = 'ignore_user_abort 功能失效了?這有可能導致搜索索引不可用。IIS+PHP/CGI 已損壞。請參閱 <a href=\"http://bugs.splitbrain.org/?do=details&amp;task_id=852">Bug 852</a> 獲取更多訊息。';
 $lang['xsendfile']             = '使用 X-Sendfile 頭讓網頁伺服器發送狀態文件?您的網頁伺服器需要支持該功能。';
 $lang['renderer_xhtml']        = '主要 wiki 輸出 (xhtml) 的渲染器';
 $lang['renderer__core']        = '%s (dokuwiki 核心)';
diff --git a/lib/plugins/config/lang/zh/intro.txt b/lib/plugins/config/lang/zh/intro.txt
index a7db4eda0f4ea03d359b32c92a1adef4ddb60bc5..30cb650042c8bceb046eb0bd019cfdcc49a64e49 100644
--- a/lib/plugins/config/lang/zh/intro.txt
+++ b/lib/plugins/config/lang/zh/intro.txt
@@ -5,5 +5,3 @@
 淡红色背景的项目被保护,不能通过这个管理器更改。 蓝色背景的项目是系统的默认值,白色背景的项目是您作出更改的项目。蓝色和白色的设置项目都可以更改。
 
 离开本页之前不要忘记点击最后的 **保存** 按钮,否则您做的修改不会生效。
-
-
diff --git a/lib/plugins/config/lang/zh/lang.php b/lib/plugins/config/lang/zh/lang.php
index 364ad3fe64101ffae766f7e8a1a46db9e6c98a16..4ae3a01fd249864a57830e760983d74a8800ff93 100644
--- a/lib/plugins/config/lang/zh/lang.php
+++ b/lib/plugins/config/lang/zh/lang.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
- * Chinese(Simplified) language file
- *
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author ZDYX <zhangduyixiong@gmail.com>
  * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
  * @author George Sheraton guxd@163.com
@@ -15,6 +15,7 @@
  * @author caii, patent agent in China <zhoucaiqi@gmail.com>
  * @author lainme993@gmail.com
  * @author Shuo-Ting Jian <shoting@gmail.com>
+ * @author Garfield <garfield_550@outlook.com>
  */
 $lang['menu']                  = '配置设置';
 $lang['error']                 = '由于非法参数,设置没有更新。请检查您做的改动并重新提交。
@@ -90,7 +91,9 @@ $lang['disableactions']        = '停用 DokuWiki 功能';
 $lang['disableactions_check']  = '检查';
 $lang['disableactions_subscription'] = '订阅/退订';
 $lang['disableactions_wikicode'] = '查看源文件/导出源文件';
+$lang['disableactions_profile_delete'] = '删除自己的账户';
 $lang['disableactions_other']  = '其他功能(用英文逗号分隔)';
+$lang['disableactions_rss']    = 'XML 同步 (RSS)';
 $lang['auth_security_timeout'] = '认证安全超时(秒)';
 $lang['securecookie']          = '要让浏览器须以HTTPS方式传送在HTTPS会话中设置的cookies吗?请只在登录过程为SSL加密而浏览维基为明文的情况下打开此选项。';
 $lang['remote']                = '激活远程 API 系统。这允许其他程序通过 XML-RPC 或其他机制来访问维基。';
@@ -196,6 +199,7 @@ $lang['xsendfile_o_2']         = '标准 X-Sendfile 头';
 $lang['xsendfile_o_3']         = '专有 Nginx X-Accel-Redirect 头';
 $lang['showuseras_o_loginname'] = '登录名';
 $lang['showuseras_o_username'] = '用户全名';
+$lang['showuseras_o_username_link'] = '使用用户全名作为维基内的用户链接';
 $lang['showuseras_o_email']    = '用户的电子邮箱(按邮箱保护设置加扰)';
 $lang['showuseras_o_email_link'] = '以mailto:形式显示用户的电子邮箱';
 $lang['useheading_o_0']        = '从不';
diff --git a/lib/plugins/config/plugin.info.txt b/lib/plugins/config/plugin.info.txt
index 9472346b9384b3d8344afe2e975507a870c98440..ddd72657d52ff675db1965e69aabeccdf12cff2e 100644
--- a/lib/plugins/config/plugin.info.txt
+++ b/lib/plugins/config/plugin.info.txt
@@ -1,7 +1,7 @@
 base   config
 author Christopher Smith
 email  chris@jalakai.co.uk
-date   2014-03-18
+date   2015-07-18
 name   Configuration Manager
 desc   Manage Dokuwiki's Configuration Settings
 url    http://dokuwiki.org/plugin:config
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 316cc2c593e5db1519547e5214828e96ef8ae3c9..9c4cca49c8e9d16336b62b4c0e5fd51495dae1bb 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -37,7 +37,7 @@ if (!class_exists('configuration')) {
          *
          * @param string $datafile path to config metadata file
          */
-        public function configuration($datafile) {
+        public function __construct($datafile) {
             global $conf, $config_cascade;
 
             if (!file_exists($datafile)) {
@@ -101,7 +101,12 @@ if (!class_exists('configuration')) {
                     }
 
                     $this->setting[$key] = new $class($key,$param);
-                    $this->setting[$key]->initialize($default[$key],$local[$key],$protected[$key]);
+
+                    $d = array_key_exists($key, $default) ? $default[$key] : null;
+                    $l = array_key_exists($key, $local) ? $local[$key] : null;
+                    $p = array_key_exists($key, $protected) ? $protected[$key] : null;
+
+                    $this->setting[$key]->initialize($d,$l,$p);
                 }
 
                 $this->_loaded = true;
@@ -434,7 +439,7 @@ if (!class_exists('setting')) {
          * @param string $key
          * @param array|null $params array with metadata of setting
          */
-        public function setting($key, $params=null) {
+        public function __construct($key, $params=null) {
             $this->_key = $key;
 
             if (is_array($params)) {
@@ -887,29 +892,6 @@ if (!class_exists('setting_email')) {
     }
 }
 
-/**
- * @deprecated 2013-02-16
- */
-if (!class_exists('setting_richemail')) {
-    /**
-     * Class setting_richemail
-     */
-    class setting_richemail extends setting_email {
-        /**
-         * update changed setting with user provided value $input
-         * - if changed value fails error check, save it
-         *
-         * @param  mixed   $input   the new value
-         * @return boolean          true if changed, false otherwise (also on error)
-         */
-        function update($input) {
-            $this->_placeholders = true;
-            return parent::update($input);
-        }
-    }
-}
-
-
 if (!class_exists('setting_numeric')) {
     /**
      * Class setting_numeric
@@ -1242,7 +1224,7 @@ if (!class_exists('setting_multicheckbox')) {
          * Build html for label and input of setting
          *
          * @param DokuWiki_Plugin $plugin object of config plugin
-         * @param bool            $echo   true: show inputted value, when error occurred, otherwise the stored setting
+         * @param bool            $echo   true: show input value, when error occurred, otherwise the stored setting
          * @return string[] with content array(string $label_html, string $input_html)
          */
         function html(&$plugin, $echo=false) {
diff --git a/lib/plugins/config/settings/extra.class.php b/lib/plugins/config/settings/extra.class.php
index fd3a90e284e5d6f8afb2935b0d11ba99f36c088c..2445577d1288ae91e933c571b5b56edb7a2c6e10 100644
--- a/lib/plugins/config/settings/extra.class.php
+++ b/lib/plugins/config/settings/extra.class.php
@@ -15,12 +15,12 @@ if (!class_exists('setting_sepchar')) {
          * @param string $key
          * @param array|null $param array with metadata of setting
          */
-        function setting_sepchar($key,$param=null) {
+        function __construct($key,$param=null) {
             $str = '_-.';
             for ($i=0;$i<strlen($str);$i++) $this->_choices[] = $str{$i};
 
             // call foundation class constructor
-            $this->setting($key,$param);
+            parent::__construct($key,$param);
         }
     }
 }
diff --git a/lib/plugins/extension/_test/extension.test.php b/lib/plugins/extension/_test/extension.test.php
index 453b95e79355807ee34fd63fd6e3abeec9b0badf..d4f13201d3a63a6c68316ad798850893d5355975 100644
--- a/lib/plugins/extension/_test/extension.test.php
+++ b/lib/plugins/extension/_test/extension.test.php
@@ -14,7 +14,9 @@ class mock_helper_plugin_extension_extension extends helper_plugin_extension_ext
 
 /**
  * @group plugin_extension
+ * @group admin_plugins
  * @group plugins
+ * @group bundled_plugins
  */
 class helper_plugin_extension_extension_test extends DokuWikiTest {
 
diff --git a/lib/plugins/extension/helper/extension.php b/lib/plugins/extension/helper/extension.php
index 6c0946b09acf185d206e8294bea7d6be8da72993..2f44f55ba77310ec245dd87d02623e6130747456 100644
--- a/lib/plugins/extension/helper/extension.php
+++ b/lib/plugins/extension/helper/extension.php
@@ -105,10 +105,10 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
      */
     public function isBundled() {
         if (!empty($this->remoteInfo['bundled'])) return $this->remoteInfo['bundled'];
-        return in_array($this->base,
+        return in_array($this->id,
                         array(
                             'authad', 'authldap', 'authmysql', 'authpgsql', 'authplain', 'acl', 'info', 'extension',
-                            'revert', 'popularity', 'config', 'safefnrecode', 'testing', 'template:dokuwiki'
+                            'revert', 'popularity', 'config', 'safefnrecode', 'styling', 'testing', 'template:dokuwiki'
                         )
         );
     }
@@ -578,6 +578,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
         try {
             $installed = $this->installArchive("$tmp/upload.archive", true, $basename);
             $this->updateManagerData('', $installed);
+            $this->removeDeletedfiles($installed);
             // purge cache
             $this->purgeCache();
         }catch (Exception $e){
@@ -598,6 +599,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
             $path      = $this->download($url);
             $installed = $this->installArchive($path, true);
             $this->updateManagerData($url, $installed);
+            $this->removeDeletedfiles($installed);
 
             // purge cache
             $this->purgeCache();
@@ -623,6 +625,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
         if (!isset($installed[$this->getID()])) {
             throw new Exception('Error, the requested extension hasn\'t been installed or updated');
         }
+        $this->removeDeletedfiles($installed);
         $this->setExtension($this->getID());
         $this->purgeCache();
         return $installed;
@@ -918,7 +921,9 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
             if($this->dircopy($item['tmp'], $target)) {
                 // return info
                 $id = $item['base'];
-                if($item['type'] == 'template') $id = 'template:'.$id;
+                if($item['type'] == 'template') {
+                    $id = 'template:'.$id;
+                }
                 $installed_extensions[$id] = array(
                     'base' => $item['base'],
                     'type' => $item['type'],
@@ -1035,33 +1040,24 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
 
         $ext = $this->guess_archive($file);
         if(in_array($ext, array('tar', 'bz', 'gz'))) {
-            switch($ext) {
-                case 'bz':
-                    $compress_type = Tar::COMPRESS_BZIP;
-                    break;
-                case 'gz':
-                    $compress_type = Tar::COMPRESS_GZIP;
-                    break;
-                default:
-                    $compress_type = Tar::COMPRESS_NONE;
-            }
 
-            $tar = new Tar();
             try {
-                $tar->open($file, $compress_type);
+                $tar = new \splitbrain\PHPArchive\Tar();
+                $tar->open($file);
                 $tar->extract($target);
-            } catch (Exception $e) {
+            } catch (\splitbrain\PHPArchive\ArchiveIOException $e) {
                 throw new Exception($this->getLang('error_decompress').' '.$e->getMessage());
             }
 
             return true;
         } elseif($ext == 'zip') {
 
-            $zip = new ZipLib();
-            $ok  = $zip->Extract($file, $target);
-
-            if($ok == -1){
-                throw new Exception($this->getLang('error_decompress').' Error extracting the zip archive');
+            try {
+                $zip = new \splitbrain\PHPArchive\Zip();
+                $zip->open($file);
+                $zip->extract($target);
+            } catch (\splitbrain\PHPArchive\ArchiveIOException $e) {
+                throw new Exception($this->getLang('error_decompress').' '.$e->getMessage());
             }
 
             return true;
@@ -1126,6 +1122,40 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
 
         return true;
     }
+
+    /**
+     * Delete outdated files from updated plugins
+     *
+     * @param array $installed
+     */
+    private function removeDeletedfiles($installed) {
+        foreach($installed as $id => $extension) {
+            // only on update
+            if($extension['action'] == 'install') continue;
+
+            // get definition file
+            if($extension['type'] == 'template') {
+                $extensiondir = DOKU_TPLLIB;
+            }else{
+                $extensiondir = DOKU_PLUGIN;
+            }
+            $extensiondir = $extensiondir . $extension['base'] .'/';
+            $definitionfile = $extensiondir . 'deleted.files';
+            if(!file_exists($definitionfile)) continue;
+
+            // delete the old files
+            $list = file($definitionfile);
+
+            foreach($list as $line) {
+                $line = trim(preg_replace('/#.*$/', '', $line));
+                if(!$line) continue;
+                $file = $extensiondir . $line;
+                if(!file_exists($file)) continue;
+
+                io_rmdir($file, true);
+            }
+        }
+    }
 }
 
 // vim:ts=4:sw=4:et:
diff --git a/lib/plugins/extension/helper/gui.php b/lib/plugins/extension/helper/gui.php
index 3a0f0c58985ccc1681f38d1f1ed216e21894342c..4ec6fec8561edfdde8cae09c1a295fbf8ac13b2f 100644
--- a/lib/plugins/extension/helper/gui.php
+++ b/lib/plugins/extension/helper/gui.php
@@ -144,11 +144,11 @@ class helper_plugin_extension_gui extends DokuWiki_Plugin {
         foreach($this->tabs as $tab) {
             $url = $this->tabURL($tab);
             if($this->currentTab() == $tab) {
-                $class = 'class="active"';
+                $class = ' active';
             } else {
                 $class = '';
             }
-            echo '<li '.$class.'><a href="'.$url.'">'.$this->getLang('tab_'.$tab).'</a></li>';
+            echo '<li class="'.$tab.$class.'"><a href="'.$url.'">'.$this->getLang('tab_'.$tab).'</a></li>';
         }
         echo '</ul>';
     }
diff --git a/lib/plugins/extension/helper/list.php b/lib/plugins/extension/helper/list.php
index 872cccc8c8d35a69e6b600a89308ba00e6259846..6ca72f7cef90438a2720589fa417a09c4e1df790 100644
--- a/lib/plugins/extension/helper/list.php
+++ b/lib/plugins/extension/helper/list.php
@@ -151,6 +151,7 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
         if($extension->isInstalled()) {
             $class.=' installed';
             $class.= ($extension->isEnabled()) ? ' enabled':' disabled';
+            if($extension->updateAvailable()) $class .= ' updatable';
         }
         if(!$extension->canModify()) $class.= ' notselect';
         if($extension->isProtected()) $class.=  ' protected';
@@ -265,7 +266,7 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
         $return  = '<div class="linkbar">';
         $return .= $this->make_homepagelink($extension);
         if ($extension->getBugtrackerURL()) {
-            $return .= ' <a href="'.hsc($extension->getBugtrackerURL()).'" title="'.hsc($extension->getBugtrackerURL()).'" class ="interwiki iw_dokubug">'.$this->getLang('bugs_features').'</a> ';
+            $return .= ' <a href="'.hsc($extension->getBugtrackerURL()).'" title="'.hsc($extension->getBugtrackerURL()).'" class ="bugs">'.$this->getLang('bugs_features').'</a> ';
         }
         if ($extension->getTags()){
             $first = true;
@@ -492,7 +493,7 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
                 $errors .= '<p class="permerror">'.$this->getLang('git').'</p>';
             }
 
-            if ($extension->isEnabled() && in_array('Auth', $extension->getTypes()) && $conf['auth'] != $extension->getID()) {
+            if ($extension->isEnabled() && in_array('Auth', $extension->getTypes()) && $conf['authtype'] != $extension->getID()) {
                 $errors .= '<p class="permerror">'.$this->getLang('auth').'</p>';
             }
 
@@ -534,7 +535,7 @@ class helper_plugin_extension_list extends DokuWiki_Plugin {
         $classes = 'button '.$action;
         $name    = 'fn['.$action.']['.hsc($extension->getID()).']';
 
-        return '<input class="'.$classes.'" name="'.$name.'" type="submit" value="'.$this->getLang('btn_'.$action).'" '.$title.' />';
+        return '<button class="'.$classes.'" name="'.$name.'" type="submit" '.$title.'>'.$this->getLang('btn_'.$action).'</button> ';
     }
 
     /**
diff --git a/lib/images/interwiki/dokubug.gif b/lib/plugins/extension/images/bug.gif
similarity index 100%
rename from lib/images/interwiki/dokubug.gif
rename to lib/plugins/extension/images/bug.gif
diff --git a/lib/plugins/extension/images/disabled.png b/lib/plugins/extension/images/disabled.png
index 93a813642a955210f14433ed542f4711190ce482..9c18b0452a1c3620341532f32fabc7444070d666 100644
Binary files a/lib/plugins/extension/images/disabled.png and b/lib/plugins/extension/images/disabled.png differ
diff --git a/lib/plugins/extension/images/donate.png b/lib/plugins/extension/images/donate.png
index 9e234da1c5f7112d9d38eee45866f58ac517521e..a76dfaaec7daa63d4425a8dfd50b4ceffc505697 100644
Binary files a/lib/plugins/extension/images/donate.png and b/lib/plugins/extension/images/donate.png differ
diff --git a/lib/plugins/extension/images/down.png b/lib/plugins/extension/images/down.png
index df7beda4ea08724419bc851dc2489b48dd690e03..8e399a97db4a9be31174e12c69ceabd8cb6d35b9 100644
Binary files a/lib/plugins/extension/images/down.png and b/lib/plugins/extension/images/down.png differ
diff --git a/lib/plugins/extension/images/enabled.png b/lib/plugins/extension/images/enabled.png
index 92d958802c8e19e0b25a940bbfe0176d33862307..edbbb5b3cd494fc7d7b67f3fef56a03eb50559c4 100644
Binary files a/lib/plugins/extension/images/enabled.png and b/lib/plugins/extension/images/enabled.png differ
diff --git a/lib/plugins/extension/images/overlay.png b/lib/plugins/extension/images/overlay.png
index 8f92c2fe7707273dbd79c2ea3ab840c2d02979f6..5414206c555d670826eead514b2257192ce2f6b4 100644
Binary files a/lib/plugins/extension/images/overlay.png and b/lib/plugins/extension/images/overlay.png differ
diff --git a/lib/plugins/extension/images/plugin.png b/lib/plugins/extension/images/plugin.png
index e4a2d3be6a70009baf5027afcbc67d3360618876..62424b2c7a15fad2e05f1674ef3c04f6c353d6eb 100644
Binary files a/lib/plugins/extension/images/plugin.png and b/lib/plugins/extension/images/plugin.png differ
diff --git a/lib/plugins/extension/images/tag.png b/lib/plugins/extension/images/tag.png
index 155dbb3ddd292dfd6bd6f0f914caffa1101778a6..1b1dd750ca351bc0c51f7d15124a9391fcadfe9a 100644
Binary files a/lib/plugins/extension/images/tag.png and b/lib/plugins/extension/images/tag.png differ
diff --git a/lib/plugins/extension/images/template.png b/lib/plugins/extension/images/template.png
index ee74bc1d54eec6080fdb298da960566673eaf708..67240d1eb0c8fb91f7db528c20296a1029512497 100644
Binary files a/lib/plugins/extension/images/template.png and b/lib/plugins/extension/images/template.png differ
diff --git a/lib/plugins/extension/images/up.png b/lib/plugins/extension/images/up.png
index ec9337715cdcd9f4faf722214df78e71e5f021df..531b2dd7bc710855ce1e5e47be1333fcf6927c45 100644
Binary files a/lib/plugins/extension/images/up.png and b/lib/plugins/extension/images/up.png differ
diff --git a/lib/plugins/extension/images/warning.png b/lib/plugins/extension/images/warning.png
index c5e482f84b3a140a062da69cd86d0a98019a8fcb..c1af79f0ffa5b8ebe561b8983fb0e843d8157e4d 100644
Binary files a/lib/plugins/extension/images/warning.png and b/lib/plugins/extension/images/warning.png differ
diff --git a/lib/plugins/extension/lang/bg/intro_install.txt b/lib/plugins/extension/lang/bg/intro_install.txt
new file mode 100644
index 0000000000000000000000000000000000000000..34b92484caa8aa5ce76b46c1254963a159cadb7c
--- /dev/null
+++ b/lib/plugins/extension/lang/bg/intro_install.txt
@@ -0,0 +1 @@
+От тук можете да инсталирате ръчно приставки и шаблони като качите архив или посочите URL за сваляне на архива.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/bg/intro_plugins.txt b/lib/plugins/extension/lang/bg/intro_plugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..927f617dbed895537dc05272eaa99fd8aa2530e9
--- /dev/null
+++ b/lib/plugins/extension/lang/bg/intro_plugins.txt
@@ -0,0 +1 @@
+Това са инсталираните приставки. От тук можете да ги включвате и изключвате както и да ги деинсталирате. Тук ще виждате и наличните актуализации, като преди всяка такава прочетете документацията на съответната приставка.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/bg/intro_search.txt b/lib/plugins/extension/lang/bg/intro_search.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cec4cd243414363b42fab90926a32108c5e6343d
--- /dev/null
+++ b/lib/plugins/extension/lang/bg/intro_search.txt
@@ -0,0 +1 @@
+От тук имате достъп до всички налични приставки и шаблони за DokuWiki, които са дело на трети лица. Имайте предвид, че кодът им е потенциален **риск за сигурността на сървъра**! Повече по  темата можете да прочетете в [[doku>security#plugin_security|plugin security]] first.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/bg/intro_templates.txt b/lib/plugins/extension/lang/bg/intro_templates.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8824b4d8eabc84bb9baa2a1ba37254aec69db3f7
--- /dev/null
+++ b/lib/plugins/extension/lang/bg/intro_templates.txt
@@ -0,0 +1 @@
+Това са инсталираните шаблони. Можете да определите кой шаблон да се ползва от [[?do=admin&page=config|Настройки]].
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/bg/lang.php b/lib/plugins/extension/lang/bg/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..dda69a4b9ded484d56812c046215e9c05560b712
--- /dev/null
+++ b/lib/plugins/extension/lang/bg/lang.php
@@ -0,0 +1,84 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Kiril <neohidra@gmail.com>
+ */
+$lang['menu']                  = 'Диспечер на приставки';
+$lang['tab_plugins']           = 'Инсталирани приставки';
+$lang['tab_templates']         = 'Инсталирани шаблони';
+$lang['tab_search']            = 'Търсене и инсталиране';
+$lang['tab_install']           = 'Ръчно инсталиране';
+$lang['notimplemented']        = 'Функционалността все още не реализирана';
+$lang['notinstalled']          = 'Приставката не е инсталирана';
+$lang['alreadyenabled']        = 'Приставката е включена';
+$lang['alreadydisabled']       = 'Приставката е изключена';
+$lang['pluginlistsaveerror']   = 'Възникна грешка при записването на списъка с приставки';
+$lang['unknownauthor']         = 'Неизвестен автор';
+$lang['unknownversion']        = 'Неизвестна версия';
+$lang['btn_info']              = 'Повече информация';
+$lang['btn_update']            = 'Актуализиране';
+$lang['btn_uninstall']         = 'Деинсталиране';
+$lang['btn_enable']            = 'Включване';
+$lang['btn_disable']           = 'Изключване';
+$lang['btn_install']           = 'Инсталиране';
+$lang['btn_reinstall']         = 'Преинсталиране';
+$lang['js']['reallydel']       = 'Наистина ли желаете приставката да бъде деинсталирана?';
+$lang['js']['display_viewoptions'] = 'Филтриране:';
+$lang['js']['display_enabled'] = 'включени';
+$lang['js']['display_disabled'] = 'изключени';
+$lang['js']['display_updatable'] = 'с налични актуализации';
+$lang['search_for']            = 'Търсене за приставки:';
+$lang['search']                = 'Търсене';
+$lang['extensionby']           = '<strong>%s</strong> от %s';
+$lang['popularity']            = 'Популярност: %s%%';
+$lang['homepage_link']         = 'Документи';
+$lang['tags']                  = 'Етикети:';
+$lang['author_hint']           = 'Търсене за други приставки от този автор';
+$lang['installed']             = 'Инсталирано:';
+$lang['downloadurl']           = 'Сваляне от URL:';
+$lang['repository']            = 'Хранилище:';
+$lang['unknown']               = '<em>неизвестно</em>';
+$lang['installed_version']     = 'Инсталирана версия:';
+$lang['install_date']          = 'Посл. актуализиране:';
+$lang['available_version']     = 'Налична версия:';
+$lang['compatible']            = 'Съвместимост с:';
+$lang['depends']               = 'Изисква:';
+$lang['similar']               = 'Наподобява:';
+$lang['conflicts']             = 'В кофликт с:';
+$lang['donate']                = 'Харесва ли ви?';
+$lang['donate_action']         = 'Купете на автора кафе!';
+$lang['repo_retry']            = 'Повторен опит';
+$lang['provides']              = 'Осигурява:';
+$lang['status']                = 'Състояние:';
+$lang['status_installed']      = 'инсталирана';
+$lang['status_not_installed']  = 'неинсталирана';
+$lang['status_protected']      = 'защитена';
+$lang['status_enabled']        = 'включена';
+$lang['status_disabled']       = 'изключена';
+$lang['status_plugin']         = 'приставка';
+$lang['status_template']       = 'шаблон';
+$lang['msg_enabled']           = 'Приставката "%s" е включена';
+$lang['msg_disabled']          = 'Приставката "%s" е изключена';
+$lang['msg_delete_success']    = 'Приставката "%s" е деинсталирана';
+$lang['msg_delete_failed']     = 'Деинсталирането на приставката "%s" се провали ';
+$lang['msg_template_install_success'] = 'Шаблонът "%s" е инсталиран успешно';
+$lang['msg_template_update_success'] = 'Шаблонът "%s" е актуализиран успешно';
+$lang['msg_plugin_install_success'] = 'Приставката "%s" е инсталирана успешно';
+$lang['msg_plugin_update_success'] = 'Приставката "%s" е актуализирана успешно';
+$lang['msg_upload_failed']     = 'Качването на файлът се провали';
+$lang['missing_dependency']    = '<strong>Изискван компонент липсва или е изключен:</strong> %s';
+$lang['security_issue']        = '<strong>Проблем със сигурността:</strong> %s';
+$lang['security_warning']      = '<strong>Предупреждние за сигурността:</strong> %s';
+$lang['update_available']      = '<strong>Актуализация:</strong> Налична е нова версия - %s';
+$lang['wrong_folder']          = '<strong>Некоректно инсталирана приставка:</strong> Преименувайте директорията "%s" на "%s".';
+$lang['error_badurl']          = 'URL адресите трябва да започват с http или https';
+$lang['error_dircreate']       = 'Създаването на временна поапка за получаване на файла не е възможно';
+$lang['error_download']        = 'Невъзможност за сваляне на файл: %s';
+$lang['noperms']               = 'Директория на разширението не е достъпна за писане';
+$lang['notplperms']            = 'Директория на шаблона не е достъпна за писане';
+$lang['nopluginperms']         = 'Директория на приставката не е достъпна за писане';
+$lang['install_url']           = 'Инсталиране от URL:';
+$lang['install_upload']        = 'Качване:';
+$lang['repo_error']            = 'Няма връзка с хранилището на добавката. Проверете възможна ли е комуникацията www.dokuwiki.org и прокси настройките.';
diff --git a/lib/plugins/extension/lang/cs/lang.php b/lib/plugins/extension/lang/cs/lang.php
index dc38afd52ad018e11729ac67e78d9f76e3156e1f..1fef75a457359b1963108e0cdac6ccaaeb130c54 100644
--- a/lib/plugins/extension/lang/cs/lang.php
+++ b/lib/plugins/extension/lang/cs/lang.php
@@ -5,8 +5,9 @@
  * 
  * @author Viktor Zavadil <vzavadil@newps.cz>
  * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ * @author Turkislav <turkislav@blabla.com>
  */
-$lang['menu']                  = 'Manager rozšíření';
+$lang['menu']                  = 'Správce rozšíření';
 $lang['tab_plugins']           = 'Instalované moduly';
 $lang['tab_templates']         = 'Instalované šablony';
 $lang['tab_search']            = 'Vyhledej a instaluj';
@@ -26,6 +27,10 @@ $lang['btn_disable']           = 'Zakázat';
 $lang['btn_install']           = 'Instalovat';
 $lang['btn_reinstall']         = 'Přeinstalovat';
 $lang['js']['reallydel']       = 'Opravdu odinstalovat toto rozšíření?';
+$lang['js']['display_viewoptions'] = 'Zobrazit možnosti:';
+$lang['js']['display_enabled'] = 'povolit';
+$lang['js']['display_disabled'] = 'zakázat';
+$lang['js']['display_updatable'] = 'aktualizovatelné';
 $lang['search_for']            = 'Hledat rozšíření:';
 $lang['search']                = 'Hledat';
 $lang['extensionby']           = '<strong>%s</strong> od %s';
@@ -62,7 +67,7 @@ $lang['status_template']       = 'Å¡ablona';
 $lang['status_bundled']        = 'svázaný';
 $lang['msg_enabled']           = 'Zásuvný modul %s povolen';
 $lang['msg_disabled']          = 'Zásuvný modul %s zakázán';
-$lang['msg_delete_success']    = 'Rozšíření odinstalováno';
+$lang['msg_delete_success']    = 'Rozšíření %s odinstalováno';
 $lang['msg_delete_failed']     = 'Odinstalování rozšíření %s selhalo';
 $lang['msg_template_install_success'] = 'Šablona %s úspěšně nainstalována';
 $lang['msg_template_update_success'] = 'Šablona %s úspěšně aktualizována';
diff --git a/lib/plugins/extension/lang/cy/intro_install.txt b/lib/plugins/extension/lang/cy/intro_install.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2bc933ec7c8dbb71d58b1b962de4de465a5ec0c4
--- /dev/null
+++ b/lib/plugins/extension/lang/cy/intro_install.txt
@@ -0,0 +1 @@
+Gallwch chi arsefydlu ategion a thempledau gan law yma, naill ai gan eu lanlwytho neu gan gyflwyno URL lawrlwytho uniongyrchol.
diff --git a/lib/plugins/extension/lang/cy/intro_plugins.txt b/lib/plugins/extension/lang/cy/intro_plugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dd49a7a6b6c65d37bbc47debb37ddd81d98bc019
--- /dev/null
+++ b/lib/plugins/extension/lang/cy/intro_plugins.txt
@@ -0,0 +1 @@
+Dyma'r ategion sydd wedi\'u harsefydlu yn eich DokuWiki yn bresennol. Gallwch chi eu galluogi neu eu hanalluogi nhw neu hyd yn oed eu dad-arsefydlu yn llwyr yma. Caiff diweddariadau'r ategion eu dangos yma hefyd, sicrhewch eich bod chi'n darllen dogfennaeth yr ategyn cyn diweddaru.
diff --git a/lib/plugins/extension/lang/cy/intro_search.txt b/lib/plugins/extension/lang/cy/intro_search.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8aef9603948fa60637b4f8b2d4621f7fa099d4c0
--- /dev/null
+++ b/lib/plugins/extension/lang/cy/intro_search.txt
@@ -0,0 +1 @@
+Mae'r tab hwn yn rhoi mynediad i bob ategyn a thempled 3ydd parti ar gael ar gyfer DokuWiki. Sylwch fod arsefydlu cod 3ydd parti yn achosi **risg diogelwch**. Efallai hoffech chi ddarllen mwy ar [[doku>security#plugin_security|ddiogelwch ategion]] yn gyntaf.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/cy/intro_templates.txt b/lib/plugins/extension/lang/cy/intro_templates.txt
new file mode 100644
index 0000000000000000000000000000000000000000..49471451fa0f988b3d0657ac325254571d7badb5
--- /dev/null
+++ b/lib/plugins/extension/lang/cy/intro_templates.txt
@@ -0,0 +1 @@
+Dyma'r templedau sydd wedi'u harsefydlu yn eich DokuWiki yn bresennol. Gallwch chi ddewis y templed i'w ddefnyddio yn y [[?do=admin&page=config|Rheolwr Ffurfwedd]].
diff --git a/lib/plugins/extension/lang/cy/lang.php b/lib/plugins/extension/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..2a2a8c8fac6d1e430d6904f6fcbbcecc4bbffcba
--- /dev/null
+++ b/lib/plugins/extension/lang/cy/lang.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Welsh language file for extension plugin
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Alan Davies <ben.brynsadler@gmail.com>
+ */
+
+$lang['menu']                         = 'Rheolwr Estyniadau';
+
+$lang['tab_plugins']                  = 'Ategion a Arsefydlwyd';
+$lang['tab_templates']                = 'Templedau a Arsefydlwyd';
+$lang['tab_search']                   = 'Chwilio ac Arsefydlu';
+$lang['tab_install']                  = 'Arsefydlu gan Law';
+
+$lang['notimplemented']               = '\'Dyw\'r nodwedd hon heb ei rhoi ar waith eto';
+$lang['notinstalled']                 = '\'Dyw\'r estyniad hwn heb ei arsefydlu';
+$lang['alreadyenabled']               = 'Cafodd yr estyniad hwn ei alluogi';
+$lang['alreadydisabled']              = 'Cafodd yr estyniad hwn ei analluogi';
+$lang['pluginlistsaveerror']          = 'Roedd gwall wrth gadw\'r rhestr ategion';
+$lang['unknownauthor']                = 'Awdur anhysbys';
+$lang['unknownversion']               = 'Fersiwn anhysbys';
+
+$lang['btn_info']                     = 'Dangos wybodaeth bellach';
+$lang['btn_update']                   = 'Diweddaru';
+$lang['btn_uninstall']                = 'Dad-arsefydlu';
+$lang['btn_enable']                   = 'Galluogi';
+$lang['btn_disable']                  = 'Analluogi';
+$lang['btn_install']                  = 'Arsyfydlu';
+$lang['btn_reinstall']                = 'Ail-arsefydlu';
+
+$lang['js']['reallydel']              = 'Ydych chi wir am ddad-arsefydlu\'r estyniad hwn?';
+
+$lang['search_for']                   = 'Chwilio Estyniadau:';
+$lang['search']                       = 'Chwilio';
+
+$lang['extensionby']                  = '<strong>%s</strong> gan %s';
+$lang['screenshot']                   = 'Sgrinlun %s';
+$lang['popularity']                   = 'Poblogrwydd: %s%%';
+$lang['homepage_link']                = 'Dogfennau';
+$lang['bugs_features']                = 'Bygiau';
+$lang['tags']                         = 'Tagiau:';
+$lang['author_hint']                  = 'Chwilio estyniadau gan awdur';
+$lang['installed']                    = 'Arsefydlwyd:';
+$lang['downloadurl']                  = 'URL Lawlwytho:';
+$lang['repository']                   = 'Ystorfa:';
+$lang['unknown']                      = '<em>anhysbys</em>';
+$lang['installed_version']            = 'Fersiwn a arsefydlwyd:';
+$lang['install_date']                 = 'Eich diweddariad diwethaf:';
+$lang['available_version']            = 'Fersiwn ar gael:';
+$lang['compatible']                   = 'Yn gydnaws â:';
+$lang['depends']                      = 'Yn dibynnu ar:';
+$lang['similar']                      = 'Yn debyg i:';
+$lang['conflicts']                    = 'Y gwrthdaro â:';
+$lang['donate']                       = 'Fel hwn?';
+$lang['donate_action']                = 'Prynwch goffi i\'r awdur!';
+$lang['repo_retry']                   = 'Ailgeisio';
+$lang['provides']                     = 'Darparu:';
+$lang['status']                       = 'Statws:';
+$lang['status_installed']             = 'arsefydlwyd';
+$lang['status_not_installed']         = 'heb ei arsefydlu';
+$lang['status_protected']             = 'amddiffynwyd';
+$lang['status_enabled']               = 'galluogwyd';
+$lang['status_disabled']              = 'analluogwyd';
+$lang['status_unmodifiable']          = 'methu addasu';
+$lang['status_plugin']                = 'ategyn';
+$lang['status_template']              = 'templed';
+$lang['status_bundled']               = 'bwndlwyd';
+
+$lang['msg_enabled']                  = 'Galluogwyd ategyn %s';
+$lang['msg_disabled']                 = 'Analluogwyd ategyn %s';
+$lang['msg_delete_success']           = 'Dad-arsefydlwyd estyniad %s';
+$lang['msg_delete_failed']            = 'Methodd dad-arsefydlu estyniad %s';
+$lang['msg_template_install_success'] = 'Arsefydlwyd templed %s yn llwyddiannus';
+$lang['msg_template_update_success']  = 'Diweddarwyd templed %s yn llwyddiannus';
+$lang['msg_plugin_install_success']   = 'Arsefydlwyd ategyn %s yn llwyddiannus';
+$lang['msg_plugin_update_success']    = 'Diweddarwyd ategyn %s yn llwyddiannus';
+$lang['msg_upload_failed']            = 'Methodd lanlwytho\'r ffeil';
+
+$lang['missing_dependency']           = '<strong>Missing or disabled dependency:</strong> %s';
+$lang['security_issue']               = '<strong>Mater Diogelwch:</strong> %s';
+$lang['security_warning']             = '<strong>Rhybudd Diogelwch:</strong> %s';
+$lang['update_available']             = '<strong>Diweddariad:</strong> Mae fersiwn newydd %s ar gael.';
+$lang['wrong_folder']                 = '<strong>Ategyn wedi\'i arsefydlu\'n anghywir:</strong> Ailenwch ffolder yr ategyn o "%s" i "%s".';
+$lang['url_change']                   = '<strong>Newid i\'r URL:</strong> Newidiodd yr URL lawlwytho ers y diweddariad diwethaf. Gwiriwch i weld os yw\'r URL newydd yn ddilys cyn diweddaru\'r estyniad.<br />Newydd: %s<br />Hen: %s';
+
+$lang['error_badurl']                 = 'Dylai URL ddechrau gyda http neu https';
+$lang['error_dircreate']              = 'Methu â chreu ffolder dros dro er mwyn derbyn y lawrlwythiad';
+$lang['error_download']               = 'Methu lawrlwytho\'r ffeil: %s';
+$lang['error_decompress']             = 'Methu datgywasgu\'r ffeil a lawrlwythwyd. Gall hwn fod o ganlyniad i lawrlwythiad gwael, felly ceisiwch eto; neu gall fod fformat y cywasgiad fod yn anhysbys, felly bydd yn rhaid i chi lawlwytho ac arsefydlu gan law.';
+$lang['error_findfolder']             = 'Methu ag adnabod ffolder yr estyniad, bydd angen lawrlwytho ac arsefydlu gan law';
+$lang['error_copy']                   = 'Roedd gwall copïo ffeil wrth geisio arsefydlu ffeiliau i\'r ffolder <em>%s</em>: gall fod y ddisgen yn llawn neu gall hawliau mynediad i ffeiliau fod yn anghywir. Gall hwn fod wedi achosi ategyn sydd wedi arsefydlu\'n rhannol ac sydd wedi ansefydlogi\'ch arsefydliad wici';
+
+$lang['noperms']                      = '\'Sdim modd ysgrifennu i\'r ffolder estyniadau';
+$lang['notplperms']                   = '\'Sdim modd ysgrifennu i\'r ffolder templedau';
+
+$lang['nopluginperms']                = '\'Sdim modd ysgrifennu i\'r ffolder ategion';
+$lang['git']                          = 'Cafodd yr estyniad hwn ei arsefydlu gan git, mae\'n bosib na fyddwch chi am ei ddiweddaru yma.';
+$lang['auth']                         = '\'Dyw\'r ategyn dilysu hwn heb ei alluogi yn y ffurfwedd, ystyriwch ei analluogi.';
+
+$lang['install_url']                  = 'Arsefydlu o URL:';
+$lang['install_upload']               = 'Lanlwytho Estyniad:';
+
+$lang['repo_error']                   = 'Doedd dim modd cysylltu â\'r ystorfa ategion. Sicrhewch fod hawl gan eich gweinydd i gysylltu â www.dokuwiki.org a gwiriwch eich gosodiadau procsi.';
+$lang['nossl']                        = 'Mae\'n debyg \'dyw eich PHP ddim yn cynnal SSL. Na fydd lawrlwytho yn gweithio ar gyfer nifer o estyniadau DokuWiki.';
+
+$lang['js']['display_viewoptions']    = 'Opsiynau Golwg:';
+$lang['js']['display_enabled']        = 'galluogwyd';
+$lang['js']['display_disabled']       = 'analluogwyd';
+$lang['js']['display_updatable']      = 'gallu diweddaru';
diff --git a/lib/plugins/extension/lang/da/intro_install.txt b/lib/plugins/extension/lang/da/intro_install.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e5657f21847fb3054d10c72c89c3e31b27b5ac58
--- /dev/null
+++ b/lib/plugins/extension/lang/da/intro_install.txt
@@ -0,0 +1 @@
+Her kan du installerer plugins eller templates manuelt, ved enten at uploade dem eller angive en direkte URL til download.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/da/intro_plugins.txt b/lib/plugins/extension/lang/da/intro_plugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5d9deaf1ea3f4b06fff861b3d525f9cb1ad0edc8
--- /dev/null
+++ b/lib/plugins/extension/lang/da/intro_plugins.txt
@@ -0,0 +1 @@
+Dette er de plugins du aktuelt har installeret i din DokuWiki. Du kan aktivere, deaktiver eller fjerne plugins fra denne side. Opdateringer til plugins vises også her - husk at læse dokumentationen til et plugin inden du opdaterer det.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/da/intro_templates.txt b/lib/plugins/extension/lang/da/intro_templates.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1914500b154e03862dc67b04b5d981ee462004e6
--- /dev/null
+++ b/lib/plugins/extension/lang/da/intro_templates.txt
@@ -0,0 +1 @@
+Dette er de templates du aktuelt har installeret i din DokuWiki. Du kan vælge det template du vil benytte under [[?do=admin&page=config|Opsætningsstyring]].
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/da/lang.php b/lib/plugins/extension/lang/da/lang.php
index c341bc5f91ebb75c25e2a497ce929566f4d222df..17cb3b57cd6afef90479acbce92708d771a7da2a 100644
--- a/lib/plugins/extension/lang/da/lang.php
+++ b/lib/plugins/extension/lang/da/lang.php
@@ -4,7 +4,62 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Søren Birk <soer9648@eucl.dk>
+ * @author Jacob Palm <mail@jacobpalm.dk>
  */
+$lang['tab_plugins']           = 'Installerede plugins';
+$lang['tab_templates']         = 'Installerede templates';
+$lang['tab_search']            = 'Søg og installer';
+$lang['tab_install']           = 'Manuel installation';
+$lang['notimplemented']        = 'Denne funktion er ikke implementeret endnu';
+$lang['unknownauthor']         = 'Ukendt udgiver';
+$lang['unknownversion']        = 'Ukendt version';
+$lang['btn_info']              = 'Vis mere information';
+$lang['btn_update']            = 'Opdater';
+$lang['btn_uninstall']         = 'Afinstaller';
+$lang['btn_enable']            = 'Aktiver';
+$lang['btn_disable']           = 'Deaktiver';
+$lang['btn_install']           = 'Installer';
+$lang['btn_reinstall']         = 'Geninstaller';
+$lang['js']['reallydel']       = 'Er du sikker på at du vil afinstallere denne udvidelse?';
+$lang['search_for']            = 'Søg efter udvidelse:';
+$lang['search']                = 'Søg';
+$lang['extensionby']           = '<strong>%s</strong> af %s';
+$lang['screenshot']            = 'Skærmbillede af %s';
+$lang['popularity']            = 'Popularitet: %s%%';
+$lang['homepage_link']         = 'Dokumenter';
+$lang['bugs_features']         = 'Fejl';
+$lang['tags']                  = 'Tags:';
+$lang['author_hint']           = 'Søg efter udvidelse af denne udgiver';
+$lang['installed']             = 'Installeret:';
+$lang['downloadurl']           = 'Download URL:';
+$lang['unknown']               = '<em>ukendt</em>';
+$lang['installed_version']     = 'Installeret version:';
+$lang['install_date']          = 'Din sidste opdatering:';
+$lang['available_version']     = 'Tilgængelig version:';
+$lang['compatible']            = 'Kompatibel med:';
+$lang['depends']               = 'Afhængig af:';
+$lang['similar']               = 'Ligner:';
+$lang['donate']                = 'Synes du om denne?';
+$lang['donate_action']         = 'Køb en kop kaffe til udvikleren!';
+$lang['repo_retry']            = 'Førsøg igen';
+$lang['status']                = 'Status:';
+$lang['status_installed']      = 'installeret';
+$lang['status_not_installed']  = 'ikke installeret';
+$lang['status_protected']      = 'beskyttet';
+$lang['status_enabled']        = 'aktiveret';
+$lang['status_disabled']       = 'deaktiveret';
+$lang['status_unmodifiable']   = 'låst for ændringer';
+$lang['status_plugin']         = 'plugin';
+$lang['status_template']       = 'template';
+$lang['msg_enabled']           = 'Plugin %s aktiveret';
+$lang['msg_disabled']          = 'Plugin %s deaktiveret';
+$lang['msg_delete_success']    = 'Udvidelse %s afinstalleret';
+$lang['msg_delete_failed']     = 'Kunne ikke afinstallere udvidelsen %s';
+$lang['msg_template_install_success'] = 'Template %s blev installeret';
+$lang['msg_template_update_success'] = 'Template %s blev opdateret';
+$lang['msg_plugin_install_success'] = 'Plugin %s blev installeret';
+$lang['msg_plugin_update_success'] = 'Plugin %s blev opdateret';
+$lang['msg_upload_failed']     = 'Kunne ikke uploade filen';
 $lang['update_available']      = '<strong>Opdatering:</strong> Ny version %s er tilgængelig.';
 $lang['wrong_folder']          = '<strong>Plugin ikke installeret korrekt:</strong> Omdøb plugin-mappe "%s" til "%s".';
 $lang['url_change']            = '<strong>URL ændret:</strong> Download-URL er blevet ændret siden sidste download. Kontrollér om den nye URL er valid, inden udvidelsen opdateres.<br />Ny: %s<br />Gammel: %s';
@@ -22,3 +77,4 @@ $lang['auth']                  = 'Auth-plugin er ikke aktiveret i konfiguratione
 $lang['install_url']           = 'Installér fra URL:';
 $lang['install_upload']        = 'Upload Udvidelse:';
 $lang['repo_error']            = 'Plugin-arkivet kunne ikke kontaktes. Kontrollér at din server kan kontakte www.dokuwiki.org kontrollér dine proxy-indstillinger.';
+$lang['nossl']                 = 'Din PHP lader til at mangle understøttelse for SSL. Mange DokuWiki udvidelser vil ikke kunne downloades.';
diff --git a/lib/plugins/extension/lang/de/lang.php b/lib/plugins/extension/lang/de/lang.php
index ce5495e243efb2efbb84bd4517497026225aaf44..a47c9360f65d1e02d7b238d403048cb3c0b0bcfe 100644
--- a/lib/plugins/extension/lang/de/lang.php
+++ b/lib/plugins/extension/lang/de/lang.php
@@ -8,6 +8,8 @@
  * @author Simon <st103267@stud.uni-stuttgart.de>
  * @author Hoisl <hoisl@gmx.at>
  * @author Dominik Mahr <drache.mahr@gmx.de>
+ * @author Noel Tilliot <noeltilliot@byom.de>
+ * @author Philip Knack <p.knack@stollfuss.de>
  */
 $lang['menu']                  = 'Erweiterungen verwalten';
 $lang['tab_plugins']           = 'Installierte Plugins';
@@ -29,6 +31,10 @@ $lang['btn_disable']           = 'Deaktivieren';
 $lang['btn_install']           = 'Installieren';
 $lang['btn_reinstall']         = 'Neu installieren';
 $lang['js']['reallydel']       = 'Wollen Sie diese Erweiterung wirklich löschen?';
+$lang['js']['display_viewoptions'] = 'Optionen anzeigen';
+$lang['js']['display_enabled'] = 'aktiviert';
+$lang['js']['display_disabled'] = 'deaktiviert';
+$lang['js']['display_updatable'] = 'aktualisierbar';
 $lang['search_for']            = 'Erweiterung suchen:';
 $lang['search']                = 'Suchen';
 $lang['extensionby']           = '<strong>%s</strong> von %s';
@@ -65,7 +71,8 @@ $lang['status_template']       = 'Template';
 $lang['status_bundled']        = 'gebündelt';
 $lang['msg_enabled']           = 'Plugin %s ist aktiviert';
 $lang['msg_disabled']          = 'Erweiterung %s ist deaktiviert';
-$lang['msg_delete_success']    = 'Erweiterung wurde entfernt';
+$lang['msg_delete_success']    = 'Erweiterung %s wurde entfernt';
+$lang['msg_delete_failed']     = 'Deinstallation der Erweiterung %s fehlgeschlagen';
 $lang['msg_template_install_success'] = 'Das Template %s wurde erfolgreich installiert';
 $lang['msg_template_update_success'] = 'Das Update des Templates %s war erfolgreich ';
 $lang['msg_plugin_install_success'] = 'Das Plugin %s wurde erfolgreich installiert';
@@ -87,6 +94,8 @@ $lang['noperms']               = 'Das Erweiterungs-Verzeichnis ist schreibgesch
 $lang['notplperms']            = 'Das Template-Verzeichnis ist schreibgeschützt';
 $lang['nopluginperms']         = 'Das Plugin-Verzeichnis ist schreibgeschützt';
 $lang['git']                   = 'Diese Erweiterung wurde über git installiert und sollte daher nicht hier aktualisiert werden.';
+$lang['auth']                  = 'Dieses Auth Plugin ist in der Konfiguration nicht aktiviert, Sie sollten es deaktivieren.';
 $lang['install_url']           = 'Von Webadresse (URL) installieren';
 $lang['install_upload']        = 'Erweiterung hochladen:';
 $lang['repo_error']            = 'Es konnte keine Verbindung zum Plugin-Verzeichnis hergestellt werden. Stellen sie sicher das der Server Verbindung mit www.dokuwiki.org aufnehmen darf und überprüfen sie ihre Proxy Einstellungen.';
+$lang['nossl']                 = 'Ihr PHP scheint SSL nicht zu unterstützen. Das Herunterladen vieler DokuWiki Erweiterungen wird scheitern.';
diff --git a/lib/plugins/extension/lang/en/lang.php b/lib/plugins/extension/lang/en/lang.php
index f545b6da345c0ac83b32de59c11ad0cddceb35ca..79f64362938b31c1b379496626822923022f5fe6 100644
--- a/lib/plugins/extension/lang/en/lang.php
+++ b/lib/plugins/extension/lang/en/lang.php
@@ -101,4 +101,9 @@ $lang['install_url']                  = 'Install from URL:';
 $lang['install_upload']               = 'Upload Extension:';
 
 $lang['repo_error']                   = 'The plugin repository could not be contacted. Make sure your server is allowed to contact www.dokuwiki.org and check your proxy settings.';
-$lang['nossl']                        = 'Your PHP seems to miss SSL support. Downloading will not work for many DokuWiki extensions.';
\ No newline at end of file
+$lang['nossl']                        = 'Your PHP seems to miss SSL support. Downloading will not work for many DokuWiki extensions.';
+
+$lang['js']['display_viewoptions']    = 'View Options:';
+$lang['js']['display_enabled']        = 'enabled';
+$lang['js']['display_disabled']       = 'disabled';
+$lang['js']['display_updatable']      = 'updatable';
diff --git a/lib/plugins/extension/lang/eo/lang.php b/lib/plugins/extension/lang/eo/lang.php
index 6ce840be8bdce2b9f748b84b3ebc916b1f899772..e0488cb46446ea43d4c9a8e8f8cdcac6ff036d3b 100644
--- a/lib/plugins/extension/lang/eo/lang.php
+++ b/lib/plugins/extension/lang/eo/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Robert Bogenschneider <bogi@uea.org>
  */
 $lang['menu']                  = 'Aldonaĵa administrado';
@@ -61,7 +61,7 @@ $lang['status_template']       = 'ŝablono';
 $lang['status_bundled']        = 'kunliverita';
 $lang['msg_enabled']           = 'Kromaĵo %s ebligita';
 $lang['msg_disabled']          = 'Kromaĵo %s malebligita';
-$lang['msg_delete_success']    = 'Aldonaĵo malinstaliĝis';
+$lang['msg_delete_success']    = 'Aldonaĵo %s malinstaliĝis';
 $lang['msg_template_install_success'] = 'Ŝablono %s sukcese instaliĝis';
 $lang['msg_template_update_success'] = 'Ŝablono %s sukcese aktualiĝis';
 $lang['msg_plugin_install_success'] = 'Kromaĵo %s sukcese instaliĝis';
diff --git a/lib/plugins/extension/lang/es/intro_plugins.txt b/lib/plugins/extension/lang/es/intro_plugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4805021f9833fc6dba3e2d1a2b9ec7464ab7f729
--- /dev/null
+++ b/lib/plugins/extension/lang/es/intro_plugins.txt
@@ -0,0 +1 @@
+Estos son los plugins actualmente instalados en su DokuWiki. Puede activar, desactivar o incluso desinstalar completamente desde aquí. Actualizaciones de los Plugin se muestran también aquí, asegúrese de leer la documentación del plugin antes de actualizar.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/es/intro_search.txt b/lib/plugins/extension/lang/es/intro_search.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f59bb33df7ef0d3d87ac0301d85aac23bbbdb38e
--- /dev/null
+++ b/lib/plugins/extension/lang/es/intro_search.txt
@@ -0,0 +1 @@
+Esta pestaña te da acceso a todos los plugins de 3as partes disponibles y plantillas para DokuWiki. Tenga en cuenta que la instalación de código de terceras partes puede plantear un **riesgo de seguridad**, es posible que desee leer primero sobre [[doku>security#plugin_security|plugin security]].
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/es/lang.php b/lib/plugins/extension/lang/es/lang.php
index 63742c3b39ccf31ee39dab356bcf384534e7ba65..28cdf86ca9ca0be426a2a93aedb7649b89e6f0ef 100644
--- a/lib/plugins/extension/lang/es/lang.php
+++ b/lib/plugins/extension/lang/es/lang.php
@@ -6,6 +6,9 @@
  * @author Antonio Bueno <atnbueno@gmail.com>
  * @author Antonio Castilla <antoniocastilla@trazoide.com>
  * @author Jonathan Hernández <me@jhalicea.com>
+ * @author Álvaro Iradier <airadier@gmail.com>
+ * @author Mauricio Segura <maose38@yahoo.es>
+ * @author Domingo Redal <docxml@gmail.com>
  */
 $lang['menu']                  = 'Administrador de Extensiones ';
 $lang['tab_plugins']           = 'Plugins instalados';
@@ -27,6 +30,10 @@ $lang['btn_disable']           = 'Desactivar';
 $lang['btn_install']           = 'Instalar';
 $lang['btn_reinstall']         = 'Reinstalar';
 $lang['js']['reallydel']       = '¿Realmente quiere desinstalar esta extensión?';
+$lang['js']['display_viewoptions'] = 'Ver opciones:';
+$lang['js']['display_enabled'] = 'habilitado';
+$lang['js']['display_disabled'] = 'deshabilitado';
+$lang['js']['display_updatable'] = 'actualizable';
 $lang['search_for']            = 'Extensión de búsqueda :';
 $lang['search']                = 'Buscar';
 $lang['extensionby']           = '<strong>%s</strong> por %s';
@@ -63,7 +70,8 @@ $lang['status_template']       = 'plantilla';
 $lang['status_bundled']        = 'agrupado';
 $lang['msg_enabled']           = 'Plugin %s activado';
 $lang['msg_disabled']          = 'Plugin %s desactivado';
-$lang['msg_delete_success']    = 'Extensión desinstalada';
+$lang['msg_delete_success']    = 'Extensión %s desinstalada';
+$lang['msg_delete_failed']     = 'La desinstalación de la extensión %s ha fallado';
 $lang['msg_template_install_success'] = 'Plantilla %s instalada con éxito';
 $lang['msg_template_update_success'] = 'Plantilla %s actualizada con éxito';
 $lang['msg_plugin_install_success'] = 'Plugin %s instalado con éxito';
@@ -78,7 +86,15 @@ $lang['url_change']            = '<strong>URL actualizada:</strong> El Download
 $lang['error_badurl']          = 'URLs deberían empezar con http o https';
 $lang['error_dircreate']       = 'No es posible de crear un directorio temporero para poder recibir el download';
 $lang['error_download']        = 'No es posible descargar el documento: %s';
+$lang['error_decompress']      = 'No se pudo descomprimir el fichero descargado. Puede ser a causa de una descarga incorrecta, en cuyo caso puedes intentarlo de nuevo; o puede que el formato de compresión sea desconocido, en cuyo caso necesitarás descargar e instalar manualmente.';
+$lang['error_findfolder']      = 'No se ha podido identificar el directorio de la extensión, es necesario descargar e instalar manualmente';
+$lang['error_copy']            = 'Hubo un error durante la copia de archivos al intentar instalar los archivos del directorio <em>%s</em>: el disco puede estar lleno o los permisos de acceso a los archivos pueden ser incorrectos. Esto puede haber dado lugar a un plugin instalado parcialmente y dejar su instalación wiki inestable';
+$lang['noperms']               = 'El directorio de extensiones no tiene permiso de escritura.';
+$lang['notplperms']            = 'El directorio de plantillas no tiene permiso de escritura.';
+$lang['nopluginperms']         = 'No se puede escribir en el directorio de plugins';
 $lang['git']                   = 'Esta extensión fue instalada a través de git, quizás usted no quiera actualizarla aquí mismo.';
+$lang['auth']                  = 'Este plugin de autenticación no está habilitada en la configuración, considere la posibilidad de desactivarlo.';
 $lang['install_url']           = 'Instalar desde URL:';
 $lang['install_upload']        = 'Subir Extensión:';
 $lang['repo_error']            = 'El repositorio de plugins no puede ser contactado. Asegúrese que su servidor pueda contactar www.dokuwiki.org y verificar la configuración de su proxy.';
+$lang['nossl']                 = 'Tu PHP parece no tener soporte SSL. Las descargas no funcionaran para muchas extensiones de DokuWiki.';
diff --git a/lib/plugins/extension/lang/fa/intro_install.txt b/lib/plugins/extension/lang/fa/intro_install.txt
new file mode 100644
index 0000000000000000000000000000000000000000..93c2b9734db7d4615e5940e478e4af98e44e86f7
--- /dev/null
+++ b/lib/plugins/extension/lang/fa/intro_install.txt
@@ -0,0 +1 @@
+در اینجا می‌توانید افزونه‌ها و قالب‌ها را به صورت دستی از طریق آپلودشان یا با ارائهٔ لینک مستقیم دانلود نصب کنید.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/fa/intro_plugins.txt b/lib/plugins/extension/lang/fa/intro_plugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7d7d331b358f3da10080979e96ee8c6f11b52260
--- /dev/null
+++ b/lib/plugins/extension/lang/fa/intro_plugins.txt
@@ -0,0 +1 @@
+این‌ها افزونه‌هایی است که اکنون روی داکو ویکی شما نصب می‌باشند. از اینجا می‌توانید آن‌ها را غیرفعال، فعال یا به طور کامل حذف نمایید. به‌روزرسانی افزونه‌ها نیز در اینجا نمایش داده می‌شود. پیش از به‌روزرسانی مطمئن شوید که مستندات افزونه را مطالعه نموده‌اید.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/fa/intro_search.txt b/lib/plugins/extension/lang/fa/intro_search.txt
new file mode 100644
index 0000000000000000000000000000000000000000..07fde76c1c6a2fa28e1ffe0cc9e50c47df229900
--- /dev/null
+++ b/lib/plugins/extension/lang/fa/intro_search.txt
@@ -0,0 +1 @@
+این شاخه به تمام افزونه‌ها و قالب‌های نسل سوم داکو ویکی دسترسی می‌دهد. لطفا دقت کنید که نصب کد نسل سوم یک **ریسک امنیتی** است برای همین بهتر است که ابتدا [[doku>security#plugin_security|امنیت افزونه]] را مطالعه نمایید.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/fa/intro_templates.txt b/lib/plugins/extension/lang/fa/intro_templates.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1a127c0ce4126b7803bf50c8758df414f3c7e96d
--- /dev/null
+++ b/lib/plugins/extension/lang/fa/intro_templates.txt
@@ -0,0 +1 @@
+این‌ها قالب‌هاییست که اکنون در داکو ویکی شما نصب می‌باشد. شما می‌توانید قالبی که می‌خواهید استفاده شود را در [[?do=admin&page=config|تنظیمات پیکربندی]] انتخاب نمایید.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/fa/lang.php b/lib/plugins/extension/lang/fa/lang.php
index 95c3e9652cf199ca2a5022f1e570dab83e930bbe..aa0613f91df87f0a24f7491f66cba7cd144759bc 100644
--- a/lib/plugins/extension/lang/fa/lang.php
+++ b/lib/plugins/extension/lang/fa/lang.php
@@ -4,37 +4,93 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
  */
 $lang['menu']                  = 'مدیریت افزونه ها';
 $lang['tab_plugins']           = 'پلاگین های نصب شده';
 $lang['tab_templates']         = 'قالب های نصب شده';
 $lang['tab_search']            = 'جستجو و نصب';
 $lang['tab_install']           = 'نصب دستی';
+$lang['notimplemented']        = 'این قابلیت هنوز پیاده‌سازی نشده';
 $lang['notinstalled']          = 'این افزونه نصب نشده است';
 $lang['alreadyenabled']        = 'این افزونه فعال شده است';
 $lang['alreadydisabled']       = 'این افزونه غیرفعال شده است';
+$lang['pluginlistsaveerror']   = 'یک خطا هنگام ذخیره‌سازی این افزونه رخ داده';
+$lang['unknownauthor']         = 'نویسنده نامشخص';
 $lang['unknownversion']        = 'نسخه ناشناخته';
 $lang['btn_info']              = 'نمایش اطلاعات بیشتر';
 $lang['btn_update']            = 'به روز رسانی';
+$lang['btn_uninstall']         = 'حذف';
 $lang['btn_enable']            = 'فعال';
 $lang['btn_disable']           = 'غیرفعال';
 $lang['btn_install']           = 'نصب';
 $lang['btn_reinstall']         = 'نصب مجدد';
+$lang['js']['reallydel']       = 'واقعا می‌خواهید این افزونه را حذف کنید؟';
+$lang['js']['display_viewoptions'] = 'نمایش گزینه‌ها:';
+$lang['js']['display_enabled'] = 'فعال';
+$lang['js']['display_disabled'] = 'غیرفعال';
+$lang['js']['display_updatable'] = 'قابل به‌روزرسانی';
 $lang['search_for']            = 'جستجوی افزونه:';
 $lang['search']                = 'جستجو';
+$lang['extensionby']           = '<strong>%s</strong> به وسیلهٔ %s';
+$lang['screenshot']            = 'اسکرینشات %s';
+$lang['popularity']            = 'محبوبیت: %s%%';
+$lang['homepage_link']         = 'مستندات';
+$lang['bugs_features']         = 'اشکالات';
 $lang['tags']                  = 'برچسب ها:';
+$lang['author_hint']           = 'جستجوی افزونه‌های این نویسنده';
+$lang['installed']             = 'نصب شده:';
+$lang['downloadurl']           = 'لینک دانلود:';
+$lang['repository']            = 'مخزن:';
+$lang['unknown']               = '<em>ناشناخته</em>';
 $lang['installed_version']     = 'نسخه نصب شده:';
+$lang['install_date']          = 'آخرین به‌روزرسانی شما:';
 $lang['available_version']     = 'نسخه در دسترس:';
+$lang['compatible']            = 'سازگار با:';
+$lang['depends']               = 'وابسته به:';
+$lang['similar']               = 'شبیه به:';
+$lang['conflicts']             = 'تداخل دارد با:';
+$lang['donate']                = 'به این علاقه‌مندید؟';
+$lang['donate_action']         = 'برای نویسنده یک فنجان قهوه بخرید!';
 $lang['repo_retry']            = 'دوباره';
+$lang['provides']              = 'شامل می‌شود:';
 $lang['status']                = 'وضعیت';
 $lang['status_installed']      = 'نصب شده';
 $lang['status_not_installed']  = 'نصب نشده';
+$lang['status_protected']      = 'محافظت شده';
 $lang['status_enabled']        = 'فعال';
 $lang['status_disabled']       = 'غیرفعال';
+$lang['status_unmodifiable']   = 'غیرقابل تغییر';
 $lang['status_plugin']         = 'پلاگین';
 $lang['status_template']       = 'قالب';
+$lang['status_bundled']        = 'باندل شده';
+$lang['msg_enabled']           = 'افزونه %s فعال شده';
+$lang['msg_disabled']          = 'افزونه %s غیرفعال شده';
+$lang['msg_delete_success']    = 'افزونه %s حذف شده';
+$lang['msg_delete_failed']     = 'حذف افزونه %s ناموفق بود';
+$lang['msg_template_install_success'] = 'قالب %s با موفقیت نصب شد';
+$lang['msg_template_update_success'] = 'قالب %s با موفقیت به‌روزرسانی شد';
+$lang['msg_plugin_install_success'] = 'افزونهٔ %s با موفقیت نصب شد';
+$lang['msg_plugin_update_success'] = 'افزونهٔ %s با موفقیت نصب شد';
+$lang['msg_upload_failed']     = 'بارگذاری فایل ناموفق بود';
+$lang['missing_dependency']    = '<strong>نیازمندی وجود ندارد یا غیرفعال است:</strong> %s';
+$lang['security_issue']        = '<strong>اشکال امنیتی:</strong> %s';
+$lang['security_warning']      = '<strong>اخطار امنیتی:</strong> %s';
+$lang['update_available']      = '<strong>به‌روزرسانی</strong> نسخهٔ جدید %s موجود است.';
+$lang['wrong_folder']          = '<strong>افزونه اشتباه نصب شده:</strong> نام پوشهٔ افزونه را از "%s" به "%s" تغییر دهید.';
+$lang['url_change']            = '<strong>لینک تغییر کرد:</strong> لینک دانلود از آخرین دانلود تغییر کرد. پیش از به‌روزرسانی افزونه، چک کنید که لینک جدید درست باشد.<br />جدید: %s<br />قدیمی: %s';
+$lang['error_badurl']          = 'لینک‌ها باید با http یا https شروع شوند';
+$lang['error_dircreate']       = 'امکان ایجاد پوشهٔ موقت برای دریافت دانلود وجود ندارد';
+$lang['error_download']        = 'امکان دانلود فایل وجود ندارد: %s';
+$lang['error_decompress']      = 'امکان خارج کردن فایل دانلود شده از حالت فشرده وجود ندارد. این می‌توانید در اثر دانلود ناقص باشد که در اینصورت باید دوباره تلاش کنید؛ یا اینکه فرمت فشرده‌سازی نامعلوم است که در اینصورت باید به صورت دستی دانلود و نصب نمایید.';
+$lang['error_findfolder']      = 'امکان تشخیص پوشهٔ افزونه وجود ندارد. باید به صورت دستی دانلود و نصب کنید.';
+$lang['error_copy']            = 'هنگام تلاش برای نصب فایل‌ها برای پوشهٔ <em>%s</em> خطای کپی فایل وجود دارد: رسانه ذخیره‌سازی می‌تواند پر باشد یا پرمیشن‌های فایل نادرست است. این می‌تواند باعث نصب بخشی از افزونه شده باشد و ویکی را ناپایدار نماید.';
 $lang['noperms']               = 'پوشه افزونه ها قابل نوشتن نیست';
 $lang['notplperms']            = 'پوشه قالب ها قابل نوشتن نیست';
 $lang['nopluginperms']         = 'پوشه پلاگین ها قابل نوشتن نیست';
+$lang['git']                   = 'این افزونه از طریق گیت نصب شده، شما نباید آن را از اینجا به‌روزرسانی کنید.';
+$lang['auth']                  = 'این افزونهٔ auth در بخش تنظیمات فعال نشده، غیرفعالش کنید.';
 $lang['install_url']           = 'نصب از آدرس:';
 $lang['install_upload']        = 'بارگذاری افزونه:';
+$lang['repo_error']            = 'امکان ارتباط با مخزن افزونه‌ها وجود ندارد. مطمئن شوید که سرور شما اجازهٔ ارتباط با www.dokuwiki.org را دارد و تنظیمات پراکسی را چک کنید.';
+$lang['nossl']                 = 'به نظر می‌آید که PHP شما از SSL پشتیبانی نمی‌کند. دانلود کردن برای بسیاری از افزونه‌های داکو ویکی کار نمی‌کند.';
diff --git a/lib/plugins/extension/lang/fr/lang.php b/lib/plugins/extension/lang/fr/lang.php
index 44d4038470c14b453d2c57f26f87b72a23fef487..4cb6f0d25b89c32c5c446dabb88a34f0fc45eaaf 100644
--- a/lib/plugins/extension/lang/fr/lang.php
+++ b/lib/plugins/extension/lang/fr/lang.php
@@ -5,6 +5,8 @@
  * 
  * @author Schplurtz le Déboulonné <schplurtz@laposte.net>
  * @author Yves Grandvalet <Yves.Grandvalet@laposte.net>
+ * @author Carbain Frédéric <fcarbain@yahoo.fr>
+ * @author Nicolas Friedli <nicolas@theologique.ch>
  */
 $lang['menu']                  = 'Gestionnaire d\'extensions';
 $lang['tab_plugins']           = 'Greffons installés';
@@ -26,6 +28,10 @@ $lang['btn_disable']           = 'Désactiver';
 $lang['btn_install']           = 'Installer';
 $lang['btn_reinstall']         = 'Réinstaller';
 $lang['js']['reallydel']       = 'Vraiment désinstaller cette extension';
+$lang['js']['display_viewoptions'] = 'Voir les options:';
+$lang['js']['display_enabled'] = 'activé';
+$lang['js']['display_disabled'] = 'désactivé';
+$lang['js']['display_updatable'] = 'Mise à jour possible';
 $lang['search_for']            = 'Rechercher l\'extension :';
 $lang['search']                = 'Chercher';
 $lang['extensionby']           = '<strong>%s</strong> de %s';
@@ -64,7 +70,7 @@ $lang['msg_enabled']           = 'Greffon %s activé';
 $lang['msg_disabled']          = 'Greffon %s désactivé';
 $lang['msg_delete_success']    = 'Extension %s désinstallée.';
 $lang['msg_delete_failed']     = 'Echec de la désinstallation de l\'extension %s';
-$lang['msg_template_install_success'] = 'Thème %s installée avec succès';
+$lang['msg_template_install_success'] = 'Thème %s installé avec succès';
 $lang['msg_template_update_success'] = 'Thème %s mis à jour avec succès';
 $lang['msg_plugin_install_success'] = 'Greffon %s installé avec succès';
 $lang['msg_plugin_update_success'] = 'Greffon %s mis à jour avec succès';
@@ -79,7 +85,7 @@ $lang['error_badurl']          = 'Les URL doivent commencer par http ou https';
 $lang['error_dircreate']       = 'Impossible de créer le dossier temporaire pour le téléchargement.';
 $lang['error_download']        = 'Impossible de télécharger le fichier : %s';
 $lang['error_decompress']      = 'Impossible de décompresser le fichier téléchargé. C\'est peut être le résultat d\'une erreur de téléchargement, auquel cas vous devriez réessayer. Le format de compression est peut-être inconnu. Dans ce cas il vous faudra procéder à une installation manuelle.';
-$lang['error_findfolder']      = 'Impossible d\'idnetifier le dossier de l\'extension. vous devez procéder à une installation manuelle.';
+$lang['error_findfolder']      = 'Impossible d\'identifier le dossier de l\'extension. vous devez procéder à une installation manuelle.';
 $lang['error_copy']            = 'Une erreur de copie de fichier s\'est produite lors de l\'installation des fichiers dans le dossier <em>%s</em>. Il se peut que le disque soit plein, ou que les permissions d\'accès aux fichiers soient incorrectes. Il est possible que le greffon soit partiellement installé et que cela laisse votre installation de DoluWiki instable.';
 $lang['noperms']               = 'Impossible d\'écrire dans le dossier des extensions.';
 $lang['notplperms']            = 'Impossible d\'écrire dans le dossier des thèmes.';
diff --git a/lib/plugins/extension/lang/hr/intro_install.txt b/lib/plugins/extension/lang/hr/intro_install.txt
index fc2d22f52f8ddefd5c09669cc1270c0701c1b6f1..f3274b0f78a4c8b7f3be5c014883615efc337330 100644
--- a/lib/plugins/extension/lang/hr/intro_install.txt
+++ b/lib/plugins/extension/lang/hr/intro_install.txt
@@ -1 +1 @@
-Ovdje možete ručno instalirati dodatak (plugin) i predložak (template) bilo učitavanjem ili specificiranjem URL-a za direktno učitavanje.
\ No newline at end of file
+Ovdje možete ručno postaviti dodatak (plugin) i predložak (template) bilo učitavanjem ili navođenjem URL adrese za direktno učitavanje.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/hr/intro_plugins.txt b/lib/plugins/extension/lang/hr/intro_plugins.txt
index fdc629d62f6518171087aca2d628dafb29301db2..0c458ee432bd7bed4afeb515f3c6cbdf2d831bd5 100644
--- a/lib/plugins/extension/lang/hr/intro_plugins.txt
+++ b/lib/plugins/extension/lang/hr/intro_plugins.txt
@@ -1 +1 @@
-Ovo su dodaci (plugin) trenutno instalirani na Vašem DokuWiku-u. Možete ih omogućiti, onemogućiti ili u potpunosti deinstalirati. Nadogradnje dodataka su također prikazane, obavezno pročitajte dokumentaciju  dodatka prije nadogradnje.
\ No newline at end of file
+Ovo su dodaci (plugin) trenutno postavljeni na Vašem DokuWiku-u. Možete ih omogućiti, onemogućiti ili u potpunosti ukloniti. Nadogradnje dodataka su također prikazane, obavezno pročitajte dokumentaciju  dodatka prije nadogradnje.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/hr/intro_search.txt b/lib/plugins/extension/lang/hr/intro_search.txt
index 93bf4b000365f1b8cdd7f3b8eebf9bce4008d4b4..405690581cd829e5518d5c376145a07d0a5d3b48 100644
--- a/lib/plugins/extension/lang/hr/intro_search.txt
+++ b/lib/plugins/extension/lang/hr/intro_search.txt
@@ -1 +1 @@
-Ovaj tab vam pruža pristup dostupnim dodatcima i predlošcima za DokuWiki od treće strane. Molimo budite svjesni da instaliranje koda od treće strane može biti **sigurnosni rizik**, možda želite prvo pročitati o [[doku>security#plugin_security|sigurnosti dodataka]].
\ No newline at end of file
+Ovdje možete potražiti i druge dostupne dodatke i predloške za DokuWiki. Molimo budite svjesni da postavljanje koda razvijenog od treće strane može biti **sigurnosni rizik**, možda želite prvo pročitati o [[doku>security#plugin_security|sigurnosti dodataka]].
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/hr/intro_templates.txt b/lib/plugins/extension/lang/hr/intro_templates.txt
index 968906cf971c72a814ee1822524c0d09ee637d95..76dafe6b7a18703c9c83003104028f84411b4987 100644
--- a/lib/plugins/extension/lang/hr/intro_templates.txt
+++ b/lib/plugins/extension/lang/hr/intro_templates.txt
@@ -1 +1 @@
-Ovo su predlošci trenutno instalirani na Vašem DokuWiki-u. Možete odabrati koji se predložak koristi na [[?do=admin&page=config|Upravitelju postavki]].
\ No newline at end of file
+Ovo su predlošci trenutno postavljeni na Vašem DokuWiki-u. Koji se predložak koristi možete odabrati na [[?do=admin&page=config|Upravitelju postavki]].
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/hr/lang.php b/lib/plugins/extension/lang/hr/lang.php
index f43defcb10fd735c7e76684792c3188685530ed6..e51d8cba3faecac920f0c480e89440d28f76f29c 100644
--- a/lib/plugins/extension/lang/hr/lang.php
+++ b/lib/plugins/extension/lang/hr/lang.php
@@ -5,20 +5,20 @@
  * 
  * @author Davor Turkalj <turki.bsc@gmail.com>
  */
-$lang['menu']                  = 'Upravitelj dodataka';
+$lang['menu']                  = 'Upravitelj proširenja';
 $lang['tab_plugins']           = 'Ugrađeni dodatci';
 $lang['tab_templates']         = 'Ugrađeni predlošci';
 $lang['tab_search']            = 'Potraži i ugradi';
 $lang['tab_install']           = 'Ručna ugradnja';
 $lang['notimplemented']        = 'Ova mogućnost još nije napravljena';
-$lang['notinstalled']          = 'Dodatak nije ugrađen';
-$lang['alreadyenabled']        = 'Ovaj dodatak je već omogućen';
-$lang['alreadydisabled']       = 'Ovaj dodatak je već onemogućen';
+$lang['notinstalled']          = 'Proširenje nije ugrađeno';
+$lang['alreadyenabled']        = 'Ovo proširenje je već omogućeno';
+$lang['alreadydisabled']       = 'Ovo proširenje je već onemogućeno';
 $lang['pluginlistsaveerror']   = 'Dogodila se greška pri snimanju liste dodataka';
 $lang['unknownauthor']         = 'Nepoznat autor';
 $lang['unknownversion']        = 'Nepoznata inačica';
 $lang['btn_info']              = 'Prikaži više informacija';
-$lang['btn_update']            = 'Dogradi';
+$lang['btn_update']            = 'Ažuriraj';
 $lang['btn_uninstall']         = 'Ukloni';
 $lang['btn_enable']            = 'Omogući';
 $lang['btn_disable']           = 'Onemogući';
@@ -33,7 +33,7 @@ $lang['popularity']            = 'Popularnost: %s%%';
 $lang['homepage_link']         = 'Upute';
 $lang['bugs_features']         = 'Greške';
 $lang['tags']                  = 'Oznake:';
-$lang['author_hint']           = 'Potraži dodatke od ovog autora';
+$lang['author_hint']           = 'Potraži proširenja od ovog autora';
 $lang['installed']             = 'Ugrađeno:';
 $lang['downloadurl']           = 'URL adresa preuzimanja:';
 $lang['repository']            = 'Repozitorij:';
@@ -61,7 +61,8 @@ $lang['status_template']       = 'predložak';
 $lang['status_bundled']        = 'ugrađen';
 $lang['msg_enabled']           = 'Dodatak %s omogućen';
 $lang['msg_disabled']          = 'Dodatak %s onemogućen';
-$lang['msg_delete_success']    = 'Proširenje uklonjeno';
+$lang['msg_delete_success']    = 'Proširenje %s uklonjeno';
+$lang['msg_delete_failed']     = 'Uklanjanje proširenja %s nije uspjelo';
 $lang['msg_template_install_success'] = 'Predložak %s uspješno ugrađen';
 $lang['msg_template_update_success'] = 'Predložak %s uspješno nadograđen';
 $lang['msg_plugin_install_success'] = 'Dodatak %s uspješno ugrađen';
@@ -83,6 +84,8 @@ $lang['noperms']               = 'Nije moguće pisati u mapu proširanja';
 $lang['notplperms']            = 'Nije moguće pisati u mapu predloška';
 $lang['nopluginperms']         = 'Nije moguće pisati u mapu dodatka';
 $lang['git']                   = 'Proširenje je ugrađeno preko Git-a, možda ga ne želite nadograđivati ovdje.';
+$lang['auth']                  = 'Autorizacijski dodatak nije podešen, razmotrite njegovo onemogućavanje kao dodatka.';
 $lang['install_url']           = 'Ugradi s URL-a:';
 $lang['install_upload']        = 'Učitaj proširenje:';
 $lang['repo_error']            = 'Repozitorij dodataka nije dostupan. Budite sigurni da server može pristupiti www.dokuwiki.org i provjerite proxy postavke.';
+$lang['nossl']                 = 'Izgleda da korišteni PHP ne podržava SSL. Učitavanje neće raditi na mnogim DokuWiki dodatcima.';
diff --git a/lib/plugins/extension/lang/hu/lang.php b/lib/plugins/extension/lang/hu/lang.php
index a27b5a3079f12279ece6fc9e3711e362afc867ef..7d531e15b359fb795eadbed4396d0f00247fbd13 100644
--- a/lib/plugins/extension/lang/hu/lang.php
+++ b/lib/plugins/extension/lang/hu/lang.php
@@ -25,6 +25,10 @@ $lang['btn_disable']           = 'Letiltás';
 $lang['btn_install']           = 'Telepítés';
 $lang['btn_reinstall']         = 'Újratelepítés';
 $lang['js']['reallydel']       = 'Biztosan törlöd ezt a bővítményt?';
+$lang['js']['display_viewoptions'] = 'Nézet beállításai:';
+$lang['js']['display_enabled'] = 'engedélyezve';
+$lang['js']['display_disabled'] = 'letiltva';
+$lang['js']['display_updatable'] = 'frissíthető';
 $lang['search_for']            = 'Bővítmények keresése:';
 $lang['search']                = 'Keresés';
 $lang['extensionby']           = '<strong>%s</strong>, %s szerzőtől';
@@ -61,7 +65,8 @@ $lang['status_template']       = 'sablon';
 $lang['status_bundled']        = 'beépített';
 $lang['msg_enabled']           = 'A(z) %s modul engedélyezve';
 $lang['msg_disabled']          = 'A(z) %s modul letiltva';
-$lang['msg_delete_success']    = 'A bővítmény törölve';
+$lang['msg_delete_success']    = 'A bővítmény %s törölve';
+$lang['msg_delete_failed']     = 'A(z) %s bővítmény eltávolítása sikertelen';
 $lang['msg_template_install_success'] = 'A(z) %s sablon sikeresen telepítve';
 $lang['msg_template_update_success'] = 'A(z) %s sablon sikeresen frissítve';
 $lang['msg_plugin_install_success'] = 'A(z) %s modul sikeresen telepítve';
@@ -83,6 +88,8 @@ $lang['noperms']               = 'A bővítmény könyvtára nem írható';
 $lang['notplperms']            = 'A sablon könyvtára nem írható';
 $lang['nopluginperms']         = 'A modul könyvtára nem írható';
 $lang['git']                   = 'Ezt a bővítményt git-tel telepítették, lehet, hogy nem itt célszerű frissíteni';
+$lang['auth']                  = 'Ez az autentikációs modul nincs engedélyezve a beállításokban, érdemes lehet letiltani.';
 $lang['install_url']           = 'Telepítés erről az URL-ről:';
 $lang['install_upload']        = 'Bővítmény feltöltése:';
 $lang['repo_error']            = 'A modul repository-ja nem érhető el. Bizonyosodj meg róla, hogy a szervereden engedélyezett a www.dokuwiki.org cím elérése és ellenőrizd a proxy beállításaidat!';
+$lang['nossl']                 = 'Úgy tűnik, a PHP konfigurációd nem támogatja az SSL-t. Néhány DokuWiki bővítmény letöltése sikertelen lehet.';
diff --git a/lib/plugins/extension/lang/it/intro_install.txt b/lib/plugins/extension/lang/it/intro_install.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5106500bae7a1385fed530a9a28269bdd5434b75
--- /dev/null
+++ b/lib/plugins/extension/lang/it/intro_install.txt
@@ -0,0 +1 @@
+Qui potete installare manualmente plugin e template, sia caricandoli in upload sia fornendo una URL per scaricarli direttamente.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/it/intro_plugins.txt b/lib/plugins/extension/lang/it/intro_plugins.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cd7825fb2a695d2996caa421f126b4fd121710ed
--- /dev/null
+++ b/lib/plugins/extension/lang/it/intro_plugins.txt
@@ -0,0 +1 @@
+Questi sono i plugin attualmente installati nel vostro DokuWiki. Qui potete abilitarli o disabilitarli o addirittura disinstallarli completamente. Qui sono mostrati anche gli aggiornamenti dei plugin, assicurativi di leggere la relativa documentazione prima di aggiornarli.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/it/intro_search.txt b/lib/plugins/extension/lang/it/intro_search.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fb77d36837fbc6caabce43e3aa71a93107a0d757
--- /dev/null
+++ b/lib/plugins/extension/lang/it/intro_search.txt
@@ -0,0 +1 @@
+Questa sezione ti da accesso a tutti i plugin e temi di terze parti disponibili per DokuWiki. Sappi che l'installazione di codice di terze parti potrebbe rappresentare un **rischio di sicurezza**, quindi, forse, prima vorresti informarti a proposito della [[doku>security#plugin_security|sicurezza dei plugin]].
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/it/intro_templates.txt b/lib/plugins/extension/lang/it/intro_templates.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a38d86814694734e5029202d01e982f5d9c7e010
--- /dev/null
+++ b/lib/plugins/extension/lang/it/intro_templates.txt
@@ -0,0 +1 @@
+Questi sono i temi attualmente installati nel tuo DokuWiki. Puoi selezionare il tema da usare in [[?do=admin&page=config|Configurazione Wiki]].
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/it/lang.php b/lib/plugins/extension/lang/it/lang.php
index 1aa658e0f9cba8ea6b3b81bf416355c7c25f16b3..d22cb9d52ba8aff7cf8105bb162827111c15db22 100644
--- a/lib/plugins/extension/lang/it/lang.php
+++ b/lib/plugins/extension/lang/it/lang.php
@@ -6,7 +6,18 @@
  * @author Francesco <francesco.cavalli@hotmail.com>
  * @author Fabio <fabioslurp@yahoo.it>
  * @author Torpedo <dgtorpedo@gmail.com>
+ * @author Maurizio <mcannavo@katamail.com>
  */
+$lang['menu']                  = 'Manager delle Extension';
+$lang['tab_plugins']           = 'Plugin Installati';
+$lang['tab_templates']         = 'Template Installati';
+$lang['tab_search']            = 'Ricerca e Installazione';
+$lang['tab_install']           = 'Installazione Manuale';
+$lang['notimplemented']        = 'Questa funzionalità non è ancora stata implementata';
+$lang['notinstalled']          = 'Questa extension non è installata';
+$lang['alreadyenabled']        = 'Questa extension è già stata abilitata';
+$lang['alreadydisabled']       = 'Questa extension à già stata disabilitata';
+$lang['pluginlistsaveerror']   = 'Si è verificato un errore durante il salvataggio dell\'elenco dei plugin';
 $lang['unknownauthor']         = 'Autore sconosciuto';
 $lang['unknownversion']        = 'Revisione sconosciuta';
 $lang['btn_info']              = 'Mostra maggiori informazioni';
@@ -17,7 +28,15 @@ $lang['btn_disable']           = 'Disabilita';
 $lang['btn_install']           = 'Installa';
 $lang['btn_reinstall']         = 'Reinstalla';
 $lang['js']['reallydel']       = 'Sicuro di disinstallare questa estensione?';
+$lang['js']['display_viewoptions'] = 'Opzioni di Visualizzazione:';
+$lang['js']['display_enabled'] = 'abilitato';
+$lang['js']['display_disabled'] = 'disabilitato';
+$lang['js']['display_updatable'] = 'aggiornabile';
+$lang['search_for']            = 'Extension di Ricerca:';
 $lang['search']                = 'Cerca';
+$lang['extensionby']           = '<strong>%s</strong> da %s';
+$lang['screenshot']            = 'Screenshot di %s';
+$lang['popularity']            = 'Popolarità: %s%%';
 $lang['homepage_link']         = 'Documenti';
 $lang['bugs_features']         = 'Bug';
 $lang['tags']                  = 'Tag:';
@@ -46,19 +65,34 @@ $lang['status_disabled']       = 'disabilitato';
 $lang['status_unmodifiable']   = 'inmodificabile';
 $lang['status_plugin']         = 'plugin';
 $lang['status_template']       = 'modello';
+$lang['status_bundled']        = 'accoppiato';
 $lang['msg_enabled']           = 'Plugin %s abilitato';
 $lang['msg_disabled']          = 'Plugin %s disabilitato';
 $lang['msg_delete_success']    = 'Estensione %s disinstallata';
+$lang['msg_delete_failed']     = 'Disinstallazione dell\'Extension %s fallita';
+$lang['msg_template_install_success'] = 'Il template %s è stato installato correttamente';
+$lang['msg_template_update_success'] = 'Il Template %s è stato aggiornato correttamente';
 $lang['msg_plugin_install_success'] = 'Plugin %s installato con successo';
 $lang['msg_plugin_update_success'] = 'Plugin %s aggiornato con successo';
 $lang['msg_upload_failed']     = 'Caricamento del file fallito';
 $lang['missing_dependency']    = '<strong>Dipendenza mancante o disabilitata: </strong> %s';
+$lang['security_issue']        = '<strong>Problema di sicurezza:</strong> %s';
+$lang['security_warning']      = '<strong>Avvertimento di sicurezza:</strong> %s';
 $lang['update_available']      = '<strong>Aggiornamento:</strong> Nuova versione %s disponibile.';
 $lang['wrong_folder']          = '<strong>Plugin non installato correttamente:</strong> rinomina la directory del plugin "%s" in "%s".';
+$lang['url_change']            = '<strong>URL cambiato:</strong> l\'URL per il download è cambiato dall\'ultima volta che è stato utilizzato. Controlla se il nuovo URL è valido prima di aggiornare l\'estensione.<br />Nuovo: %s<br />Vecchio: %s';
 $lang['error_badurl']          = 'URLs deve iniziare con http o https';
 $lang['error_dircreate']       = 'Impossibile creare una cartella temporanea per ricevere il download';
 $lang['error_download']        = 'Impossibile scaricare il file: %s';
+$lang['error_decompress']      = 'Impossibile decomprimere il file scaricato. Ciò può dipendere da errori in fase di download, nel qual caso dovreste ripetere l\'operazione; oppure il formato di compressione è sconosciuto, e in questo caso dovrete scaricare e installare manualmente.';
+$lang['error_findfolder']      = 'Impossibile identificare la directory dell\'extension, dovrete scaricare e installare manualmente';
+$lang['error_copy']            = 'C\'è stato un errore di copia dei file mentre si tentava di copiare i file per la directory <em>%s</em>: il disco potrebbe essere pieno o i pemessi di accesso ai file potrebbero essere sbagliati. Questo potrebbe aver causato una parziale installazione dei plugin lasciando il tuo wiki instabile';
 $lang['noperms']               = 'La directory Extension non è scrivibile';
 $lang['notplperms']            = 'Il modello di cartella non è scrivibile';
 $lang['nopluginperms']         = 'La cartella plugin non è scrivibile';
+$lang['git']                   = 'Questa extension è stata installata da git, potreste non volerla aggiornare qui.';
+$lang['auth']                  = 'Questo plugin di autenticazione non è abilitato nella configurazione, considera di disabilitarlo.';
 $lang['install_url']           = 'Installa da URL:';
+$lang['install_upload']        = 'Caricamento Extension:';
+$lang['repo_error']            = 'Il repository dei plugin non può essere raggiunto. Assicuratevi che il vostro server sia abilitato a contattare l\'indirizzo www.dokuwiki.org e controllate le impostazioni del vostro proxy.';
+$lang['nossl']                 = 'La tua installazione PHP sembra mancare del supporto SSL. I download per molte estensioni di DokuWiki non funzioneranno.';
diff --git a/lib/plugins/extension/lang/ja/lang.php b/lib/plugins/extension/lang/ja/lang.php
index ce6ed2b976caa533c8c95104fa14b98bf216a16e..689a9877ef741a8f72b76266e65aec6e955d1a20 100644
--- a/lib/plugins/extension/lang/ja/lang.php
+++ b/lib/plugins/extension/lang/ja/lang.php
@@ -6,6 +6,7 @@
  * @author Hideaki SAWADA <chuno@live.jp>
  * @author PzF_X <jp_minecraft@yahoo.co.jp>
  * @author Satoshi Sahara <sahara.satoshi@gmail.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
  */
 $lang['menu']                  = '拡張機能管理';
 $lang['tab_plugins']           = 'インストール済プラグイン';
@@ -27,6 +28,10 @@ $lang['btn_disable']           = '無効化';
 $lang['btn_install']           = 'インストール';
 $lang['btn_reinstall']         = '再インストール';
 $lang['js']['reallydel']       = 'この拡張機能を本当にアンインストールしますか?';
+$lang['js']['display_viewoptions'] = '表示オプション: ';
+$lang['js']['display_enabled'] = '有効';
+$lang['js']['display_disabled'] = '無効';
+$lang['js']['display_updatable'] = '更新可能';
 $lang['search_for']            = '拡張機能の検索:';
 $lang['search']                = '検索';
 $lang['extensionby']           = '<strong>%s</strong> 作者: %s';
diff --git a/lib/plugins/extension/lang/ko/lang.php b/lib/plugins/extension/lang/ko/lang.php
index 5dc5d826947a4a35d8f3e6155d1326f3f8294ced..31b230b535229293c2f51a7fe4a2fdfe875c33e8 100644
--- a/lib/plugins/extension/lang/ko/lang.php
+++ b/lib/plugins/extension/lang/ko/lang.php
@@ -5,6 +5,7 @@
  * 
  * @author Young gon Cha <garmede@gmail.com>
  * @author Myeongjin <aranet100@gmail.com>
+ * @author hyeonsoft <hyeonsoft@live.co.kr>
  */
 $lang['menu']                  = '확장 기능 관리자';
 $lang['tab_plugins']           = '설치된 플러그인';
@@ -26,6 +27,10 @@ $lang['btn_disable']           = '비활성화';
 $lang['btn_install']           = '설치';
 $lang['btn_reinstall']         = '다시 설치';
 $lang['js']['reallydel']       = '정말 이 확장 기능을 제거하겠습니까?';
+$lang['js']['display_viewoptions'] = '보기 옵션:';
+$lang['js']['display_enabled'] = '활성화됨';
+$lang['js']['display_disabled'] = '비활성화됨';
+$lang['js']['display_updatable'] = '업데이트할 수 있음';
 $lang['search_for']            = '확장 기능 검색:';
 $lang['search']                = '검색';
 $lang['extensionby']           = '<strong>%s</strong> (저자 %s)';
diff --git a/lib/plugins/extension/lang/lv/lang.php b/lib/plugins/extension/lang/lv/lang.php
index e7e9bdfd9a1206a86a72129c74748f2d2fbe946a..b3e5ce0d24269c4650276c53f3cd96c5d04928b0 100644
--- a/lib/plugins/extension/lang/lv/lang.php
+++ b/lib/plugins/extension/lang/lv/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Aivars Miška <allefm@gmail.com>
  */
-$lang['msg_delete_success']    = 'Papildinājums atinstalēts';
+$lang['msg_delete_success']    = 'Papildinājums %s atinstalēts';
diff --git a/lib/plugins/extension/lang/nl/lang.php b/lib/plugins/extension/lang/nl/lang.php
index 194b4b3e199088870707ede15947296224e7d148..ead2d9e8f8a496572970d88de455e55d4d20bd97 100644
--- a/lib/plugins/extension/lang/nl/lang.php
+++ b/lib/plugins/extension/lang/nl/lang.php
@@ -7,6 +7,9 @@
  * @author Gerrit Uitslag <klapinklapin@gmail.com>
  * @author Johan Vervloet <johan.vervloet@gmail.com>
  * @author Mijndert <mijndert@mijndertstuij.nl>
+ * @author Johan Wijnker <johan@wijnker.eu>
+ * @author Mark C. Prins <mprins@users.sf.net>
+ * @author hugo smet <hugo.smet@scarlet.be>
  */
 $lang['menu']                  = 'Uitbreidingen';
 $lang['tab_plugins']           = 'Geïnstalleerde Plugins';
@@ -28,6 +31,10 @@ $lang['btn_disable']           = 'Schakel uit';
 $lang['btn_install']           = 'Installeer';
 $lang['btn_reinstall']         = 'Her-installeer';
 $lang['js']['reallydel']       = 'Wilt u deze uitbreiding deinstalleren?';
+$lang['js']['display_viewoptions'] = 'Weergave opties:';
+$lang['js']['display_enabled'] = 'ingeschakeld';
+$lang['js']['display_disabled'] = 'uitgeschakeld';
+$lang['js']['display_updatable'] = 'update beschikbaar';
 $lang['search_for']            = 'Zoek Uitbreiding:';
 $lang['search']                = 'Zoek';
 $lang['extensionby']           = '<strong>%s</strong> by %s';
@@ -87,6 +94,8 @@ $lang['noperms']               = 'Uitbreidings directory is niet schrijfbaar';
 $lang['notplperms']            = 'Template directory is niet schrijfbaar';
 $lang['nopluginperms']         = 'Plugin directory is niet schrijfbaar';
 $lang['git']                   = 'De uitbreiding werd geïnstalleerd via git, u wilt deze hier wellicht niet aanpassen.';
+$lang['auth']                  = 'Deze auth plugin is niet geactiveerd in de configuratie, overweeg het om uit te schakelen.';
 $lang['install_url']           = 'Installeer vanaf URL:';
 $lang['install_upload']        = 'Upload Uitbreiding:';
 $lang['repo_error']            = 'Er kon geen verbinding worden gemaakt met de centrale plugin opslag. Controleer of de server verbinding mag maken met www.dokuwiki.org en controleer de proxy instellingen.';
+$lang['nossl']                 = 'Je PHP mist SSL ondersteuning. Downloaden werkt niet met veel DokuWiki extensies.';
diff --git a/lib/plugins/extension/lang/pl/lang.php b/lib/plugins/extension/lang/pl/lang.php
index 4fdca79c9caca2c538744cc84e7cce18b1266250..ab9a818b6d5bc007651d3288eb1b61e1e12185b1 100644
--- a/lib/plugins/extension/lang/pl/lang.php
+++ b/lib/plugins/extension/lang/pl/lang.php
@@ -2,7 +2,7 @@
 
 /**
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * 
+ *
  * @author Mati <mackosa@wp.pl>
  */
 $lang['menu']                  = 'Menedżer rozszerzeń';
@@ -36,4 +36,4 @@ $lang['status_not_installed']  = 'nie zainstalowano';
 $lang['status_enabled']        = 'uruchomione';
 $lang['status_disabled']       = 'wyłączone';
 $lang['status_plugin']         = 'dodatek';
-$lang['msg_delete_success']    = 'Rozszerzenie odinstalowane';
+$lang['msg_delete_success']    = 'Rozszerzenie %s odinstalowane';
diff --git a/lib/plugins/extension/lang/pt-br/lang.php b/lib/plugins/extension/lang/pt-br/lang.php
index 0d897616abd4425aaa742da2b25214133519a9ac..73012f369187cc5150f565d3ed4130cea8a7df61 100644
--- a/lib/plugins/extension/lang/pt-br/lang.php
+++ b/lib/plugins/extension/lang/pt-br/lang.php
@@ -4,6 +4,8 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Felipe Castro <fefcas@gmail.com>
+ * @author Hudson FAS <hudsonfas@gmail.com>
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
  */
 $lang['menu']                  = 'Gerenciador de extensões';
 $lang['tab_plugins']           = 'Extensões instaladas';
@@ -25,6 +27,10 @@ $lang['btn_disable']           = 'Desabilitar';
 $lang['btn_install']           = 'Instalar';
 $lang['btn_reinstall']         = 'Re-instalar';
 $lang['js']['reallydel']       = 'Quer mesmo desinstalar esta extensão?';
+$lang['js']['display_viewoptions'] = 'Opções de visualização:';
+$lang['js']['display_enabled'] = 'habilitado';
+$lang['js']['display_disabled'] = 'desabilitado';
+$lang['js']['display_updatable'] = 'atualizável';
 $lang['search_for']            = 'Procurar extensão:';
 $lang['search']                = 'Procurar';
 $lang['extensionby']           = '<strong>%s</strong> de %s';
@@ -61,7 +67,8 @@ $lang['status_template']       = 'modelo';
 $lang['status_bundled']        = 'agrupado';
 $lang['msg_enabled']           = 'Extensão %s habilitada';
 $lang['msg_disabled']          = 'Extensão %s desabilitada';
-$lang['msg_delete_success']    = 'Extensão desinstalada';
+$lang['msg_delete_success']    = 'Extensão %s desinstalada';
+$lang['msg_delete_failed']     = 'Falha na desinstalação da extensão %s';
 $lang['msg_template_install_success'] = 'Modelo %s instalado com sucesso';
 $lang['msg_template_update_success'] = 'Modelo %s atualizado com sucesso';
 $lang['msg_plugin_install_success'] = 'Extensão %s instalada com sucesso';
@@ -73,3 +80,18 @@ $lang['security_warning']      = '<strong>Aviso sobre segurança:</strong> %s';
 $lang['update_available']      = '<strong>Atualização:</strong> Nova versão %s está disponível.';
 $lang['wrong_folder']          = '<strong>Extensão instalada incorretamente:</strong> Renomeie o diretório de extensões "%s" para "%s".';
 $lang['url_change']            = '<strong>URL mudou:</strong> A URL para baixar mudou desde a última baixada. Verifique se a nova URL é válida antes de atualizar a extensão.<br />Novo: %s<br />Velho: %s';
+$lang['error_badurl']          = 'O URL deve começar com http ou https';
+$lang['error_dircreate']       = 'Impossível criar pasta temporária para receber o download';
+$lang['error_download']        = 'Impossável baixar o arquivo: %s';
+$lang['error_decompress']      = 'Impossável descompimir o arquivo baixado. Isso pode ser resultado de um download ruim que neste caso pode ser tentado novamente; ou o formato da compressão pode ser desconhecido, neste caso baixe e instale manualmente.';
+$lang['error_findfolder']      = 'Impossíl identificar a extensão do diretório, você deve baixar e instalar manualmente.';
+$lang['error_copy']            = 'Houve um erro de cópia de arquivo durante a tentativa de instalar os arquivos para o diretório <em>%s</em> : o disco pode estar cheio ou as permissões de acesso ao arquivo podem estar incorreta. Isso pode ter resultado em um plugin parcialmente instalado e deixar a sua instalação wiki instável';
+$lang['noperms']               = 'Diretório de extensão não é gravável';
+$lang['notplperms']            = 'Diretório de modelo (Template) não é gravável';
+$lang['nopluginperms']         = 'Diretório de plugin não é gravável';
+$lang['git']                   = 'A extensão foi instalada via git, você talvez não queira atualizá-lo aqui.';
+$lang['auth']                  = 'O plugin auth não está ativado na configuração, considere desativá-lo.';
+$lang['install_url']           = 'Instale a partir do URL:';
+$lang['install_upload']        = 'Publicar Extensão:';
+$lang['repo_error']            = 'O repositório de plugin não pode ser contactado. Certifique-se de que o servidor pode acessar www.dokuwiki.org e confira suas configurações de proxy.';
+$lang['nossl']                 = 'Sua instalação PHP parece que não suporta SSL. Algumas extensões DokuWiki não serão baixadas.';
diff --git a/lib/plugins/extension/lang/pt/intro_templates.txt b/lib/plugins/extension/lang/pt/intro_templates.txt
index ecdf99f17886d6fec5f466398bbf2179a7494263..02bc3364384a3512bbc23bdd99b5291a76de5617 100644
--- a/lib/plugins/extension/lang/pt/intro_templates.txt
+++ b/lib/plugins/extension/lang/pt/intro_templates.txt
@@ -1 +1 @@
-Estes são os modelos atualmente instalados em seu DokuWiki. Você pode selecionar o modelo a ser usado no [[Do = admin & page = configuração |? Configuration Manager]].
\ No newline at end of file
+Estes são os modelos atualmente instalados em seu DokuWiki. Você pode selecionar o modelo a ser usado no [[?do=admin&page=config|Configuration Manager]].
diff --git a/lib/plugins/extension/lang/pt/lang.php b/lib/plugins/extension/lang/pt/lang.php
index c7b4f29c2b23aeda4a9c1344250bf21f973eb3e2..9713f91f3941a77df908ff8ceeb18c69fc6bdc8f 100644
--- a/lib/plugins/extension/lang/pt/lang.php
+++ b/lib/plugins/extension/lang/pt/lang.php
@@ -4,6 +4,9 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author Guido Salatino <guidorafael23@gmail.com>
+ * @author Romulo Pereira <romuloccomp@gmail.com>
+ * @author Paulo Carmino <contato@paulocarmino.com>
+ * @author Alfredo Silva <alfredo.silva@sky.com>
  */
 $lang['menu']                  = 'Gerenciador de Extensões';
 $lang['tab_plugins']           = 'Plugins Instalados';
@@ -25,6 +28,10 @@ $lang['btn_disable']           = 'Desabilitar';
 $lang['btn_install']           = 'Instalar';
 $lang['btn_reinstall']         = 'Reinstalar';
 $lang['js']['reallydel']       = 'Confirma a desinstalação desta extensão?';
+$lang['js']['display_viewoptions'] = 'Ver Opções:';
+$lang['js']['display_enabled'] = 'ativado';
+$lang['js']['display_disabled'] = 'desativado';
+$lang['js']['display_updatable'] = 'atualizável';
 $lang['search_for']            = 'Pesquisar Extensão:';
 $lang['search']                = 'Pesquisar';
 $lang['extensionby']           = '<strong>%s</strong> by %s';
@@ -40,7 +47,7 @@ $lang['downloadurl']           = 'Baixar URL:
 ';
 $lang['repository']            = 'Repositório:
 ';
-$lang['unknown']               = '<em> desconhecido </ em>
+$lang['unknown']               = '<em> desconhecido </em>
 ';
 $lang['installed_version']     = 'Versão instalada:';
 $lang['install_date']          = 'Sua última atualização:';
diff --git a/lib/plugins/extension/lang/ru/intro_install.txt b/lib/plugins/extension/lang/ru/intro_install.txt
index 7b8ac661bb2d62c88a3969617b987b09c0eba1d2..0c555aee2c54ad081dc35752af33f3b30093a12a 100644
--- a/lib/plugins/extension/lang/ru/intro_install.txt
+++ b/lib/plugins/extension/lang/ru/intro_install.txt
@@ -1 +1 @@
-Здесь вы можете самостоятельно установить плагины и шаблоны, загрузив их или предоставив прямой URL для скачивания.
\ No newline at end of file
+Здесь вы можете самостоятельно установить плагины и шаблоны, загрузив их или предоставив прямой URL для скачивания.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/ru/intro_plugins.txt b/lib/plugins/extension/lang/ru/intro_plugins.txt
index 7262516db9bf82ff44b2c9969d5c7b6b4fd458ee..547ca7184f5c70f15496d2660acbb247d08987cb 100644
--- a/lib/plugins/extension/lang/ru/intro_plugins.txt
+++ b/lib/plugins/extension/lang/ru/intro_plugins.txt
@@ -1 +1 @@
-Плагины, установленные в вашей DokuWiki. Здесь вы можете их включить или выключить, или даже полностью удалить. Также здесь показываются обновления плагинов, обязательно прочтите документацию плагина перед обновлением.
\ No newline at end of file
+Плагины, установленные в вашей «Докувики». Здесь вы можете их включить или выключить, или даже полностью удалить. Также здесь показываются обновления плагинов; обязательно прочтите документацию плагина перед обновлением.
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/ru/intro_search.txt b/lib/plugins/extension/lang/ru/intro_search.txt
index a8486eab6c386db5511250dcaa020202dc701d0d..609985bf4d5546a1d9bc26d3f1cadd25fc61df85 100644
--- a/lib/plugins/extension/lang/ru/intro_search.txt
+++ b/lib/plugins/extension/lang/ru/intro_search.txt
@@ -1 +1 @@
-Эта вкладка дает вам доступ ко всем имеющимся сторонним плагинам и шаблонам для DokuWiki. Имейте в виду, что установка стороннего кода может представлять **угрозу безопасности**, возможно вам нужно сперва прочитать о [[doku>security#plugin_security|безопасности плагинов]].
\ No newline at end of file
+Вкладка даёт вам доступ ко всем имеющимся сторонним плагинам и шаблонам для «Докувики». Имейте в виду, что установка стороннего кода может представлять **угрозу безопасности,** возможно вам нужно сперва прочитать о [[doku>security#plugin_security|безопасности плагинов]].
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/ru/intro_templates.txt b/lib/plugins/extension/lang/ru/intro_templates.txt
index 2d0b742567e57d9e5030ee15efee9d91674e66e4..a71ad67378e875cdf83170a8e5b81b4c37b640f6 100644
--- a/lib/plugins/extension/lang/ru/intro_templates.txt
+++ b/lib/plugins/extension/lang/ru/intro_templates.txt
@@ -1 +1 @@
-Это шаблоны, установленные в вашей DokuWiki. Вы можете выбрать шаблон, который нужно использовать в [[?do=admin&page=config|Менеджере Конфигурации]]
\ No newline at end of file
+Шаблоны (темы оформления), установленные в вашей «Докувики». Шаблон, который нужно использовать, выбирается в [[?do=admin&page=config|настройках вики]]
\ No newline at end of file
diff --git a/lib/plugins/extension/lang/ru/lang.php b/lib/plugins/extension/lang/ru/lang.php
index 64db39b789551929df095e08c137ef95f01f6232..6df783cc8d4ffea552a525dfa0620a5520fdac12 100644
--- a/lib/plugins/extension/lang/ru/lang.php
+++ b/lib/plugins/extension/lang/ru/lang.php
@@ -7,6 +7,8 @@
  * @author Igor Degraf <igordegraf@gmail.com>
  * @author Type-kun <workwork-1@yandex.ru>
  * @author Vitaly Filatenko <kot@hacktest.net>
+ * @author Alex P <alexander@lanos.co.uk>
+ * @author Takumo <9206984@mail.ru>
  */
 $lang['menu']                  = 'Управление дополнениями';
 $lang['tab_plugins']           = 'Установленные плагины';
@@ -15,12 +17,12 @@ $lang['tab_search']            = 'Поиск и установка';
 $lang['tab_install']           = 'Ручная установка';
 $lang['notimplemented']        = 'Эта возможность ещё не реализована';
 $lang['notinstalled']          = 'Это дополнение не установлено';
-$lang['alreadyenabled']        = 'Это расширение уже включено';
-$lang['alreadydisabled']       = 'Это расширение уже выключено';
+$lang['alreadyenabled']        = 'Это дополнение уже включено';
+$lang['alreadydisabled']       = 'Это дополнение уже отключено';
 $lang['pluginlistsaveerror']   = 'Ошибка при сохранении списка плагинов';
 $lang['unknownauthor']         = 'Автор неизвестен';
 $lang['unknownversion']        = 'Версия неизвестна';
-$lang['btn_info']              = 'Отобразить доп. информацию';
+$lang['btn_info']              = 'Подробнее';
 $lang['btn_update']            = 'Обновить';
 $lang['btn_uninstall']         = 'Удалить';
 $lang['btn_enable']            = 'Включить';
@@ -28,44 +30,48 @@ $lang['btn_disable']           = 'Отключить';
 $lang['btn_install']           = 'Установить';
 $lang['btn_reinstall']         = 'Переустановить';
 $lang['js']['reallydel']       = 'Действительно удалить это дополнение?';
-$lang['search_for']            = 'Поиск дополнения:';
+$lang['js']['display_viewoptions'] = 'Показать как:';
+$lang['js']['display_enabled'] = 'включён';
+$lang['js']['display_disabled'] = 'отключён';
+$lang['js']['display_updatable'] = 'обновление';
+$lang['search_for']            = 'Поиск дополнения';
 $lang['search']                = 'Найти';
-$lang['extensionby']           = '<strong>%s</strong> — %s';
+$lang['extensionby']           = '<strong>%s</strong> %s';
 $lang['screenshot']            = 'Скриншот: %s';
 $lang['popularity']            = 'Популярность: %s%%';
 $lang['homepage_link']         = 'Описание';
 $lang['bugs_features']         = 'Баг-трекер';
 $lang['tags']                  = 'Метки:';
 $lang['author_hint']           = 'Найти дополнения этого автора';
-$lang['installed']             = 'Установлено:';
-$lang['downloadurl']           = 'Ссылка для скачивания:';
-$lang['repository']            = 'Репозиторий:';
+$lang['installed']             = 'Установлен';
+$lang['downloadurl']           = 'URL скачивания';
+$lang['repository']            = 'Репозиторий';
 $lang['unknown']               = '<em>неизвестно</em>';
-$lang['installed_version']     = 'Установленная версия:';
-$lang['install_date']          = 'Последнее обновление:';
-$lang['available_version']     = 'Доступная версия:';
-$lang['compatible']            = 'Совместим с:';
-$lang['depends']               = 'Зависит от:';
-$lang['similar']               = 'Похож на:';
-$lang['conflicts']             = 'Конфликтует с:';
+$lang['installed_version']     = 'Версия';
+$lang['install_date']          = 'Обновлено';
+$lang['available_version']     = 'Доступная версия';
+$lang['compatible']            = 'Совместимость';
+$lang['depends']               = 'Зависит от';
+$lang['similar']               = 'Похож на';
+$lang['conflicts']             = 'Конфликтует с';
 $lang['donate']                = 'Нравится?';
 $lang['donate_action']         = 'Купить автору кофе!';
 $lang['repo_retry']            = 'Повторить';
-$lang['provides']              = 'Предоставляет:';
-$lang['status']                = 'Статус:';
-$lang['status_installed']      = 'установлено';
-$lang['status_not_installed']  = 'не установлено';
-$lang['status_protected']      = 'защищено';
+$lang['provides']              = 'Предоставляет';
+$lang['status']                = 'Статус';
+$lang['status_installed']      = 'установлен';
+$lang['status_not_installed']  = 'не установлен';
+$lang['status_protected']      = 'защищён';
 $lang['status_enabled']        = 'включён';
-$lang['status_disabled']       = 'отключено';
-$lang['status_unmodifiable']   = 'неизменяемо';
+$lang['status_disabled']       = 'отключён';
+$lang['status_unmodifiable']   = 'неизменяем';
 $lang['status_plugin']         = 'плагин';
 $lang['status_template']       = 'шаблон';
 $lang['status_bundled']        = 'в комплекте';
 $lang['msg_enabled']           = 'Плагин %s включён';
 $lang['msg_disabled']          = 'Плагин %s отключён';
-$lang['msg_delete_success']    = 'Дополнение удалено';
-$lang['msg_delete_failed']     = 'Не удалось удалить расширение %s';
+$lang['msg_delete_success']    = 'Дополнение %s удалено';
+$lang['msg_delete_failed']     = 'Не удалось удалить дополнение %s';
 $lang['msg_template_install_success'] = 'Шаблон %s успешно установлен';
 $lang['msg_template_update_success'] = 'Шаблон %s успешно обновлён';
 $lang['msg_plugin_install_success'] = 'Плагин %s успешно установлен';
@@ -74,19 +80,21 @@ $lang['msg_upload_failed']     = 'Не удалось загрузить фай
 $lang['missing_dependency']    = '<strong>Отсутствует или отключена зависимость:</strong> %s';
 $lang['security_issue']        = '<strong>Проблема безопасности:</strong> %s';
 $lang['security_warning']      = '<strong>Предупреждение безопасности:</strong> %s';
-$lang['update_available']      = '<strong>Обновление:</strong> доступна новая версия %s.';
-$lang['wrong_folder']          = '<strong>Плагин установлен неправильно:</strong> Переименуйте директорию "%s" в "%s".';
-$lang['url_change']            = '<strong>Ссылка изменилась:</strong> Ссылка для загрузки изменилась с прошлого раза. Проверьте новую ссылку прежде чем обновлять расширение.<br />Новая: %s<br />Старая: %s';
-$lang['error_badurl']          = 'Ссылки должны начинаться с http или https';
+$lang['update_available']      = '<strong>Обновление:</strong> доступна новая версия %s';
+$lang['wrong_folder']          = '<strong>Плагин установлен неправильно:</strong> переименуйте директорию плагина из %s в %s';
+$lang['url_change']            = '<strong>Ссылка изменилась:</strong> ссылка для загрузки изменилась с&nbsp;прошлого раза. Проверьте новую ссылку прежде, чем обновлять дополнение.<br />Новая: %s<br />Старая: %s';
+$lang['error_badurl']          = 'Ссылка должна начинаться с&nbsp;http или https';
 $lang['error_dircreate']       = 'Не удалось создать временную директорию для загрузки';
 $lang['error_download']        = 'Не удалось загрузить файл: %s';
-$lang['error_decompress']      = 'Не удалось распаковать загруженный файл. Возможно, файл был повреждён при загрузке - тогда нужно попробовать ещё раз. Либо неизвестен формат архива - тогда загрузку и установку надо произвести вручную.';
-$lang['error_findfolder']      = 'Не удалось определить директорию для расширения, загрузку и установку надо произвести вручную.';
-$lang['error_copy']            = 'Возникла ошибка копирования файлов в директорию <em>%s</em>: возможно, диск переполнен, или неверно выставлены права доступа. Это могло привести к неполной установке плагина и нарушить работу вашей вики.';
-$lang['noperms']               = 'Папка для расширений недоступна для записи';
-$lang['notplperms']            = 'Папка для шаблонов недоступна для записи';
-$lang['nopluginperms']         = 'Папка плагинов недоступна для записи';
-$lang['git']                   = 'Это расширение было установлено через git. Вы не можете обновить его тут.';
-$lang['install_url']           = 'Установить с адреса URL:';
-$lang['install_upload']        = 'Скачать расширение:';
-$lang['repo_error']            = 'Сайт с плагинами недоступен. Убедитесь, что у сайта есть доступ на www.dokuwiki.org, а также проверьте настройки соединения с Интернетом.';
+$lang['error_decompress']      = 'Не удалось распаковать загруженный файл. Возможно, файл был повреждён при загрузке — тогда нужно попробовать ещё раз. Либо неизвестен формат архива — тогда загрузку и установку надо произвести вручную';
+$lang['error_findfolder']      = 'Не удалось определить директорию для дополнения, загрузку и установку надо произвести вручную.';
+$lang['error_copy']            = 'Возникла ошибка копирования файлов в директорию <em>%s</em>: возможно, диск переполнен, или неверно выставлены права доступа. Это могло привести к неполной установке плагина и нарушить работу вашей вики.';
+$lang['noperms']               = 'Директория для дополнений недоступна для записи';
+$lang['notplperms']            = 'Директория для шаблонов недоступна для записи';
+$lang['nopluginperms']         = 'Директория для плагинов недоступна для записи';
+$lang['git']                   = 'Это дополнение было установлено через git. Вы не можете обновить его тут.';
+$lang['auth']                  = 'Этот auth-плагин не включён в конфигурации, подумайте об его отключении';
+$lang['install_url']           = 'Установить с адреса';
+$lang['install_upload']        = 'Загрузить дополнение';
+$lang['repo_error']            = 'Сайт с плагинами недоступен. Убедитесь, что у сайта есть доступ на www.dokuwiki.org, а также проверьте настройки соединения прокси.';
+$lang['nossl']                 = 'Ваша PHP-конфигурация не имеет SSL-поддержки. Это нарушит скачивание для многих дополнений.';
diff --git a/lib/plugins/extension/lang/tr/lang.php b/lib/plugins/extension/lang/tr/lang.php
index dfabfa715a63ee1b260a3f658bfb4a285ecf30e1..c90b7b1c5aec40cbe94e6f1836c25ca5fe5f4eaa 100644
--- a/lib/plugins/extension/lang/tr/lang.php
+++ b/lib/plugins/extension/lang/tr/lang.php
@@ -4,6 +4,7 @@
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * 
  * @author İlker R. Kapaç <irifat@gmail.com>
+ * @author Mete Cuma <mcumax@gmail.com>
  */
 $lang['menu']                  = 'Genişletme Yöneticisi';
 $lang['tab_plugins']           = 'KurulmuÅŸ Eklentiler';
@@ -44,7 +45,7 @@ $lang['available_version']     = 'Müsait sürüm:';
 $lang['compatible']            = 'Åžununla uyumlu:';
 $lang['depends']               = 'Şuna bağımlı';
 $lang['similar']               = 'Åžununla benzer';
-$lang['conflicts']             = 'Şununla çelişir';
+$lang['conflicts']             = 'Şununla çelişir:';
 $lang['donate']                = 'BeÄŸendiniz mi?';
 $lang['donate_action']         = 'Yazara bir kahve ısmarlayın!';
 $lang['repo_retry']            = 'Yeniden dene';
diff --git a/lib/plugins/extension/lang/zh-tw/lang.php b/lib/plugins/extension/lang/zh-tw/lang.php
index 79657ffeb4b8da326b5714fc9a311c8d47ad8cb9..c5b1e6dc58df836d0ddaa74fb4147d2c11a3d64d 100644
--- a/lib/plugins/extension/lang/zh-tw/lang.php
+++ b/lib/plugins/extension/lang/zh-tw/lang.php
@@ -6,6 +6,7 @@
  * @author Stan <talktostan@gmail.com>
  * @author June-Hao Hou <junehao@gmail.com>
  * @author lioujheyu <lioujheyu@gmail.com>
+ * @author Liou, Jhe-Yu <lioujheyu@gmail.com>
  */
 $lang['menu']                  = '延伸功能管理';
 $lang['tab_plugins']           = '已安裝外掛';
@@ -27,6 +28,9 @@ $lang['btn_disable']           = '停用';
 $lang['btn_install']           = '安裝';
 $lang['btn_reinstall']         = '重新安裝';
 $lang['js']['reallydel']       = '確定要移除此延伸功能?';
+$lang['js']['display_enabled'] = '啟用';
+$lang['js']['display_disabled'] = '禁用';
+$lang['js']['display_updatable'] = '可更新';
 $lang['search_for']            = '搜尋延伸功能:';
 $lang['search']                = '搜尋';
 $lang['homepage_link']         = '文件';
@@ -58,6 +62,7 @@ $lang['status_bundled']        = '已綑綁內附';
 $lang['msg_enabled']           = '外掛 %s 已啟用';
 $lang['msg_disabled']          = '外掛 %s 已禁用';
 $lang['msg_delete_success']    = '附加元件已移除';
+$lang['msg_delete_failed']     = '解除安裝 %s 失敗';
 $lang['msg_template_install_success'] = '模板 %s 以成功安裝';
 $lang['msg_template_update_success'] = '模板 %s 以成功更新';
 $lang['msg_plugin_install_success'] = '外掛 %s 以成功安裝';
@@ -69,6 +74,7 @@ $lang['security_warning']      = '<strong>安全問題警告:</strong> %s';
 $lang['update_available']      = '<strong>更新:</strong> 已可取得 %s 的新版本';
 $lang['wrong_folder']          = '<strong>外掛安裝不正確:</strong> 將外掛資料夾從 "%s" 更名至 "%s"。';
 $lang['url_change']            = '<strong>網址已變更:</strong> 自從上次下載後下載網址已變更。在更新延伸功能前請先檢查新網址是否可用。<br />新: %s<br />舊: %s';
+$lang['error_dircreate']       = '無法建立暫存目錄以接收下載檔案';
 $lang['error_download']        = '無法下載檔案:%s';
 $lang['error_decompress']      = '無法解壓縮檔案。這可能是下載品質不佳所致,在這個情況下你應該再試一次;也有可能是因為無法辨識的壓縮格式,在這個情況下你應該自行下載並手動安裝';
 $lang['error_findfolder']      = '無法辨認延伸功能資料夾,你必須自行下載並手動安裝';
diff --git a/lib/plugins/extension/lang/zh/lang.php b/lib/plugins/extension/lang/zh/lang.php
index 0264f3e9cf5a16baa1f89231a031bc300552cb0f..62d54c160b89c820def66ce3847d093549cf3b44 100644
--- a/lib/plugins/extension/lang/zh/lang.php
+++ b/lib/plugins/extension/lang/zh/lang.php
@@ -7,6 +7,7 @@
  * @author xiqingongzi <Xiqingongzi@Gmail.com>
  * @author qinghao <qingxianhao@gmail.com>
  * @author lainme <lainme993@gmail.com>
+ * @author Errol <errol@hotmail.com>
  */
 $lang['menu']                  = '扩展管理器';
 $lang['tab_plugins']           = '安装插件';
@@ -28,6 +29,10 @@ $lang['btn_disable']           = '关闭';
 $lang['btn_install']           = '安装';
 $lang['btn_reinstall']         = '重新安装';
 $lang['js']['reallydel']       = '确定卸载这个扩展么?';
+$lang['js']['display_viewoptions'] = '查看选项:';
+$lang['js']['display_enabled'] = '启用';
+$lang['js']['display_disabled'] = '禁用';
+$lang['js']['display_updatable'] = '可更新';
 $lang['search_for']            = '搜索扩展';
 $lang['search']                = '搜索';
 $lang['extensionby']           = '<strong>%s</strong> by %s';
@@ -65,6 +70,7 @@ $lang['status_bundled']        = '内建';
 $lang['msg_enabled']           = '插件 %s 已启用';
 $lang['msg_disabled']          = '插件 %s 已禁用';
 $lang['msg_delete_success']    = '插件已经卸载';
+$lang['msg_delete_failed']     = '卸载扩展 %s 失败';
 $lang['msg_template_install_success'] = '模板 %s 安装成功';
 $lang['msg_template_update_success'] = '模板 %s 更新成功';
 $lang['msg_plugin_install_success'] = '插件 %s 安装成功';
@@ -86,6 +92,8 @@ $lang['noperms']               = '扩展目录不可写';
 $lang['notplperms']            = '模板目录不可写';
 $lang['nopluginperms']         = '插件目录不可写';
 $lang['git']                   = '这个扩展是通过 git 安装的,您可能不想在这里升级它';
+$lang['auth']                  = '这个认证插件没有在配置中启用,请考虑禁用它。';
 $lang['install_url']           = '从 URL 安装:';
 $lang['install_upload']        = '上传扩展:';
 $lang['repo_error']            = '无法连接到插件仓库。请确定您的服务器可以连接 www.dokuwiki.org 并检查您的代理设置。';
+$lang['nossl']                 = '您的 PHP 似乎没有 SSL 支持。很多 Dokuwiki 扩展将无法下载。';
diff --git a/lib/plugins/extension/plugin.info.txt b/lib/plugins/extension/plugin.info.txt
index ee983062838443c151d08e76340cd2d530e2b7a3..7ee84dcc0630888434f3d1633e21e9e971418d44 100644
--- a/lib/plugins/extension/plugin.info.txt
+++ b/lib/plugins/extension/plugin.info.txt
@@ -1,7 +1,7 @@
 base   extension
 author Michael Hamann
 email  michael@content-space.de
-date   2014-06-15
+date   2015-07-26
 name   Extension Manager
 desc   Allows managing and installing plugins and templates
 url    https://www.dokuwiki.org/plugin:extension
diff --git a/lib/plugins/extension/script.js b/lib/plugins/extension/script.js
index fab88162d8c6c1f62e23bcb9e5745ffc326435ad..0c43de6ae97403f85f9cffb759ee84040751d734 100644
--- a/lib/plugins/extension/script.js
+++ b/lib/plugins/extension/script.js
@@ -5,7 +5,7 @@ jQuery(function(){
     /**
      * Confirm uninstalling
      */
-    $extmgr.find('input.uninstall').click(function(e){
+    $extmgr.find('button.uninstall').click(function(e){
         if(!window.confirm(LANG.plugins.extension.reallydel)){
             e.preventDefault();
             return false;
@@ -46,7 +46,7 @@ jQuery(function(){
     /**
      * Enable/Disable extension via AJAX
      */
-    $extmgr.find('input.disable, input.enable').click(function (e) {
+    $extmgr.find('button.disable, button.enable').click(function (e) {
         e.preventDefault();
         var $btn = jQuery(this);
 
@@ -110,4 +110,24 @@ jQuery(function(){
         );
     });
 
-});
\ No newline at end of file
+    /**
+        Create section for enabling/disabling viewing options
+     */
+    if ( $extmgr.find('.plugins, .templates').hasClass('active') ) {
+        var $extlist = jQuery('#extension__list');
+        $extlist.addClass('hasDisplayOptions');
+        var $displayOpts = jQuery('<p>', { id: 'extension__viewoptions'} ).appendTo($extmgr.find( '.panelHeader' ));
+
+        $displayOpts.append(LANG.plugins.extension.display_viewoptions);
+
+        var displayOptionsHandler = function(){
+            $extlist.toggleClass( this.name );
+        };
+
+        jQuery(['enabled', 'disabled', 'updatable']).each(function(index, chkName){
+            var $label = jQuery( '<label></label>' ).appendTo($displayOpts);
+            jQuery( '<input />', { type: 'checkbox', name: chkName }).change(displayOptionsHandler).appendTo($label).click();
+            jQuery( '<span/>' ).append(' '+LANG.plugins.extension['display_'+chkName]).appendTo($label);
+        });
+    }
+});
diff --git a/lib/plugins/extension/style.less b/lib/plugins/extension/style.less
index d206890995b7a62594b14f11dcd5af3d29401592..38e63205510c69499b78328389d789a6b0d4fa90 100644
--- a/lib/plugins/extension/style.less
+++ b/lib/plugins/extension/style.less
@@ -80,8 +80,8 @@
         overflow: hidden;
     }
 
-    input.button {
-        margin: 0 .3em .3em 0;
+    button {
+        margin-bottom: .3em;
     }
 }
 
@@ -171,6 +171,11 @@
             padding-left: 18px;
             background: transparent url(images/tag.png) no-repeat 0 0;
         }
+
+        a.bugs {
+            padding-left: 18px;
+            background: transparent url(images/bug.gif) no-repeat 0 0;
+        }
     }
 
     // more info button
@@ -281,6 +286,21 @@
  * Enabled/Disabled overrides
  */
 #extension__list {
+
+    &.hasDisplayOptions {
+        .enabled,
+        .disabled,
+        .updatable {
+            display: none;
+        }
+
+        &.enabled .enabled,
+        &.disabled .disabled,
+        &.updatable .updatable {
+            display: block;
+        }
+    }
+
     .enabled div.screenshot span {
         background: transparent url(images/enabled.png) no-repeat 2px 2px;
     }
@@ -361,3 +381,8 @@
     display: block;
     width: 60%;
 }
+
+#extension__viewoptions label {
+    margin-left: 1em;
+    vertical-align: baseline;
+}
diff --git a/lib/plugins/info/plugin.info.txt b/lib/plugins/info/plugin.info.txt
index 7773a419de5dd3aa4d23471e015250f1a0726b5b..3f05391f71d497bf8226ed5801ffe5233a0f2855 100644
--- a/lib/plugins/info/plugin.info.txt
+++ b/lib/plugins/info/plugin.info.txt
@@ -1,7 +1,7 @@
 base info
 author Andreas Gohr
 email andi@splitbrain.org
-date 2014-03-05
+date 2014-10-01
 name Info Plugin
 desc Displays information about various DokuWiki internals
 url http://dokuwiki.org/plugin:info
diff --git a/lib/plugins/popularity/action.php b/lib/plugins/popularity/action.php
index 9e2e78d11b55c84ee9992ea1adc8ee186a20c160..d5ec0f5c5d183efce736c9e8bcdbbd0206ebca23 100644
--- a/lib/plugins/popularity/action.php
+++ b/lib/plugins/popularity/action.php
@@ -15,7 +15,7 @@ class action_plugin_popularity extends Dokuwiki_Action_Plugin {
      */
     var $helper;
 
-    function action_plugin_popularity(){
+    function __construct(){
         $this->helper = $this->loadHelper('popularity', false);
     }
 
diff --git a/lib/plugins/popularity/admin.php b/lib/plugins/popularity/admin.php
index ab569b8b4bf7ad164ee05aabec710709060a1603..0cf174e0de7c20d8b197e4e240241b36bf0940e1 100644
--- a/lib/plugins/popularity/admin.php
+++ b/lib/plugins/popularity/admin.php
@@ -20,7 +20,7 @@ class admin_plugin_popularity extends DokuWiki_Admin_Plugin {
     var $helper;
     var $sentStatus = null;
 
-    function admin_plugin_popularity(){
+    function __construct(){
         $this->helper = $this->loadHelper('popularity', false);
     }
 
@@ -144,7 +144,7 @@ class admin_plugin_popularity extends DokuWiki_Admin_Plugin {
                 .'<input type="hidden" name="do" value="admin" />'
                 .'<input type="hidden" name="page" value="popularity" />';
         }
-        $form .= '<input type="submit" class="button" value="'.$this->getLang('submit').'"/>'
+        $form .= '<button type="submit">'.$this->getLang('submit').'</button>'
             .'</fieldset>'
             .'</form>';
         return $form;
diff --git a/lib/plugins/popularity/helper.php b/lib/plugins/popularity/helper.php
index 8673fb5aff830d5a3b21766660595c75665d0e60..27755b0ed3a02460da8ce033013653a77c344d58 100644
--- a/lib/plugins/popularity/helper.php
+++ b/lib/plugins/popularity/helper.php
@@ -30,7 +30,7 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
     var $popularityLastSubmitFile;
 
 
-    function helper_plugin_popularity(){
+    function __construct(){
         global $conf;
         $this->autosubmitFile = $conf['cachedir'].'/autosubmit.txt';
         $this->autosubmitErrorFile = $conf['cachedir'].'/autosubmitError.txt';
@@ -253,9 +253,26 @@ class helper_plugin_popularity extends Dokuwiki_Plugin {
         $data['php_exectime'] = $phptime;
         $data['php_extension'] = get_loaded_extensions();
 
+        // plugin usage data
+        $this->_add_plugin_usage_data($data);
+
         return $data;
     }
 
+    protected function _add_plugin_usage_data(&$data){
+        $pluginsData = array();
+        trigger_event('PLUGIN_POPULARITY_DATA_SETUP', $pluginsData);
+        foreach($pluginsData as $plugin => $d){
+           if ( is_array($d) ) {
+               foreach($d as $key => $value){
+                   $data['plugin_' . $plugin . '_' . $key] = $value;
+               }
+           } else {
+               $data['plugin_' . $plugin] = $d;
+           }
+        }
+    }
+
     /**
      * Callback to search and count the content of directories in DokuWiki
      *
diff --git a/lib/plugins/popularity/lang/ca/lang.php b/lib/plugins/popularity/lang/ca/lang.php
index b3084611837c42f2ec63a221c6654c0db9c07248..9eb1655d266fbca95494dd9fc505827eed73a997 100644
--- a/lib/plugins/popularity/lang/ca/lang.php
+++ b/lib/plugins/popularity/lang/ca/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Catalan language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Carles Bellver <carles.bellver@cent.uji.es>
  * @author Carles Bellver <carles.bellver@gmail.com>
  * @author carles.bellver@cent.uji.es
diff --git a/lib/plugins/popularity/lang/cy/intro.txt b/lib/plugins/popularity/lang/cy/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..187dfe0b77e78186a6b5d97460a59c9c762804d8
--- /dev/null
+++ b/lib/plugins/popularity/lang/cy/intro.txt
@@ -0,0 +1,11 @@
+====== Adborth Poblogrwydd ======
+
+Mae'r [[doku>popularity|teclyn]] hwn yn casglu data anhysbys am eich wici ac yn eich galluogi chi i'w anfon yn ôl i ddatblygwyr DokuWiki. Mae hwn yn eu helpu nhw i ddeall sut mae DokuWiki yn cael ei ddefnyddio gan ei ddefnyddwyr ac mae\'n sicrhau bod penderfyniadau datblygu yn y dyfodol yn cael eu cefnogi gan ystadegau defnydd go iawn.
+
+Cewch eich annog i ailadrodd y cam hwn o dro i dro er mwyn hysbysu datblygwyr wrth i'ch wici dyfu. Caiff eich setiau data eilfydd eu hadnabod gan ID anhysbys.
+
+Mae'r data sy'n cael ei gasglu yn cynnwys pethau fel fersiwn eich DokuWiki, nifer a maint eich tudalennau a'ch ffeiliau chi, ategion sydd wedi'u harsefydlu a gwybodaeth parthed eich arsefydliad PHP.
+
+Caiff y data crai i'w anfon ei ddangos isod. Pwyswch fotwm "Anfon Data" i drosglwyddo'r wybodaeth.
+
+
diff --git a/lib/plugins/popularity/lang/cy/lang.php b/lib/plugins/popularity/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7bee7bdf2a0d262a07a17487cb7d37f8c4463626
--- /dev/null
+++ b/lib/plugins/popularity/lang/cy/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+$lang['name']             = 'Adborth Poblogrwydd (gall gymryd ychydig o amser i lwytho)';
+$lang['submit']           = 'Anfon Data';
+$lang['autosubmit']       = 'Anfon data yn awtomatig unwaith y mis';
+$lang['submissionFailed'] = 'Doedd dim modd anfon y data oherwydd y gwall canlynol:';
+$lang['submitDirectly']   = 'Gallwch chi anfon y data gan law gan gyflwyno\'r ffurflen ganlynol.';
+$lang['autosubmitError']  = 'Methodd yr awtogyflwyniad diwethaf oherwydd y gwall canlynol: ';
+$lang['lastSent']         = 'Anfonwyd y data';
diff --git a/lib/plugins/popularity/lang/cy/submitted.txt b/lib/plugins/popularity/lang/cy/submitted.txt
new file mode 100644
index 0000000000000000000000000000000000000000..eb6fd815a7f6a1759d1ab0abd65494a0043f85d4
--- /dev/null
+++ b/lib/plugins/popularity/lang/cy/submitted.txt
@@ -0,0 +1,3 @@
+====== Adborth Poblogrwydd ======
+
+Cafodd y data ei anfon yn llwyddiannus.
diff --git a/lib/plugins/popularity/lang/ja/intro.txt b/lib/plugins/popularity/lang/ja/intro.txt
index 09886f418b973af7c1035cd2816f56286cd46b08..db9a342845d40b72f3fdebf343b0c3da387ffcd8 100644
--- a/lib/plugins/popularity/lang/ja/intro.txt
+++ b/lib/plugins/popularity/lang/ja/intro.txt
@@ -1,6 +1,6 @@
 ====== 利用状況調査 ======
 
-このツールは、ご利用中のwikiの情報を収集し、それをDokuWikiの開発者へ匿名で送信するものです。開発者はこのツールにより、DokuWikiが実際にどの様に利用されているかを理解し、そして実際の利用状況に基づいて今後の開発方針の決定することができます。
+この[[doku>ja:popularity|ツール]]は、ご利用中のwikiの情報を収集し、それをDokuWikiの開発者へ匿名で送信するものです。開発者はこのツールにより、DokuWikiが実際にどの様に利用されているかを理解し、そして実際の利用状況に基づいて今後の開発方針の決定することができます。
 
 お使いのwikiの規模が大きくなってきたときは、このステップを定期的に繰り返すことを推奨しています。また、送信されたデータは匿名のIDで識別されます。
 
diff --git a/lib/plugins/popularity/lang/ko/intro.txt b/lib/plugins/popularity/lang/ko/intro.txt
index bc9bb9dd0ec9c0faac8659c21468cbd9f2420fef..edc0f87332a3a83cf17b80f56699c6dd2a0a3a33 100644
--- a/lib/plugins/popularity/lang/ko/intro.txt
+++ b/lib/plugins/popularity/lang/ko/intro.txt
@@ -1,6 +1,6 @@
 ====== 인기도 조사 ======
 
-설치된 위키의 익명 정보를 도쿠위키 개발자에게 보냅니다. 이 [[doku>ko:popularity|도구]]는 도쿠위키가 실제 사용자에게 어떻게 사용되는지 도쿠위키 개발자에게 알려줌으로써 이 후 개발 시 참고가 됩니다.
+설치된 위키의 익명 정보를 도쿠위키 개발자에게 보냅니다. 이 [[doku>ko:popularity|도구]]는 도쿠위키가 실제 사용자에게 어떻게 사용되는지 도쿠위키 개발자에게 알려줌으로써 이 후 개발 시 참조가 됩니다.
 
 설치된 위키가 커짐에 따라서 이 과정을 반복할 필요가 있습니다. 반복된 데이터는 익명 ID로 구별되어집니다.
 
diff --git a/lib/plugins/popularity/lang/lt/lang.php b/lib/plugins/popularity/lang/lt/lang.php
index 88df29c50b7408b5867df74c1d56a6ad521e2159..dca350475379b025f11d63c9b3bc4cc523a7c248 100644
--- a/lib/plugins/popularity/lang/lt/lang.php
+++ b/lib/plugins/popularity/lang/lt/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Lithuanian language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author audrius.klevas@gmail.com
  * @author Arunas Vaitekunas <aras@fan.lt>
  */
diff --git a/lib/plugins/popularity/plugin.info.txt b/lib/plugins/popularity/plugin.info.txt
index eadfffaa09d5f04e82c73ec7841c31c901abe87c..8ffc136a167220bcf73b6809e88d755298af9835 100644
--- a/lib/plugins/popularity/plugin.info.txt
+++ b/lib/plugins/popularity/plugin.info.txt
@@ -1,7 +1,7 @@
 base    popularity
 author  Andreas Gohr
 email   andi@splitbrain.org
-date    2013-10-14
+date    2015-07-15
 name    Popularity Feedback Plugin
 desc    Send anonymous data about your wiki to the DokuWiki developers
 url     http://www.dokuwiki.org/plugin:popularity
diff --git a/lib/plugins/remote.php b/lib/plugins/remote.php
index a51f701fbf87e7158cbe3246c5d74934dbeb9767..47f954ee6034aa05d4b726a184ee9f9642e135e9 100644
--- a/lib/plugins/remote.php
+++ b/lib/plugins/remote.php
@@ -1,19 +1,30 @@
 <?php
 
+/**
+ * Class DokuWiki_Remote_Plugin
+ */
 abstract class DokuWiki_Remote_Plugin extends DokuWiki_Plugin {
 
     private  $api;
 
+    /**
+     * Constructor
+     */
     public function __construct() {
         $this->api = new RemoteAPI();
     }
 
     /**
+     * Get all available methods with remote access.
+     *
      * @abstract
-     * @return array Information to all provided methods. {@see RemoteAPI}.
+     * @return array Information about all provided methods. {@see RemoteAPI}.
      */
     public abstract function _getMethods();
 
+    /**
+     * @return RemoteAPI
+     */
     protected function getApi() {
         return $this->api;
     }
diff --git a/lib/plugins/revert/admin.php b/lib/plugins/revert/admin.php
index 88d8cd93d5a6b76e6ace6fa1c647410499581e08..1a03005857b815854247979b4d02e510ecf3851a 100644
--- a/lib/plugins/revert/admin.php
+++ b/lib/plugins/revert/admin.php
@@ -16,7 +16,7 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
     /**
      * Constructor
      */
-    function admin_plugin_revert(){
+    function __construct(){
         $this->setupLocale();
     }
 
@@ -64,9 +64,9 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
         global $lang, $INPUT;
         echo '<form action="" method="post"><div class="no">';
         echo '<label>'.$this->getLang('filter').': </label>';
-        echo '<input type="text" name="filter" class="edit" value="'.hsc($INPUT->str('filter')).'" />';
-        echo ' <input type="submit" class="button" value="'.$lang['btn_search'].'" />';
-        echo ' <span>'.$this->getLang('note1').'</span>';
+        echo '<input type="text" name="filter" class="edit" value="'.hsc($INPUT->str('filter')).'" /> ';
+        echo '<button type="submit">'.$lang['btn_search'].'</button> ';
+        echo '<span>'.$this->getLang('note1').'</span>';
         echo '</div></form><br /><br />';
     }
 
@@ -173,7 +173,7 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
         echo '</ul>';
 
         echo '<p>';
-        echo '<input type="submit" class="button" value="'.$this->getLang('revert').'" /> ';
+        echo '<button type="submit">'.$this->getLang('revert').'</button> ';
         printf($this->getLang('note2'),hsc($filter));
         echo '</p>';
 
diff --git a/lib/plugins/revert/lang/ca/lang.php b/lib/plugins/revert/lang/ca/lang.php
index 4f4d518ea134d45f03c04f88ec2ab9e6e484195e..e2755f8d3b879523b5b347abb0ba3a4473c3c36e 100644
--- a/lib/plugins/revert/lang/ca/lang.php
+++ b/lib/plugins/revert/lang/ca/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Catalan language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Carles Bellver <carles.bellver@gmail.com>
  * @author carles.bellver@gmail.com
  * @author carles.bellver@cent.uji.es
diff --git a/lib/plugins/revert/lang/cs/lang.php b/lib/plugins/revert/lang/cs/lang.php
index 619a9d929af2a2f6ce057af30baefe9a25649ef1..494750d5ef5f6113ab694cd69bdffa309ea12789 100644
--- a/lib/plugins/revert/lang/cs/lang.php
+++ b/lib/plugins/revert/lang/cs/lang.php
@@ -19,6 +19,7 @@
  * @author Radovan Buroň <radovan@buron.cz>
  * @author Viktor Zavadil <vzavadil@newps.cz>
  * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ * @author Turkislav <turkislav@blabla.com>
  */
 $lang['menu']                  = 'Obnova zaspamovaných stránek';
 $lang['filter']                = 'Hledat zaspamované stránky';
diff --git a/lib/plugins/revert/lang/cy/intro.txt b/lib/plugins/revert/lang/cy/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0e09bab09f452b13d00ea234316e32e581138b8f
--- /dev/null
+++ b/lib/plugins/revert/lang/cy/intro.txt
@@ -0,0 +1,3 @@
+====== Rheolwr Troi'n Ôl ======
+
+Mae'r dudalen hon yn eich helpu chi i droi'n ôl yn awtomatig yn dilyn ymosodiad sbam. Er mwyn darganfod rhestr o dudalennau sbamllyd, rhowch linyn chwilio (ee. URL sbamllyd), yna cadarnhewch fod y tudalennau a ddarganfuwyd wir yn sbamllyd a throwch y golygiadau'n ôl.
diff --git a/lib/plugins/revert/lang/cy/lang.php b/lib/plugins/revert/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce4f005c15130629a0fefc02bcc7eb2730aee2f4
--- /dev/null
+++ b/lib/plugins/revert/lang/cy/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * welsh language file
+ */
+
+// for admin plugins, the menu prompt to be displayed in the admin menu
+// if set here, the plugin doesn't need to override the getMenuText() method
+$lang['menu'] = 'Rheolwr Troi\'n Ôl';
+
+// custom language strings for the plugin
+
+$lang['filter']   = 'Chwilio tudalennau sbamllyd';
+$lang['revert']   = 'Troi tudalennau a ddewiswyd yn ôl';
+$lang['reverted'] = 'Trowyd %s yn ôl i adolygiad %s';
+$lang['removed']  = '%s wedi\'i dynnu';
+$lang['revstart'] = 'Mae\'r broses troi\'n ôl wedi dechrau. Gall hwn gymryd amser hir. Os yw\'r
+                     sgript yn bwrw\'r terfyn amser cyn gorffen, bydd angen troi\n ôl mewn dognau llai.';
+$lang['revstop']  = 'Gwnaeth y broses troi\'n ôl gwblhau\'n llwyddiannus.';
+$lang['note1']    = 'Sylw: mae\'r chwiliad yn sensitif i nodau uwch/is';
+$lang['note2']    = 'Sylw: caiff y dudalen ei throi\'n ôl i\'r fersiwn diwethaf sy ddim yn cynnwys y term sbamllyd <i>%s</i>.';
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/revert/lang/ko/lang.php b/lib/plugins/revert/lang/ko/lang.php
index df4b271b1302e1f22d9cd46775fdef94b80e44ba..263537203c6ce63e6e7bc6a387095658e11fbdbf 100644
--- a/lib/plugins/revert/lang/ko/lang.php
+++ b/lib/plugins/revert/lang/ko/lang.php
@@ -9,13 +9,16 @@
  * @author Seung-Chul Yoo <dryoo@live.com>
  * @author erial2@gmail.com
  * @author Myeongjin <aranet100@gmail.com>
+ * @author Erial <erial2@gmail.com>
  */
 $lang['menu']                  = '되돌리기 관리자';
 $lang['filter']                = '스팸 문서 검색';
 $lang['revert']                = '선택한 문서 되돌리기';
 $lang['reverted']              = '%s 판을 %s 판으로 되돌림';
 $lang['removed']               = '%s 제거됨';
-$lang['revstart']              = '되돌리기 작업을 시작합니다. 오랜 시간이 걸릴 수 있습니다. 완료되기 전에 스크립트 시간 초과가 발생한다면 더 작은 작업으로 나누어서 되돌리시기 바랍니다.';
+$lang['revstart']              = '되돌리기 작업을 시작합니다. 오랜 시간이 걸릴 수 있습니다. 완료되기 전에
+                     스크립트 시간 초과가 발생한다면 더 작은 작업으로 나누어서
+                     되돌리시기 바랍니다.';
 $lang['revstop']               = '되돌리기 작업이 성공적으로 끝났습니다.';
 $lang['note1']                 = '참고: 대소문자를 구별해 찾습니다';
 $lang['note2']                 = '참고: 문서는 <i>%s</i> 스팸 단어를 포함하지 않은 최신 판으로 되돌립니다.';
diff --git a/lib/plugins/revert/lang/no/lang.php b/lib/plugins/revert/lang/no/lang.php
index 76da8ca9cfe65d77dd7a482feafa94bdc45a7e79..d5307c7ca0972cdcd5f36710a3e6a40acb364ada 100644
--- a/lib/plugins/revert/lang/no/lang.php
+++ b/lib/plugins/revert/lang/no/lang.php
@@ -20,6 +20,7 @@
  * @author Boris <boris@newton-media.no>
  * @author Christopher Schive <chschive@frisurf.no>
  * @author Patrick <spill.p@hotmail.com>
+ * @author Danny Buckhof <daniel.raknes@hotmail.no>
  */
 $lang['menu']                  = 'Tilbakestillingsbehandler';
 $lang['filter']                = 'Søk etter søppelmeldinger';
diff --git a/lib/plugins/revert/plugin.info.txt b/lib/plugins/revert/plugin.info.txt
index 8d107dc3224f0c42be7288b01fcd6e1edb920812..bba939d3713ec60311ba83cf41c2dda2bb111712 100644
--- a/lib/plugins/revert/plugin.info.txt
+++ b/lib/plugins/revert/plugin.info.txt
@@ -1,7 +1,7 @@
 base   revert
 author Andreas Gohr
 email  andi@splitbrain.org
-date   2013-11-21
+date   2015-07-15
 name   Revert Manager
 desc   Allows you to mass revert recent edits to remove Spam or vandalism
 url    http://dokuwiki.org/plugin:revert
diff --git a/lib/plugins/styling/.travis.yml b/lib/plugins/styling/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..75ee0b152cfdd19356b7add7f6e8231a215f7677
--- /dev/null
+++ b/lib/plugins/styling/.travis.yml
@@ -0,0 +1,13 @@
+# Config file for travis-ci.org
+
+language: php
+php:
+  - "5.5"
+  - "5.4"
+  - "5.3"
+env:
+  - DOKUWIKI=master
+  - DOKUWIKI=stable
+before_install: wget https://raw.github.com/splitbrain/dokuwiki-travis/master/travis.sh
+install: sh travis.sh
+script: cd _test && phpunit --stderr --group plugin_styling
diff --git a/lib/plugins/styling/README b/lib/plugins/styling/README
new file mode 100644
index 0000000000000000000000000000000000000000..a1a5e890cfa237335a96f0d07c03801592db17ef
--- /dev/null
+++ b/lib/plugins/styling/README
@@ -0,0 +1,27 @@
+styling Plugin for DokuWiki
+
+Allows to edit style.ini replacements
+
+All documentation for this plugin can be found at
+https://www.dokuwiki.org/plugin:styling
+
+If you install this plugin manually, make sure it is installed in
+lib/plugins/styling/ - if the folder is called different it
+will not work!
+
+Please refer to http://www.dokuwiki.org/plugins for additional info
+on how to install plugins in DokuWiki.
+
+----
+Copyright (C) Andreas Gohr <andi@splitbrain.org>
+
+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; version 2 of the License
+
+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.
+
+See the COPYING file in your DokuWiki folder for details
diff --git a/lib/plugins/styling/_test/general.test.php b/lib/plugins/styling/_test/general.test.php
new file mode 100644
index 0000000000000000000000000000000000000000..1337f6f759e77f1d88b6a21165c2b3c60cb50030
--- /dev/null
+++ b/lib/plugins/styling/_test/general.test.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * General tests for the styling plugin
+ *
+ * @group plugin_styling
+ * @group plugins
+ */
+class general_plugin_styling_test extends DokuWikiTest {
+
+    /**
+     * Simple test to make sure the plugin.info.txt is in correct format
+     */
+    public function test_plugininfo() {
+        $file = __DIR__.'/../plugin.info.txt';
+        $this->assertFileExists($file);
+
+        $info = confToHash($file);
+
+        $this->assertArrayHasKey('base', $info);
+        $this->assertArrayHasKey('author', $info);
+        $this->assertArrayHasKey('email', $info);
+        $this->assertArrayHasKey('date', $info);
+        $this->assertArrayHasKey('name', $info);
+        $this->assertArrayHasKey('desc', $info);
+        $this->assertArrayHasKey('url', $info);
+
+        $this->assertEquals('styling', $info['base']);
+        $this->assertRegExp('/^https?:\/\//', $info['url']);
+        $this->assertTrue(mail_isvalid($info['email']));
+        $this->assertRegExp('/^\d\d\d\d-\d\d-\d\d$/', $info['date']);
+        $this->assertTrue(false !== strtotime($info['date']));
+    }
+}
diff --git a/lib/plugins/styling/action.php b/lib/plugins/styling/action.php
new file mode 100644
index 0000000000000000000000000000000000000000..896e14bef8ed60d137ea28591760688bfe30d236
--- /dev/null
+++ b/lib/plugins/styling/action.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * DokuWiki Plugin styling (Action Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author  Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+/**
+ * Class action_plugin_styling
+ *
+ * This handles all the save actions and loading the interface
+ *
+ * All this usually would be done within an admin plugin, but we want to have this available outside
+ * the admin interface using our floating dialog.
+ */
+class action_plugin_styling extends DokuWiki_Action_Plugin {
+
+    /**
+     * Registers a callback functions
+     *
+     * @param Doku_Event_Handler $controller DokuWiki's event controller object
+     * @return void
+     */
+    public function register(Doku_Event_Handler $controller) {
+        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'handle_header');
+    }
+
+    /**
+     * Adds the preview parameter to the stylesheet loading in non-js mode
+     *
+     * @param Doku_Event $event  event object by reference
+     * @param mixed      $param  [the parameters passed as fifth argument to register_hook() when this
+     *                           handler was registered]
+     * @return void
+     */
+    public function handle_header(Doku_Event &$event, $param) {
+        global $ACT;
+        global $INPUT;
+        if($ACT != 'admin' || $INPUT->str('page') != 'styling') return;
+        if(!auth_isadmin()) return;
+
+        // set preview
+        $len = count($event->data['link']);
+        for($i = 0; $i < $len; $i++) {
+            if(
+                $event->data['link'][$i]['rel'] == 'stylesheet' &&
+                strpos($event->data['link'][$i]['href'], 'lib/exe/css.php') !== false
+            ) {
+                $event->data['link'][$i]['href'] .= '&preview=1&tseed='.time();
+            }
+        }
+    }
+
+}
+
+// vim:ts=4:sw=4:et:
diff --git a/lib/plugins/styling/admin.php b/lib/plugins/styling/admin.php
new file mode 100644
index 0000000000000000000000000000000000000000..c747c3130e1c1d4cc609f3c5d855db1eda451d7b
--- /dev/null
+++ b/lib/plugins/styling/admin.php
@@ -0,0 +1,211 @@
+<?php
+/**
+ * DokuWiki Plugin styling (Admin Component)
+ *
+ * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
+ * @author  Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+class admin_plugin_styling extends DokuWiki_Admin_Plugin {
+
+    public $ispopup = false;
+
+    /**
+     * @return int sort number in admin menu
+     */
+    public function getMenuSort() {
+        return 1000;
+    }
+
+    /**
+     * @return bool true if only access for superuser, false is for superusers and moderators
+     */
+    public function forAdminOnly() {
+        return true;
+    }
+
+    /**
+     * handle the different actions (also called from ajax)
+     */
+    public function handle() {
+        global $INPUT;
+        $run = $INPUT->extract('run')->str('run');
+        if(!$run) return;
+        $run = "run_$run";
+        $this->$run();
+    }
+
+    /**
+     * Render HTML output, e.g. helpful text and a form
+     */
+    public function html() {
+        $class = 'nopopup';
+        if($this->ispopup) $class = 'ispopup page';
+
+        echo '<div id="plugin__styling" class="'.$class.'">';
+        ptln('<h1>'.$this->getLang('menu').'</h1>');
+        $this->form();
+        echo '</div>';
+    }
+
+    /**
+     * Create the actual editing form
+     */
+    public function form() {
+        global $conf;
+        global $ID;
+        define('SIMPLE_TEST', 1); // hack, ideally certain functions should be moved out of css.php
+        require_once(DOKU_INC.'lib/exe/css.php');
+        $styleini     = css_styleini($conf['template'], true);
+        $replacements = $styleini['replacements'];
+
+        if($this->ispopup) {
+            $target = DOKU_BASE.'lib/plugins/styling/popup.php';
+        } else {
+            $target = wl($ID, array('do' => 'admin', 'page' => 'styling'));
+        }
+
+        if(empty($replacements)) {
+            echo '<p class="error">'.$this->getLang('error').'</p>';
+        } else {
+            echo $this->locale_xhtml('intro');
+
+            echo '<form class="styling" method="post" action="'.$target.'">';
+
+            echo '<table><tbody>';
+            foreach($replacements as $key => $value) {
+                $name = tpl_getLang($key);
+                if(empty($name)) $name = $this->getLang($key);
+                if(empty($name)) $name = $key;
+
+                echo '<tr>';
+                echo '<td><label for="tpl__'.hsc($key).'">'.$name.'</label></td>';
+                echo '<td><input type="text" name="tpl['.hsc($key).']" id="tpl__'.hsc($key).'" value="'.hsc($value).'" '.$this->colorClass($key).' dir="ltr" /></td>';
+                echo '</tr>';
+            }
+            echo '</tbody></table>';
+
+            echo '<p>';
+            echo '<button type="submit" name="run[preview]" class="btn_preview primary">'.$this->getLang('btn_preview').'</button> ';
+            echo '<button type="submit" name="run[reset]">'.$this->getLang('btn_reset').'</button>'; #FIXME only if preview.ini exists
+            echo '</p>';
+
+            echo '<p>';
+            echo '<button type="submit" name="run[save]" class="primary">'.$this->getLang('btn_save').'</button>';
+            echo '</p>';
+
+            echo '<p>';
+            echo '<button type="submit" name="run[revert]">'.$this->getLang('btn_revert').'</button>'; #FIXME only if local.ini exists
+            echo '</p>';
+
+            echo '</form>';
+
+            echo tpl_locale_xhtml('style');
+
+        }
+    }
+
+    /**
+     * set the color class attribute
+     */
+    protected function colorClass($key) {
+        static $colors = array(
+            'text',
+            'background',
+            'text_alt',
+            'background_alt',
+            'text_neu',
+            'background_neu',
+            'border',
+            'highlight',
+            'background_site',
+            'link',
+            'existing',
+            'missing',
+        );
+
+        if(preg_match('/colou?r/', $key) || in_array(trim($key,'_'), $colors)) {
+            return 'class="color"';
+        } else {
+            return '';
+        }
+    }
+
+    /**
+     * saves the preview.ini (alos called from ajax directly)
+     */
+    public function run_preview() {
+        global $conf;
+        $ini = $conf['cachedir'].'/preview.ini';
+        io_saveFile($ini, $this->makeini());
+    }
+
+    /**
+     * deletes the preview.ini
+     */
+    protected function run_reset() {
+        global $conf;
+        $ini = $conf['cachedir'].'/preview.ini';
+        io_saveFile($ini, '');
+    }
+
+    /**
+     * deletes the local style.ini replacements
+     */
+    protected function run_revert() {
+        $this->replaceini('');
+        $this->run_reset();
+    }
+
+    /**
+     * save the local style.ini replacements
+     */
+    protected function run_save() {
+        $this->replaceini($this->makeini());
+        $this->run_reset();
+    }
+
+    /**
+     * create the replacement part of a style.ini from submitted data
+     *
+     * @return string
+     */
+    protected function makeini() {
+        global $INPUT;
+
+        $ini = "[replacements]\n";
+        $ini .= ";These overwrites have been generated from the Template styling Admin interface\n";
+        $ini .= ";Any values in this section will be overwritten by that tool again\n";
+        foreach($INPUT->arr('tpl') as $key => $val) {
+            $ini .= $key.' = "'.addslashes($val).'"'."\n";
+        }
+
+        return $ini;
+    }
+
+    /**
+     * replaces the replacement parts in the local ini
+     *
+     * @param string $new the new ini contents
+     */
+    protected function replaceini($new) {
+        global $conf;
+        $ini = DOKU_CONF."tpl/".$conf['template']."/style.ini";
+        if(file_exists($ini)) {
+            $old = io_readFile($ini);
+            $old = preg_replace('/\[replacements\]\n.*?(\n\[.*]|$)/s', '\\1', $old);
+            $old = trim($old);
+        } else {
+            $old = '';
+        }
+
+        io_makeFileDir($ini);
+        io_saveFile($ini, "$old\n\n$new");
+    }
+
+}
+
+// vim:ts=4:sw=4:et:
diff --git a/lib/plugins/styling/iris.js b/lib/plugins/styling/iris.js
new file mode 100644
index 0000000000000000000000000000000000000000..4eda5022e3577ec57b448dc0e97e8ab2be6186d4
--- /dev/null
+++ b/lib/plugins/styling/iris.js
@@ -0,0 +1,1488 @@
+/*! Iris Color Picker - v1.0.7 - 2014-11-28
+* https://github.com/Automattic/Iris
+* Copyright (c) 2014 Matt Wiebe; Licensed GPLv2 */
+(function( $, undef ){
+	var _html, nonGradientIE, gradientType, vendorPrefixes, _css, Iris, UA, isIE, IEVersion;
+
+	_html = '<div class="iris-picker"><div class="iris-picker-inner"><div class="iris-square"><a class="iris-square-value" href="#"><span class="iris-square-handle ui-slider-handle"></span></a><div class="iris-square-inner iris-square-horiz"></div><div class="iris-square-inner iris-square-vert"></div></div><div class="iris-slider iris-strip"><div class="iris-slider-offset"></div></div></div></div>';
+	_css = '.iris-picker{display:block;position:relative}.iris-picker,.iris-picker *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input+.iris-picker{margin-top:4px}.iris-error{background-color:#ffafaf}.iris-border{border-radius:3px;border:1px solid #aaa;width:200px;background-color:#fff}.iris-picker-inner{position:absolute;top:0;right:0;left:0;bottom:0}.iris-border .iris-picker-inner{top:10px;right:10px;left:10px;bottom:10px}.iris-picker .iris-square-inner{position:absolute;left:0;right:0;top:0;bottom:0}.iris-picker .iris-square,.iris-picker .iris-slider,.iris-picker .iris-square-inner,.iris-picker .iris-palette{border-radius:3px;box-shadow:inset 0 0 5px rgba(0,0,0,.4);height:100%;width:12.5%;float:left;margin-right:5%}.iris-picker .iris-square{width:76%;margin-right:10%;position:relative}.iris-picker .iris-square-inner{width:auto;margin:0}.iris-ie-9 .iris-square,.iris-ie-9 .iris-slider,.iris-ie-9 .iris-square-inner,.iris-ie-9 .iris-palette{box-shadow:none;border-radius:0}.iris-ie-9 .iris-square,.iris-ie-9 .iris-slider,.iris-ie-9 .iris-palette{outline:1px solid rgba(0,0,0,.1)}.iris-ie-lt9 .iris-square,.iris-ie-lt9 .iris-slider,.iris-ie-lt9 .iris-square-inner,.iris-ie-lt9 .iris-palette{outline:1px solid #aaa}.iris-ie-lt9 .iris-square .ui-slider-handle{outline:1px solid #aaa;background-color:#fff;-ms-filter:"alpha(Opacity=30)"}.iris-ie-lt9 .iris-square .iris-square-handle{background:0;border:3px solid #fff;-ms-filter:"alpha(Opacity=50)"}.iris-picker .iris-strip{margin-right:0;position:relative}.iris-picker .iris-strip .ui-slider-handle{position:absolute;background:0;margin:0;right:-3px;left:-3px;border:4px solid #aaa;border-width:4px 3px;width:auto;height:6px;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);opacity:.9;z-index:5;cursor:ns-resize}.iris-strip .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.iris-picker .iris-slider-offset{position:absolute;top:11px;left:0;right:0;bottom:-3px;width:auto;height:auto;background:transparent;border:0;border-radius:0}.iris-picker .iris-square-handle{background:transparent;border:5px solid #aaa;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.iris-picker .iris-square-handle:hover{border-color:#999}.iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.iris-picker .iris-square-handle:hover::after{border-color:#fff}.iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.iris-picker .iris-square-value{width:8px;height:8px;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.iris-palette-container{position:absolute;bottom:0;left:0;margin:0;padding:0}.iris-border .iris-palette-container{left:10px;bottom:10px}.iris-picker .iris-palette{margin:0;cursor:pointer}.iris-square-handle,.ui-slider-handle{border:0;outline:0}';
+
+	// Even IE9 dosen't support gradients. Elaborate sigh.
+	UA = navigator.userAgent.toLowerCase();
+	isIE = navigator.appName === 'Microsoft Internet Explorer';
+	IEVersion = isIE ? parseFloat( UA.match( /msie ([0-9]{1,}[\.0-9]{0,})/ )[1] ) : 0;
+	nonGradientIE = ( isIE && IEVersion < 10 );
+	gradientType = false;
+
+	// we don't bother with an unprefixed version, as it has a different syntax
+	vendorPrefixes = [ '-moz-', '-webkit-', '-o-', '-ms-' ];
+
+	// Bail for IE <= 7
+	if ( nonGradientIE && IEVersion <= 7 ) {
+		$.fn.iris = $.noop;
+		$.support.iris = false;
+		return;
+	}
+
+	$.support.iris = true;
+
+	function testGradientType() {
+		var el, base,
+			bgImageString = 'backgroundImage';
+
+		if ( nonGradientIE ) {
+			gradientType = 'filter';
+		}
+		else {
+			el = $( '<div id="iris-gradtest" />' );
+			base = 'linear-gradient(top,#fff,#000)';
+			$.each( vendorPrefixes, function( i, val ){
+				el.css( bgImageString, val + base );
+				if ( el.css( bgImageString ).match( 'gradient' ) ) {
+					gradientType = i;
+					return false;
+				}
+			});
+			// check for legacy webkit gradient syntax
+			if ( gradientType === false ) {
+				el.css( 'background', '-webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#000))' );
+				if ( el.css( bgImageString ).match( 'gradient' ) ) {
+					gradientType = 'webkit';
+				}
+			}
+			el.remove();
+		}
+
+	}
+
+	/**
+	* Only for CSS3 gradients. oldIE will use a separate function.
+	*
+	* Accepts as many color stops as necessary from 2nd arg on, or 2nd
+	* arg can be an array of color stops
+	*
+	* @param  {string} origin Gradient origin - top or left, defaults to left.
+	* @return {string}        Appropriate CSS3 gradient string for use in
+	*/
+	function createGradient( origin, stops ) {
+		origin = ( origin === 'top' ) ? 'top' : 'left';
+		stops = $.isArray( stops ) ? stops : Array.prototype.slice.call( arguments, 1 );
+		if ( gradientType === 'webkit' ) {
+			return legacyWebkitGradient( origin, stops );
+		} else {
+			return vendorPrefixes[ gradientType ] + 'linear-gradient(' + origin + ', ' + stops.join(', ') + ')';
+		}
+	}
+
+	/**
+	* Stupid gradients for a stupid browser.
+	*/
+	function stupidIEGradient( origin, stops ) {
+		var type, self, lastIndex, filter, startPosProp, endPosProp, dimensionProp, template, html;
+
+		origin = ( origin === 'top' ) ? 'top' : 'left';
+		stops = $.isArray( stops ) ? stops : Array.prototype.slice.call( arguments, 1 );
+		// 8 hex: AARRGGBB
+		// GradientType: 0 vertical, 1 horizontal
+		type = ( origin === 'top' ) ? 0 : 1;
+		self = $( this );
+		lastIndex = stops.length - 1;
+		filter = 'filter';
+		startPosProp = ( type === 1 ) ? 'left' : 'top';
+		endPosProp = ( type === 1 ) ? 'right' : 'bottom';
+		dimensionProp = ( type === 1 ) ? 'height' : 'width';
+		template = '<div class="iris-ie-gradient-shim" style="position:absolute;' + dimensionProp + ':100%;' + startPosProp + ':%start%;' + endPosProp + ':%end%;' + filter + ':%filter%;" data-color:"%color%"></div>';
+		html = '';
+		// need a positioning context
+		if ( self.css('position') === 'static' ) {
+			self.css( {position: 'relative' } );
+		}
+
+		stops = fillColorStops( stops );
+		$.each(stops, function( i, startColor ) {
+			var endColor, endStop, filterVal;
+
+			// we want two at a time. if we're on the last pair, bail.
+			if ( i === lastIndex ) {
+				return false;
+			}
+
+			endColor = stops[ i + 1 ];
+			//if our pairs are at the same color stop, moving along.
+			if ( startColor.stop === endColor.stop ) {
+				return;
+			}
+
+			endStop = 100 - parseFloat( endColor.stop ) + '%';
+			startColor.octoHex = new Color( startColor.color ).toIEOctoHex();
+			endColor.octoHex = new Color( endColor.color ).toIEOctoHex();
+
+			filterVal = 'progid:DXImageTransform.Microsoft.Gradient(GradientType=' + type + ', StartColorStr=\'' + startColor.octoHex + '\', EndColorStr=\'' + endColor.octoHex + '\')';
+			html += template.replace( '%start%', startColor.stop ).replace( '%end%', endStop ).replace( '%filter%', filterVal );
+		});
+		self.find( '.iris-ie-gradient-shim' ).remove();
+		$( html ).prependTo( self );
+	}
+
+	function legacyWebkitGradient( origin, colorList ) {
+		var stops = [];
+		origin = ( origin === 'top' ) ? '0% 0%,0% 100%,' : '0% 100%,100% 100%,';
+		colorList = fillColorStops( colorList );
+		$.each( colorList, function( i, val ){
+			stops.push( 'color-stop(' + ( parseFloat( val.stop ) / 100 ) + ', ' + val.color + ')' );
+		});
+		return '-webkit-gradient(linear,' + origin + stops.join(',') + ')';
+	}
+
+	function fillColorStops( colorList ) {
+		var colors = [],
+			percs = [],
+			newColorList = [],
+			lastIndex = colorList.length - 1;
+
+		$.each( colorList, function( index, val ) {
+			var color = val,
+				perc = false,
+				match = val.match( /1?[0-9]{1,2}%$/ );
+
+			if ( match ) {
+				color = val.replace( /\s?1?[0-9]{1,2}%$/, '' );
+				perc = match.shift();
+			}
+			colors.push( color );
+			percs.push( perc );
+		});
+
+		// back fill first and last
+		if ( percs[0] === false ) {
+			percs[0] = '0%';
+		}
+
+		if ( percs[lastIndex] === false ) {
+			percs[lastIndex] = '100%';
+		}
+
+		percs = backFillColorStops( percs );
+
+		$.each( percs, function( i ){
+			newColorList[i] = { color: colors[i], stop: percs[i] };
+		});
+		return newColorList;
+	}
+
+	function backFillColorStops( stops ) {
+		var first = 0,
+			last = stops.length - 1,
+			i = 0,
+			foundFirst = false,
+			incr,
+			steps,
+			step,
+			firstVal;
+
+		if ( stops.length <= 2 || $.inArray( false, stops ) < 0 ) {
+			return stops;
+		}
+		while ( i < stops.length - 1 ) {
+			if ( ! foundFirst && stops[i] === false ) {
+				first = i - 1;
+				foundFirst = true;
+			} else if ( foundFirst && stops[i] !== false ) {
+				last = i;
+				i = stops.length;
+			}
+			i++;
+		}
+		steps = last - first;
+		firstVal = parseInt( stops[first].replace('%'), 10 );
+		incr = ( parseFloat( stops[last].replace('%') ) - firstVal ) / steps;
+		i = first + 1;
+		step = 1;
+		while ( i < last ) {
+			stops[i] = ( firstVal + ( step * incr ) ) + '%';
+			step++;
+			i++;
+		}
+		return backFillColorStops( stops );
+	}
+
+	$.fn.gradient = function() {
+		var args = arguments;
+		return this.each( function() {
+			// this'll be oldishIE
+			if ( nonGradientIE ) {
+				stupidIEGradient.apply( this, args );
+			} else {
+				// new hotness
+				$( this ).css( 'backgroundImage', createGradient.apply( this, args ) );
+			}
+		});
+	};
+
+	$.fn.raninbowGradient = function( origin, args ) {
+		var opts, template, i, steps;
+
+		origin = origin || 'top';
+		opts = $.extend( {}, { s: 100, l: 50 }, args );
+		template = 'hsl(%h%,' + opts.s + '%,' + opts.l + '%)';
+		i = 0;
+		steps = [];
+		while ( i <= 360 ) {
+			steps.push( template.replace('%h%', i) );
+			i += 30;
+		}
+		return this.each(function() {
+			$(this).gradient( origin, steps );
+		});
+	};
+
+	// the colorpicker widget def.
+	Iris = {
+		options: {
+			color: false,
+			mode: 'hsl',
+			controls: {
+				horiz: 's', // horizontal defaults to saturation
+				vert: 'l', // vertical defaults to lightness
+				strip: 'h' // right strip defaults to hue
+			},
+			hide: true, // hide the color picker by default
+			border: true, // draw a border around the collection of UI elements
+			target: false, // a DOM element / jQuery selector that the element will be appended within. Only used when called on an input.
+			width: 200, // the width of the collection of UI elements
+			palettes: false // show a palette of basic colors beneath the square.
+		},
+		_color: '',
+		_palettes: [ '#000', '#fff', '#d33', '#d93', '#ee2', '#81d742', '#1e73be', '#8224e3' ],
+		_inited: false,
+		_defaultHSLControls: {
+			horiz: 's',
+			vert: 'l',
+			strip: 'h'
+		},
+		_defaultHSVControls: {
+			horiz: 'h',
+			vert: 'v',
+			strip: 's'
+		},
+		_scale: {
+			h: 360,
+			s: 100,
+			l: 100,
+			v: 100
+		},
+		_create: function() {
+			var self = this,
+				el = self.element,
+				color = self.options.color || el.val();
+
+			if ( gradientType === false ) {
+				testGradientType();
+			}
+
+			if ( el.is( 'input' ) ) {
+				if ( self.options.target ) {
+					self.picker = $( _html ).appendTo( self.options.target );
+				} else {
+					self.picker = $( _html ).insertAfter( el );
+				}
+
+				self._addInputListeners( el );
+			} else {
+				el.append( _html );
+				self.picker = el.find( '.iris-picker' );
+			}
+
+			// Browsers / Versions
+			// Feature detection doesn't work for these, and $.browser is deprecated
+			if ( isIE ) {
+				if ( IEVersion === 9 ) {
+					self.picker.addClass( 'iris-ie-9' );
+				} else if ( IEVersion <= 8 ) {
+					self.picker.addClass( 'iris-ie-lt9' );
+				}
+			} else if ( UA.indexOf('compatible') < 0 && UA.indexOf('khtml') < 0 && UA.match( /mozilla/ ) ) {
+				self.picker.addClass( 'iris-mozilla' );
+			}
+
+			if ( self.options.palettes ) {
+				self._addPalettes();
+			}
+
+			self._color = new Color( color ).setHSpace( self.options.mode );
+			self.options.color = self._color.toString();
+
+			// prep 'em for re-use
+			self.controls = {
+				square:      self.picker.find( '.iris-square' ),
+				squareDrag:  self.picker.find( '.iris-square-value' ),
+				horiz:       self.picker.find( '.iris-square-horiz' ),
+				vert:        self.picker.find( '.iris-square-vert' ),
+				strip:       self.picker.find( '.iris-strip' ),
+				stripSlider: self.picker.find( '.iris-strip .iris-slider-offset' )
+			};
+
+			// small sanity check - if we chose hsv, change default controls away from hsl
+			if ( self.options.mode === 'hsv' && self._has('l', self.options.controls) ) {
+				self.options.controls = self._defaultHSVControls;
+			} else if ( self.options.mode === 'hsl' && self._has('v', self.options.controls) ) {
+				self.options.controls = self._defaultHSLControls;
+			}
+
+			// store it. HSL gets squirrely
+			self.hue = self._color.h();
+
+			if ( self.options.hide ) {
+				self.picker.hide();
+			}
+
+			if ( self.options.border ) {
+				self.picker.addClass( 'iris-border' );
+			}
+
+			self._initControls();
+			self.active = 'external';
+			self._dimensions();
+			self._change();
+		},
+		_has: function(needle, haystack) {
+			var ret = false;
+			$.each(haystack, function(i,v){
+				if ( needle === v ) {
+					ret = true;
+					// exit the loop
+					return false;
+				}
+			});
+			return ret;
+		},
+		_addPalettes: function () {
+			var container = $( '<div class="iris-palette-container" />' ),
+				palette = $( '<a class="iris-palette" tabindex="0" />' ),
+				colors = $.isArray( this.options.palettes ) ? this.options.palettes : this._palettes;
+
+			// do we have an existing container? Empty and reuse it.
+			if ( this.picker.find( '.iris-palette-container' ).length ) {
+				container = this.picker.find( '.iris-palette-container' ).detach().html( '' );
+			}
+
+			$.each(colors, function(index, val) {
+				palette.clone().data( 'color', val )
+					.css( 'backgroundColor', val ).appendTo( container )
+					.height( 10 ).width( 10 );
+			});
+
+			this.picker.append(container);
+		},
+		_paint: function() {
+			var self = this;
+			self._paintDimension( 'top', 'strip' );
+			self._paintDimension( 'top', 'vert' );
+			self._paintDimension( 'left', 'horiz' );
+		},
+		_paintDimension: function( origin, control ) {
+			var self = this,
+				c = self._color,
+				mode = self.options.mode,
+				color = self._getHSpaceColor(),
+				target = self.controls[ control ],
+				controlOpts = self.options.controls,
+				stops;
+
+			// don't paint the active control
+			if ( control === self.active || ( self.active === 'square' && control !== 'strip' ) ) {
+				return;
+			}
+
+			switch ( controlOpts[ control ] ) {
+				case 'h':
+					if ( mode === 'hsv' ) {
+						color = c.clone();
+						switch ( control ) {
+							case 'horiz':
+								color[controlOpts.vert](100);
+								break;
+							case 'vert':
+								color[controlOpts.horiz](100);
+								break;
+							case 'strip':
+								color.setHSpace('hsl');
+								break;
+						}
+						stops = color.toHsl();
+					} else {
+						if ( control === 'strip' ) {
+							stops = { s: color.s, l: color.l };
+						} else {
+							stops = { s: 100, l: color.l };
+						}
+					}
+
+					target.raninbowGradient( origin, stops );
+					break;
+				case 's':
+					if ( mode === 'hsv' ) {
+						if ( control === 'vert' ) {
+							stops = [ c.clone().a(0).s(0).toCSS('rgba'), c.clone().a(1).s(0).toCSS('rgba') ];
+						} else if ( control === 'strip' ) {
+							stops = [ c.clone().s(100).toCSS('hsl'), c.clone().s(0).toCSS('hsl') ];
+						} else if ( control === 'horiz' ) {
+							stops = [ '#fff', 'hsl(' + color.h + ',100%,50%)' ];
+						}
+					} else { // implicit mode === 'hsl'
+						if ( control === 'vert' && self.options.controls.horiz === 'h' ) {
+							stops = ['hsla(0, 0%, ' + color.l + '%, 0)', 'hsla(0, 0%, ' + color.l + '%, 1)'];
+						} else {
+							stops = ['hsl('+ color.h +',0%,50%)', 'hsl(' + color.h + ',100%,50%)'];
+						}
+					}
+
+
+					target.gradient( origin, stops );
+					break;
+				case 'l':
+					if ( control === 'strip' ) {
+						stops = ['hsl(' + color.h + ',100%,100%)', 'hsl(' + color.h + ', ' + color.s + '%,50%)', 'hsl('+ color.h +',100%,0%)'];
+					} else {
+						stops = ['#fff', 'rgba(255,255,255,0) 50%', 'rgba(0,0,0,0) 50%', 'rgba(0,0,0,1)'];
+					}
+					target.gradient( origin, stops );
+					break;
+				case 'v':
+						if ( control === 'strip' ) {
+							stops = [ c.clone().v(100).toCSS(), c.clone().v(0).toCSS() ];
+						} else {
+							stops = ['rgba(0,0,0,0)', '#000'];
+						}
+						target.gradient( origin, stops );
+					break;
+				default:
+					break;
+			}
+		},
+
+		_getHSpaceColor: function() {
+			return ( this.options.mode === 'hsv' ) ? this._color.toHsv() : this._color.toHsl();
+		},
+
+		_dimensions: function( reset ) {
+			// whatever size
+			var self = this,
+				opts = self.options,
+				controls = self.controls,
+				square = controls.square,
+				strip = self.picker.find( '.iris-strip' ),
+				squareWidth = '77.5%',
+				stripWidth = '12%',
+				totalPadding = 20,
+				innerWidth = opts.border ? opts.width - totalPadding : opts.width,
+				controlsHeight,
+				paletteCount = $.isArray( opts.palettes ) ? opts.palettes.length : self._palettes.length,
+				paletteMargin, paletteWidth, paletteContainerWidth;
+
+			if ( reset ) {
+				square.css( 'width', '' );
+				strip.css( 'width', '' );
+				self.picker.css( {width: '', height: ''} );
+			}
+
+			squareWidth = innerWidth * ( parseFloat( squareWidth ) / 100 );
+			stripWidth = innerWidth * ( parseFloat( stripWidth ) / 100 );
+			controlsHeight = opts.border ? squareWidth + totalPadding : squareWidth;
+
+			square.width( squareWidth ).height( squareWidth );
+			strip.height( squareWidth ).width( stripWidth );
+			self.picker.css( { width: opts.width, height: controlsHeight } );
+
+			if ( ! opts.palettes ) {
+				return self.picker.css( 'paddingBottom', '' );
+			}
+
+			// single margin at 2%
+			paletteMargin = squareWidth * 2 / 100;
+			paletteContainerWidth = squareWidth - ( ( paletteCount - 1 ) * paletteMargin );
+			paletteWidth = paletteContainerWidth / paletteCount;
+			self.picker.find('.iris-palette').each( function( i ) {
+				var margin = i === 0 ? 0 : paletteMargin;
+				$( this ).css({
+					width: paletteWidth,
+					height: paletteWidth,
+					marginLeft: margin
+				});
+			});
+			self.picker.css( 'paddingBottom', paletteWidth + paletteMargin );
+			strip.height( paletteWidth + paletteMargin + squareWidth );
+		},
+
+		_addInputListeners: function( input ) {
+			var self = this,
+				debounceTimeout = 100,
+				callback = function( event ){
+					var color = new Color( input.val() ),
+						val = input.val().replace( /^#/, '' );
+
+					input.removeClass( 'iris-error' );
+					// we gave a bad color
+					if ( color.error ) {
+						// don't error on an empty input - we want those allowed
+						if ( val !== '' ) {
+							input.addClass( 'iris-error' );
+						}
+					} else {
+						if ( color.toString() !== self._color.toString() ) {
+							// let's not do this on keyup for hex shortcodes
+							if ( ! ( event.type === 'keyup' && val.match( /^[0-9a-fA-F]{3}$/ ) ) ) {
+								self._setOption( 'color', color.toString() );
+							}
+						}
+					}
+				};
+
+			input.on( 'change', callback ).on( 'keyup', self._debounce( callback, debounceTimeout ) );
+
+			// If we initialized hidden, show on first focus. The rest is up to you.
+			if ( self.options.hide ) {
+				input.one( 'focus', function() {
+					self.show();
+				});
+			}
+		},
+
+		_initControls: function() {
+			var self = this,
+				controls = self.controls,
+				square = controls.square,
+				controlOpts = self.options.controls,
+				stripScale = self._scale[controlOpts.strip];
+
+			controls.stripSlider.slider({
+				orientation: 'vertical',
+				max: stripScale,
+				slide: function( event, ui ) {
+					self.active = 'strip';
+					// "reverse" for hue.
+					if ( controlOpts.strip === 'h' ) {
+						ui.value = stripScale - ui.value;
+					}
+
+					self._color[controlOpts.strip]( ui.value );
+					self._change.apply( self, arguments );
+				}
+			});
+
+			controls.squareDrag.draggable({
+				containment: controls.square.find( '.iris-square-inner' ),
+				zIndex: 1000,
+				cursor: 'move',
+				drag: function( event, ui ) {
+					self._squareDrag( event, ui );
+				},
+				start: function() {
+					square.addClass( 'iris-dragging' );
+					$(this).addClass( 'ui-state-focus' );
+				},
+				stop: function() {
+					square.removeClass( 'iris-dragging' );
+					$(this).removeClass( 'ui-state-focus' );
+				}
+			}).on( 'mousedown mouseup', function( event ) {
+				var focusClass = 'ui-state-focus';
+				event.preventDefault();
+				if (event.type === 'mousedown' ) {
+					self.picker.find( '.' + focusClass ).removeClass( focusClass ).blur();
+					$(this).addClass( focusClass ).focus();
+				} else {
+					$(this).removeClass( focusClass );
+				}
+			}).on( 'keydown', function( event ) {
+				var container = controls.square,
+					draggable = controls.squareDrag,
+					position = draggable.position(),
+					distance = self.options.width / 100; // Distance in pixels the draggable should be moved: 1 "stop"
+
+				// make alt key go "10"
+				if ( event.altKey ) {
+					distance *= 10;
+				}
+
+				// Reposition if one of the directional keys is pressed
+				switch ( event.keyCode ) {
+					case 37: position.left -= distance; break; // Left
+					case 38: position.top  -= distance; break; // Up
+					case 39: position.left += distance; break; // Right
+					case 40: position.top  += distance; break; // Down
+					default: return true; // Exit and bubble
+				}
+
+				// Keep draggable within container
+				position.left = Math.max( 0, Math.min( position.left, container.width() ) );
+				position.top =  Math.max( 0, Math.min( position.top, container.height() ) );
+
+				draggable.css(position);
+				self._squareDrag( event, { position: position });
+				event.preventDefault();
+			});
+
+			// allow clicking on the square to move there and keep dragging
+			square.mousedown( function( event ) {
+				var squareOffset, pos;
+				// only left click
+				if ( event.which !== 1 ) {
+					return;
+				}
+
+				// prevent bubbling from the handle: no infinite loops
+				if ( ! $( event.target ).is( 'div' ) ) {
+					return;
+				}
+
+				squareOffset = self.controls.square.offset();
+				pos = {
+						top: event.pageY - squareOffset.top,
+						left: event.pageX - squareOffset.left
+				};
+				event.preventDefault();
+				self._squareDrag( event, { position: pos } );
+				event.target = self.controls.squareDrag.get(0);
+				self.controls.squareDrag.css( pos ).trigger( event );
+			});
+
+			// palettes
+			if ( self.options.palettes ) {
+				self._paletteListeners();
+			}
+		},
+
+		_paletteListeners: function() {
+			var self = this;
+			self.picker.find('.iris-palette-container').on('click.palette', '.iris-palette', function() {
+				self._color.fromCSS( $(this).data('color') );
+				self.active = 'external';
+				self._change();
+			}).on( 'keydown.palette', '.iris-palette', function( event ) {
+				if ( ! ( event.keyCode === 13 || event.keyCode === 32 ) ) {
+					return true;
+				}
+				event.stopPropagation();
+				$( this ).click();
+			});
+		},
+
+		_squareDrag: function( event, ui ) {
+			var self = this,
+				controlOpts = self.options.controls,
+				dimensions = self._squareDimensions(),
+				vertVal = Math.round( ( dimensions.h - ui.position.top ) / dimensions.h * self._scale[controlOpts.vert] ),
+				horizVal = self._scale[controlOpts.horiz] - Math.round( ( dimensions.w - ui.position.left ) / dimensions.w * self._scale[controlOpts.horiz] );
+
+			self._color[controlOpts.horiz]( horizVal )[controlOpts.vert]( vertVal );
+
+			self.active = 'square';
+			self._change.apply( self, arguments );
+		},
+
+		_setOption: function( key, value ) {
+			var self = this,
+				oldValue = self.options[key],
+				doDimensions = false,
+				hexLessColor,
+				newColor,
+				method;
+
+			// ensure the new value is set. We can reset to oldValue if some check wasn't met.
+			self.options[key] = value;
+
+			switch(key) {
+				case 'color':
+					// cast to string in case we have a number
+					value = '' + value;
+					hexLessColor = value.replace( /^#/, '' );
+					newColor = new Color( value ).setHSpace( self.options.mode );
+					if ( newColor.error ) {
+						self.options[key] = oldValue;
+					} else {
+						self._color = newColor;
+						self.options.color = self.options[key] = self._color.toString();
+						self.active = 'external';
+						self._change();
+					}
+					break;
+				case 'palettes':
+					doDimensions = true;
+
+					if ( value ) {
+						self._addPalettes();
+					} else {
+						self.picker.find('.iris-palette-container').remove();
+					}
+
+					// do we need to add events?
+					if ( ! oldValue ) {
+						self._paletteListeners();
+					}
+					break;
+				case 'width':
+					doDimensions = true;
+					break;
+				case 'border':
+					doDimensions = true;
+					method = value ? 'addClass' : 'removeClass';
+					self.picker[method]('iris-border');
+					break;
+				case 'mode':
+				case 'controls':
+					// if nothing's changed, let's bail, since this causes re-rendering the whole widget
+					if ( oldValue === value ) {
+						return;
+					}
+
+					// we're using these poorly named variables because they're already scoped.
+					// method is the element that Iris was called on. oldValue will be the options
+					method = self.element;
+					oldValue = self.options;
+					oldValue.hide = ! self.picker.is( ':visible' );
+					self.destroy();
+					self.picker.remove();
+					return $(self.element).iris(oldValue);
+			}
+
+			// Do we need to recalc dimensions?
+			if ( doDimensions ) {
+				self._dimensions(true);
+			}
+		},
+
+		_squareDimensions: function( forceRefresh ) {
+			var square = this.controls.square,
+				dimensions,
+				control;
+
+			if ( forceRefresh !== undef && square.data('dimensions') ) {
+				return square.data('dimensions');
+			}
+
+			control = this.controls.squareDrag;
+			dimensions = {
+				w: square.width(),
+				h: square.height()
+			};
+			square.data( 'dimensions', dimensions );
+			return dimensions;
+		},
+
+		_isNonHueControl: function( active, type ) {
+			if ( active === 'square' && this.options.controls.strip === 'h' ) {
+				return true;
+			} else if ( type === 'external' || ( type === 'h' && active === 'strip' ) ) {
+				return false;
+			}
+
+			return true;
+		},
+
+		_change: function() {
+			var self = this,
+				controls = self.controls,
+				color = self._getHSpaceColor(),
+				actions = [ 'square', 'strip' ],
+				controlOpts = self.options.controls,
+				type = controlOpts[self.active] || 'external',
+				oldHue = self.hue;
+
+			if ( self.active === 'strip' ) {
+				// take no action on any of the square sliders if we adjusted the strip
+				actions = [];
+			} else if ( self.active !== 'external' ) {
+				// for non-strip, non-external, strip should never change
+				actions.pop(); // conveniently the last item
+			}
+
+			$.each( actions, function(index, item) {
+				var value, dimensions, cssObj;
+				if ( item !== self.active ) {
+					switch ( item ) {
+						case 'strip':
+							// reverse for hue
+							value = ( controlOpts.strip === 'h' ) ? self._scale[controlOpts.strip] - color[controlOpts.strip] : color[controlOpts.strip];
+							controls.stripSlider.slider( 'value', value );
+							break;
+						case 'square':
+							dimensions = self._squareDimensions();
+							cssObj = {
+								left: color[controlOpts.horiz] / self._scale[controlOpts.horiz] * dimensions.w,
+								top: dimensions.h - ( color[controlOpts.vert] / self._scale[controlOpts.vert] * dimensions.h )
+							};
+
+							self.controls.squareDrag.css( cssObj );
+							break;
+					}
+				}
+			});
+
+			// Ensure that we don't change hue if we triggered a hue reset
+			if ( color.h !== oldHue && self._isNonHueControl( self.active, type ) ) {
+				self._color.h(oldHue);
+			}
+
+			// store hue for repeating above check next time
+			self.hue = self._color.h();
+
+			self.options.color = self._color.toString();
+
+			// only run after the first time
+			if ( self._inited ) {
+				self._trigger( 'change', { type: self.active }, { color: self._color } );
+			}
+
+			if ( self.element.is( ':input' ) && ! self._color.error ) {
+				self.element.removeClass( 'iris-error' );
+				if ( self.element.val() !== self._color.toString() ) {
+					self.element.val( self._color.toString() );
+				}
+			}
+
+			self._paint();
+			self._inited = true;
+			self.active = false;
+		},
+		// taken from underscore.js _.debounce method
+		_debounce: function( func, wait, immediate ) {
+			var timeout, result;
+			return function() {
+				var context = this,
+					args = arguments,
+					later,
+					callNow;
+
+				later = function() {
+					timeout = null;
+					if ( ! immediate) {
+						result = func.apply( context, args );
+					}
+				};
+
+				callNow = immediate && !timeout;
+				clearTimeout( timeout );
+				timeout = setTimeout( later, wait );
+				if ( callNow ) {
+					result = func.apply( context, args );
+				}
+				return result;
+			};
+		},
+		show: function() {
+			this.picker.show();
+		},
+		hide: function() {
+			this.picker.hide();
+		},
+		toggle: function() {
+			this.picker.toggle();
+		},
+		color: function(newColor) {
+			if ( newColor === true ) {
+				return this._color.clone();
+			} else if ( newColor === undef ) {
+				return this._color.toString();
+			}
+			this.option('color', newColor);
+		}
+	};
+	// initialize the widget
+	$.widget( 'a8c.iris', Iris );
+	// add CSS
+	$( '<style id="iris-css">' + _css + '</style>' ).appendTo( 'head' );
+
+}( jQuery ));
+/*! Color.js - v0.9.11 - 2013-08-09
+* https://github.com/Automattic/Color.js
+* Copyright (c) 2013 Matt Wiebe; Licensed GPLv2 */
+(function(global, undef) {
+
+	var Color = function( color, type ) {
+		if ( ! ( this instanceof Color ) )
+			return new Color( color, type );
+
+		return this._init( color, type );
+	};
+
+	Color.fn = Color.prototype = {
+		_color: 0,
+		_alpha: 1,
+		error: false,
+		// for preserving hue/sat in fromHsl().toHsl() flows
+		_hsl: { h: 0, s: 0, l: 0 },
+		// for preserving hue/sat in fromHsv().toHsv() flows
+		_hsv: { h: 0, s: 0, v: 0 },
+		// for setting hsl or hsv space - needed for .h() & .s() functions to function properly
+		_hSpace: 'hsl',
+		_init: function( color ) {
+			var func = 'noop';
+			switch ( typeof color ) {
+					case 'object':
+						// alpha?
+						if ( color.a !== undef )
+							this.a( color.a );
+						func = ( color.r !== undef ) ? 'fromRgb' :
+							( color.l !== undef ) ? 'fromHsl' :
+							( color.v !== undef ) ? 'fromHsv' : func;
+						return this[func]( color );
+					case 'string':
+						return this.fromCSS( color );
+					case 'number':
+						return this.fromInt( parseInt( color, 10 ) );
+			}
+			return this;
+		},
+
+		_error: function() {
+			this.error = true;
+			return this;
+		},
+
+		clone: function() {
+			var newColor = new Color( this.toInt() ),
+				copy = ['_alpha', '_hSpace', '_hsl', '_hsv', 'error'];
+			for ( var i = copy.length - 1; i >= 0; i-- ) {
+				newColor[ copy[i] ] = this[ copy[i] ];
+			}
+			return newColor;
+		},
+
+		setHSpace: function( space ) {
+			this._hSpace = ( space === 'hsv' ) ? space : 'hsl';
+			return this;
+		},
+
+		noop: function() {
+			return this;
+		},
+
+		fromCSS: function( color ) {
+			var list,
+				leadingRE = /^(rgb|hs(l|v))a?\(/;
+			this.error = false;
+
+			// whitespace and semicolon trim
+			color = color.replace(/^\s+/, '').replace(/\s+$/, '').replace(/;$/, '');
+
+			if ( color.match(leadingRE) && color.match(/\)$/) ) {
+				list = color.replace(/(\s|%)/g, '').replace(leadingRE, '').replace(/,?\);?$/, '').split(',');
+
+				if ( list.length < 3 )
+					return this._error();
+
+				if ( list.length === 4 ) {
+					this.a( parseFloat( list.pop() ) );
+					// error state has been set to true in .a() if we passed NaN
+					if ( this.error )
+						return this;
+				}
+
+				for (var i = list.length - 1; i >= 0; i--) {
+					list[i] = parseInt(list[i], 10);
+					if ( isNaN( list[i] ) )
+						return this._error();
+				}
+
+				if ( color.match(/^rgb/) ) {
+					return this.fromRgb( {
+						r: list[0],
+						g: list[1],
+						b: list[2]
+					} );
+				} else if ( color.match(/^hsv/) ) {
+					return this.fromHsv( {
+						h: list[0],
+						s: list[1],
+						v: list[2]
+					} );
+				} else {
+					return this.fromHsl( {
+						h: list[0],
+						s: list[1],
+						l: list[2]
+					} );
+				}
+			} else {
+				// must be hex amirite?
+				return this.fromHex( color );
+			}
+		},
+
+		fromRgb: function( rgb, preserve ) {
+			if ( typeof rgb !== 'object' || rgb.r === undef || rgb.g === undef || rgb.b === undef )
+				return this._error();
+
+			this.error = false;
+			return this.fromInt( parseInt( ( rgb.r << 16 ) + ( rgb.g << 8 ) + rgb.b, 10 ), preserve );
+		},
+
+		fromHex: function( color ) {
+			color = color.replace(/^#/, '').replace(/^0x/, '');
+			if ( color.length === 3 ) {
+				color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];
+			}
+
+			// rough error checking - this is where things go squirrely the most
+			this.error = ! /^[0-9A-F]{6}$/i.test( color );
+			return this.fromInt( parseInt( color, 16 ) );
+		},
+
+		fromHsl: function( hsl ) {
+			var r, g, b, q, p, h, s, l;
+
+			if ( typeof hsl !== 'object' || hsl.h === undef || hsl.s === undef || hsl.l === undef )
+				return this._error();
+
+			this._hsl = hsl; // store it
+			this._hSpace = 'hsl'; // implicit
+			h = hsl.h / 360; s = hsl.s / 100; l = hsl.l / 100;
+			if ( s === 0 ) {
+				r = g = b = l; // achromatic
+			}
+			else {
+				q = l < 0.5 ? l * ( 1 + s ) : l + s - l * s;
+				p = 2 * l - q;
+				r = this.hue2rgb( p, q, h + 1/3 );
+				g = this.hue2rgb( p, q, h );
+				b = this.hue2rgb( p, q, h - 1/3 );
+			}
+			return this.fromRgb( {
+				r: r * 255,
+				g: g * 255,
+				b: b * 255
+			}, true ); // true preserves hue/sat
+		},
+
+		fromHsv: function( hsv ) {
+			var h, s, v, r, g, b, i, f, p, q, t;
+			if ( typeof hsv !== 'object' || hsv.h === undef || hsv.s === undef || hsv.v === undef )
+				return this._error();
+
+			this._hsv = hsv; // store it
+			this._hSpace = 'hsv'; // implicit
+
+			h = hsv.h / 360; s = hsv.s / 100; v = hsv.v / 100;
+			i = Math.floor( h * 6 );
+			f = h * 6 - i;
+			p = v * ( 1 - s );
+			q = v * ( 1 - f * s );
+			t = v * ( 1 - ( 1 - f ) * s );
+
+			switch( i % 6 ) {
+				case 0:
+					r = v; g = t; b = p;
+					break;
+				case 1:
+					r = q; g = v; b = p;
+					break;
+				case 2:
+					r = p; g = v; b = t;
+					break;
+				case 3:
+					r = p; g = q; b = v;
+					break;
+				case 4:
+					r = t; g = p; b = v;
+					break;
+				case 5:
+					r = v; g = p; b = q;
+					break;
+			}
+
+			return this.fromRgb( {
+				r: r * 255,
+				g: g * 255,
+				b: b * 255
+			}, true ); // true preserves hue/sat
+
+		},
+		// everything comes down to fromInt
+		fromInt: function( color, preserve ) {
+			this._color = parseInt( color, 10 );
+
+			if ( isNaN( this._color ) )
+				this._color = 0;
+
+			// let's coerce things
+			if ( this._color > 16777215 )
+				this._color = 16777215;
+			else if ( this._color < 0 )
+				this._color = 0;
+
+			// let's not do weird things
+			if ( preserve === undef ) {
+				this._hsv.h = this._hsv.s = this._hsl.h = this._hsl.s = 0;
+			}
+			// EVENT GOES HERE
+			return this;
+		},
+
+		hue2rgb: function( p, q, t ) {
+			if ( t < 0 ) {
+				t += 1;
+			}
+			if ( t > 1 ) {
+				t -= 1;
+			}
+			if ( t < 1/6 ) {
+				return p + ( q - p ) * 6 * t;
+			}
+			if ( t < 1/2 ) {
+				return q;
+			}
+			if ( t < 2/3 ) {
+				return p + ( q - p ) * ( 2/3 - t ) * 6;
+			}
+			return p;
+		},
+
+		toString: function() {
+			var hex = parseInt( this._color, 10 ).toString( 16 );
+			if ( this.error )
+				return '';
+			// maybe left pad it
+			if ( hex.length < 6 ) {
+				for (var i = 6 - hex.length - 1; i >= 0; i--) {
+					hex = '0' + hex;
+				}
+			}
+			return '#' + hex;
+		},
+
+		toCSS: function( type, alpha ) {
+			type = type || 'hex';
+			alpha = parseFloat( alpha || this._alpha );
+			switch ( type ) {
+				case 'rgb':
+				case 'rgba':
+					var rgb = this.toRgb();
+					if ( alpha < 1 ) {
+						return "rgba( " + rgb.r + ", " + rgb.g + ", " + rgb.b + ", " + alpha + " )";
+					}
+					else {
+						return "rgb( " + rgb.r + ", " + rgb.g + ", " + rgb.b + " )";
+					}
+					break;
+				case 'hsl':
+				case 'hsla':
+					var hsl = this.toHsl();
+					if ( alpha < 1 ) {
+						return "hsla( " + hsl.h + ", " + hsl.s + "%, " + hsl.l + "%, " + alpha + " )";
+					}
+					else {
+						return "hsl( " + hsl.h + ", " + hsl.s + "%, " + hsl.l + "% )";
+					}
+					break;
+				default:
+					return this.toString();
+			}
+		},
+
+		toRgb: function() {
+			return {
+				r: 255 & ( this._color >> 16 ),
+				g: 255 & ( this._color >> 8 ),
+				b: 255 & ( this._color )
+			};
+		},
+
+		toHsl: function() {
+			var rgb = this.toRgb();
+			var r = rgb.r / 255, g = rgb.g / 255, b = rgb.b / 255;
+			var max = Math.max( r, g, b ), min = Math.min( r, g, b );
+			var h, s, l = ( max + min ) / 2;
+
+			if ( max === min ) {
+				h = s = 0; // achromatic
+			} else {
+				var d = max - min;
+				s = l > 0.5 ? d / ( 2 - max - min ) : d / ( max + min );
+				switch ( max ) {
+					case r: h = ( g - b ) / d + ( g < b ? 6 : 0 );
+						break;
+					case g: h = ( b - r ) / d + 2;
+						break;
+					case b: h = ( r - g ) / d + 4;
+						break;
+				}
+				h /= 6;
+			}
+
+			// maintain hue & sat if we've been manipulating things in the HSL space.
+			h = Math.round( h * 360 );
+			if ( h === 0 && this._hsl.h !== h ) {
+				h = this._hsl.h;
+			}
+			s = Math.round( s * 100 );
+			if ( s === 0 && this._hsl.s ) {
+				s = this._hsl.s;
+			}
+
+			return {
+				h: h,
+				s: s,
+				l: Math.round( l * 100 )
+			};
+
+		},
+
+		toHsv: function() {
+			var rgb = this.toRgb();
+			var r = rgb.r / 255, g = rgb.g / 255, b = rgb.b / 255;
+			var max = Math.max( r, g, b ), min = Math.min( r, g, b );
+			var h, s, v = max;
+			var d = max - min;
+			s = max === 0 ? 0 : d / max;
+
+			if ( max === min ) {
+				h = s = 0; // achromatic
+			} else {
+				switch( max ){
+					case r:
+						h = ( g - b ) / d + ( g < b ? 6 : 0 );
+						break;
+					case g:
+						h = ( b - r ) / d + 2;
+						break;
+					case b:
+						h = ( r - g ) / d + 4;
+						break;
+				}
+				h /= 6;
+			}
+
+			// maintain hue & sat if we've been manipulating things in the HSV space.
+			h = Math.round( h * 360 );
+			if ( h === 0 && this._hsv.h !== h ) {
+				h = this._hsv.h;
+			}
+			s = Math.round( s * 100 );
+			if ( s === 0 && this._hsv.s ) {
+				s = this._hsv.s;
+			}
+
+			return {
+				h: h,
+				s: s,
+				v: Math.round( v * 100 )
+			};
+		},
+
+		toInt: function() {
+			return this._color;
+		},
+
+		toIEOctoHex: function() {
+			// AARRBBGG
+			var hex = this.toString();
+			var AA = parseInt( 255 * this._alpha, 10 ).toString(16);
+			if ( AA.length === 1 ) {
+				AA = '0' + AA;
+			}
+			return '#' + AA + hex.replace(/^#/, '' );
+		},
+
+		toLuminosity: function() {
+			var rgb = this.toRgb();
+			return 0.2126 * Math.pow( rgb.r / 255, 2.2 ) + 0.7152 * Math.pow( rgb.g / 255, 2.2 ) + 0.0722 * Math.pow( rgb.b / 255, 2.2);
+		},
+
+		getDistanceLuminosityFrom: function( color ) {
+			if ( ! ( color instanceof Color ) ) {
+				throw 'getDistanceLuminosityFrom requires a Color object';
+			}
+			var lum1 = this.toLuminosity();
+			var lum2 = color.toLuminosity();
+			if ( lum1 > lum2 ) {
+				return ( lum1 + 0.05 ) / ( lum2 + 0.05 );
+			}
+			else {
+				return ( lum2 + 0.05 ) / ( lum1 + 0.05 );
+			}
+		},
+
+		getMaxContrastColor: function() {
+			var lum = this.toLuminosity();
+			var hex = ( lum >= 0.5 ) ? '000000' : 'ffffff';
+			return new Color( hex );
+		},
+
+		getReadableContrastingColor: function( bgColor, minContrast ) {
+			if ( ! bgColor instanceof Color ) {
+				return this;
+			}
+
+			// you shouldn't use less than 5, but you might want to.
+			var targetContrast = ( minContrast === undef ) ? 5 : minContrast;
+			// working things
+			var contrast = bgColor.getDistanceLuminosityFrom( this );
+			var maxContrastColor = bgColor.getMaxContrastColor();
+			var maxContrast = maxContrastColor.getDistanceLuminosityFrom( bgColor );
+
+			// if current max contrast is less than the target contrast, we had wishful thinking.
+			// still, go max
+			if ( maxContrast <= targetContrast ) {
+				return maxContrastColor;
+			}
+			// or, we might already have sufficient contrast
+			else if ( contrast >= targetContrast ) {
+				return this;
+			}
+
+			var incr = ( 0 === maxContrastColor.toInt() ) ? -1 : 1;
+			while ( contrast < targetContrast ) {
+				this.l( incr, true ); // 2nd arg turns this into an incrementer
+				contrast = this.getDistanceLuminosityFrom( bgColor );
+				// infininite loop prevention: you never know.
+				if ( this._color === 0 || this._color === 16777215 ) {
+					break;
+				}
+			}
+
+			return this;
+
+		},
+
+		a: function( val ) {
+			if ( val === undef )
+				return this._alpha;
+
+			var a = parseFloat( val );
+
+			if ( isNaN( a ) )
+				return this._error();
+
+			this._alpha = a;
+			return this;
+		},
+
+		// TRANSFORMS
+
+		darken: function( amount ) {
+			amount = amount || 5;
+			return this.l( - amount, true );
+		},
+
+		lighten: function( amount ) {
+			amount = amount || 5;
+			return this.l( amount, true );
+		},
+
+		saturate: function( amount ) {
+			amount = amount || 15;
+			return this.s( amount, true );
+		},
+
+		desaturate: function( amount ) {
+			amount = amount || 15;
+			return this.s( - amount, true );
+		},
+
+		toGrayscale: function() {
+			return this.setHSpace('hsl').s( 0 );
+		},
+
+		getComplement: function() {
+			return this.h( 180, true );
+		},
+
+		getSplitComplement: function( step ) {
+			step = step || 1;
+			var incr = 180 + ( step * 30 );
+			return this.h( incr, true );
+		},
+
+		getAnalog: function( step ) {
+			step = step || 1;
+			var incr = step * 30;
+			return this.h( incr, true );
+		},
+
+		getTetrad: function( step ) {
+			step = step || 1;
+			var incr = step * 60;
+			return this.h( incr, true );
+		},
+
+		getTriad: function( step ) {
+			step = step || 1;
+			var incr = step * 120;
+			return this.h( incr, true );
+		},
+
+		_partial: function( key ) {
+			var prop = shortProps[key];
+			return function( val, incr ) {
+				var color = this._spaceFunc('to', prop.space);
+
+				// GETTER
+				if ( val === undef )
+					return color[key];
+
+				// INCREMENT
+				if ( incr === true )
+					val = color[key] + val;
+
+				// MOD & RANGE
+				if ( prop.mod )
+					val = val % prop.mod;
+				if ( prop.range )
+					val = ( val < prop.range[0] ) ? prop.range[0] : ( val > prop.range[1] ) ? prop.range[1] : val;
+
+				// NEW VALUE
+				color[key] = val;
+
+				return this._spaceFunc('from', prop.space, color);
+			};
+		},
+
+		_spaceFunc: function( dir, s, val ) {
+			var space = s || this._hSpace,
+				funcName = dir + space.charAt(0).toUpperCase() + space.substr(1);
+			return this[funcName](val);
+		}
+	};
+
+	var shortProps = {
+		h: {
+			mod: 360
+		},
+		s: {
+			range: [0,100]
+		},
+		l: {
+			space: 'hsl',
+			range: [0,100]
+		},
+		v: {
+			space: 'hsv',
+			range: [0,100]
+		},
+		r: {
+			space: 'rgb',
+			range: [0,255]
+		},
+		g: {
+			space: 'rgb',
+			range: [0,255]
+		},
+		b: {
+			space: 'rgb',
+			range: [0,255]
+		}
+	};
+
+	for ( var key in shortProps ) {
+		if ( shortProps.hasOwnProperty( key ) )
+			Color.fn[key] = Color.fn._partial(key);
+	}
+
+	// play nicely with Node + browser
+	if ( typeof exports === 'object' )
+		module.exports = Color;
+	else
+		global.Color = Color;
+
+}(this));
diff --git a/lib/plugins/styling/lang/bg/lang.php b/lib/plugins/styling/lang/bg/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d17caffb62b3ac3ce47c0a908cf92b619746bf3
--- /dev/null
+++ b/lib/plugins/styling/lang/bg/lang.php
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Kiril <neohidra@gmail.com>
+ */
+$lang['menu']                  = 'Настройки на стила на шаблона';
+$lang['error']                 = 'За съжаление шаблона не поддържа тази функционалност.';
+$lang['btn_preview']           = 'Преглед на промените';
+$lang['btn_save']              = 'Запис на промените';
+$lang['btn_reset']             = 'Анулиране на промените';
+$lang['btn_revert']            = 'Връщане на стила към стандартните стойности';
+$lang['__text__']              = 'Цвят на основния текст';
+$lang['__background__']        = 'Цвят на основния фон';
+$lang['__text_alt__']          = 'Алтернативен цвят за текста';
+$lang['__background_alt__']    = 'Алтернативен цвят за фона';
+$lang['__text_neu__']          = 'Неутрален цвят за текста';
+$lang['__background_neu__']    = 'Неутрален цвят за фона';
+$lang['__border__']            = 'Цвят на рамката';
+$lang['__highlight__']         = 'Цвят за отличаване (основно на резултата от търсения)';
diff --git a/lib/plugins/styling/lang/cs/intro.txt b/lib/plugins/styling/lang/cs/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..00365a09103a148229990dd05439bf52a81e077b
--- /dev/null
+++ b/lib/plugins/styling/lang/cs/intro.txt
@@ -0,0 +1,2 @@
+Tento nástroj umožňuje změnu určitých nastavení stylu právě používané šablony vzhledu.
+Všechny změny jsou uloženy v lokálním konfiguračním souboru a tím chráněny před smazáním při aktualizaci.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/cs/lang.php b/lib/plugins/styling/lang/cs/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8148b784f5ab5cc35d03242bab04a68298f4e0c4
--- /dev/null
+++ b/lib/plugins/styling/lang/cs/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['menu']                  = 'Nastavení stylů vzhledu';
+$lang['js']['loader']          = 'Náhled se načítá...<br />pokud tento text nezmizí, pravděpodobně jsou nastaveny nesprávné hodnoty';
+$lang['js']['popup']           = 'Otevřit ve vlastním okně';
+$lang['error']                 = 'Omlouváme se, tento ';
+$lang['btn_preview']           = 'Náhled změn';
+$lang['btn_save']              = 'Uložit změny';
+$lang['btn_reset']             = 'Zrušit aktuální změny';
+$lang['btn_revert']            = 'Vrátit styly zpět na výchozí hodnoty vzhledu';
+$lang['__text__']              = 'Barva hlavního textu';
+$lang['__background__']        = 'Barva hlavního pozadí';
+$lang['__text_alt__']          = 'Barva alternativního textu';
+$lang['__background_alt__']    = 'Barva alternativního pozadí';
+$lang['__text_neu__']          = 'Barva neutrálního textu';
+$lang['__background_neu__']    = 'Barva neutrálního pozadí';
+$lang['__border__']            = 'Barva rámování';
+$lang['__highlight__']         = 'Zvýrazněná barva (hlavně pro výsledky vyhledávání)';
diff --git a/lib/plugins/styling/lang/cy/intro.txt b/lib/plugins/styling/lang/cy/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7c825967bf922384aa4b4d501c3ca572a907e8ad
--- /dev/null
+++ b/lib/plugins/styling/lang/cy/intro.txt
@@ -0,0 +1,2 @@
+Mae'r teclyn hwn yn eich galluogi chi newid gosodiadau arddull penodol y templed rydych chi'n defnyddio'n bresennol.
+Caiff pob newid ei storio mewn ffeil ffurfwedd leol sy'n uwchradd-ddiogel.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/cy/lang.php b/lib/plugins/styling/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d22a59f0814acfd195b350520e108f9be63f69c
--- /dev/null
+++ b/lib/plugins/styling/lang/cy/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Welsh language file for styling plugin
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Alan Davies <ben.brynsadler@gmail.com>
+ */
+
+// menu entry for admin plugins
+$lang['menu'] = 'Gosodiadau Arddull Templed';
+
+$lang['js']['loader'] = 'Rhagolwg yn llwytho...<br />os \'dyw hwn ddim yn diflannu, efallai bod eich gwerthoedd yn annilys';
+$lang['js']['popup'] = 'Agor fel ffurflen naid';
+
+// custom language strings for the plugin
+$lang['error'] = 'Sori, \'dyw\'r templed hwn ddim yn cynnal y swyddogaethedd hwn.';
+
+$lang['btn_preview'] = 'Rhagolwg newidiadau';
+$lang['btn_save']    = 'Cadw newidiadau';
+$lang['btn_reset']   = 'Ailosod newidiadau cyfredol';
+$lang['btn_revert']  = 'Troi arddulliau\'n ôl i ddiofyn y templed';
+
+// default guaranteed placeholders
+$lang['__text__']           = 'Lliw\'r prif destun';
+$lang['__background__']     = 'Lliw\'r prif gefndir';
+$lang['__text_alt__']       = 'Lliw testun amgen';
+$lang['__background_alt__'] = 'Lliw cefndir amgen';
+$lang['__text_neu__']       = 'lliw testun niwtral';
+$lang['__background_neu__'] = 'Lliw cefndir niwtral';
+$lang['__border__']         = 'Lliw border';
+$lang['__highlight__']      = 'Lliw uwcholeuad (am ganlyniadau chwiliad yn bennaf)';
+
+
+
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/styling/lang/de/intro.txt b/lib/plugins/styling/lang/de/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aa9577355efe7d602e898367b76227bd5979d774
--- /dev/null
+++ b/lib/plugins/styling/lang/de/intro.txt
@@ -0,0 +1,2 @@
+Dieses Plugin ermöglicht es, bestimmte Designeinstellungen des ausgewählten Templates zu ändern.
+Alle Änderungen werden in einer lokalen Konfigurationsdatei gespeichert und sind upgrade-sicher.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/de/lang.php b/lib/plugins/styling/lang/de/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..8a46f818e29fbe5810596ef014d07fe9adb51ae8
--- /dev/null
+++ b/lib/plugins/styling/lang/de/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+$lang['menu']                  = 'Einstellungen fürs Template-Design';
+$lang['js']['loader']          = 'Vorschau lädt...<br />Falls diese Nachricht nicht verschwindet, könnten Ihre Werte fehlerhaft sein';
+$lang['js']['popup']           = 'Öffne als Popup';
+$lang['error']                 = 'Dieses Template unterstützt diese Funktion nicht.';
+$lang['btn_preview']           = 'Vorschau der Änderungen anzeigen';
+$lang['btn_save']              = 'Änderungen speichern';
+$lang['btn_reset']             = 'Jetzige Änderungen rückgängig machen';
+$lang['btn_revert']            = 'Auf Templates Voreinstellungen zurückfallen';
+$lang['__text__']              = 'Haupttextfarbe';
+$lang['__background__']        = 'Haupthintergrundfarbe';
+$lang['__text_alt__']          = 'Alternative Textfarbe';
+$lang['__background_alt__']    = 'Alternative Hintergrundfarbe';
+$lang['__text_neu__']          = 'Neutrale Textfarbe';
+$lang['__background_neu__']    = 'Neutrale Hintergrundfarbe';
+$lang['__border__']            = 'Rahmenfarbe';
+$lang['__highlight__']         = 'Hervorhebungsfarbe (hauptsächlich für Suchergebnisse)';
diff --git a/lib/plugins/styling/lang/en/intro.txt b/lib/plugins/styling/lang/en/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4ea55172fdaa3ee383b2fbf78e294210d35a4f45
--- /dev/null
+++ b/lib/plugins/styling/lang/en/intro.txt
@@ -0,0 +1,2 @@
+This tool allows you to change certain style settings of your currently selected template.
+All changes are stored in a local configuration file and are upgrade safe.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/en/lang.php b/lib/plugins/styling/lang/en/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..e0011eb83577e91f96d6198572c76bfb1730743d
--- /dev/null
+++ b/lib/plugins/styling/lang/en/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * English language file for styling plugin
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// menu entry for admin plugins
+$lang['menu'] = 'Template Style Settings';
+
+$lang['js']['loader'] = 'Preview is loading...<br />if this does not goes away, your values may be faulty';
+$lang['js']['popup'] = 'Open as a popup';
+
+// custom language strings for the plugin
+$lang['error'] = 'Sorry, this template does not support this functionality.';
+
+$lang['btn_preview'] = 'Preview changes';
+$lang['btn_save']    = 'Save changes';
+$lang['btn_reset']   = 'Reset current changes';
+$lang['btn_revert']  = 'Revert styles back to template\'s default';
+
+// default guaranteed placeholders
+$lang['__text__']           = 'Main text color';
+$lang['__background__']     = 'Main background color';
+$lang['__text_alt__']       = 'Alternative text color';
+$lang['__background_alt__'] = 'Alternative background color';
+$lang['__text_neu__']       = 'Neutral text color';
+$lang['__background_neu__'] = 'Neutral background color';
+$lang['__border__']         = 'Border color';
+$lang['__highlight__']      = 'Highlight color (for search results mainly)';
+
+
+
+
+//Setup VIM: ex: et ts=4 :
diff --git a/lib/plugins/styling/lang/es/intro.txt b/lib/plugins/styling/lang/es/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8a556002e4d7ff8aba3dd562813f13d508fd93b4
--- /dev/null
+++ b/lib/plugins/styling/lang/es/intro.txt
@@ -0,0 +1,2 @@
+Esta herramienta le permite cambiar algunos ajustes de estilo de la plantilla seleccionada.
+Todos los cambios se guardan en un archivo de configuración local y son una actualización segura.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/es/lang.php b/lib/plugins/styling/lang/es/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ad300dc12aea9bd19e50987d868b5c0fbf4869bd
--- /dev/null
+++ b/lib/plugins/styling/lang/es/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Domingo Redal <docxml@gmail.com>
+ */
+$lang['menu']                  = 'Ajustes de plantilla';
+$lang['js']['loader']          = 'La vista previa se está cargando ... <br /> si esto no se ve, sus valores pueden ser defectuosos';
+$lang['js']['popup']           = 'Abrir como una ventana emergente';
+$lang['error']                 = 'Lo sentimos, esta plantilla no admite esta funcionalidad.';
+$lang['btn_preview']           = 'Vista previa de los cambios';
+$lang['btn_save']              = 'Guardar cambios';
+$lang['btn_reset']             = 'Reiniciar los cambios actuales';
+$lang['btn_revert']            = 'Revertir estilos volviendo a los valores por defecto de la plantilla';
+$lang['__text__']              = 'Color del texto principal';
+$lang['__background__']        = 'Color de fondo del texto principal';
+$lang['__text_alt__']          = 'Color del texto alternativo';
+$lang['__background_alt__']    = 'Color de fondo del texto alternativo';
+$lang['__text_neu__']          = 'Color del texto neutro';
+$lang['__background_neu__']    = 'Color de fondo del texto neutro';
+$lang['__border__']            = 'Color del borde';
+$lang['__highlight__']         = 'Color resaltado (para los resultados de búsqueda, principalmente)';
diff --git a/lib/plugins/styling/lang/fa/intro.txt b/lib/plugins/styling/lang/fa/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..428a25130f569aeb012ff941242e47cb41700779
--- /dev/null
+++ b/lib/plugins/styling/lang/fa/intro.txt
@@ -0,0 +1,2 @@
+این ابزار این امکان را فراهم می‌سازد که برخی تنظیمات مشخص از قالبی که انتخاب کردید را تغییر دهید.
+تمام تغییرات در فایل داخلی تنظیمات ذخیره می‌شود و به‌روزرسانی هم ایمن است.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/fa/lang.php b/lib/plugins/styling/lang/fa/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8d1bd60efad5aebe67636ef7a3d522eaf4e1bf7
--- /dev/null
+++ b/lib/plugins/styling/lang/fa/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
+ */
+$lang['menu']                  = 'تنظیمات ظاهری تمپلیت';
+$lang['js']['loader']          = 'پیش‌نمایش در حال باز شدن است... <br />اگر این پیش نرفت یعنی مقادیرتان اشکال دارد';
+$lang['js']['popup']           = 'باز کردن به صورت popup';
+$lang['error']                 = 'ببخشید، این قالب از این قابلیت پشتیبانی نمی‌کند';
+$lang['btn_preview']           = 'نمایش تغییرات';
+$lang['btn_save']              = 'ذخیره تغییرات';
+$lang['btn_reset']             = 'بازگردانی تغییر فعلی';
+$lang['btn_revert']            = 'بازگردانی ظاهر به پیشفرض قالب';
+$lang['__text__']              = 'رنگ اصلی متن';
+$lang['__background__']        = 'رنگ اصلی زمینه';
+$lang['__text_alt__']          = 'رنگ ثانویه متن';
+$lang['__background_alt__']    = 'رنگ ثانویه زمینه';
+$lang['__text_neu__']          = 'رنگ خنثی متن';
+$lang['__background_neu__']    = 'رنگ خنثی زمینه';
+$lang['__border__']            = 'رنگ حاشیه';
+$lang['__highlight__']         = 'رنگ برجسته‌سازی (برای نتیجه جستجو)';
diff --git a/lib/plugins/styling/lang/fr/intro.txt b/lib/plugins/styling/lang/fr/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..14a615c8d227bc5c2b71f95a0f377474f341e9e5
--- /dev/null
+++ b/lib/plugins/styling/lang/fr/intro.txt
@@ -0,0 +1,2 @@
+Cet outil vous permet de changer les paramètres de certains style de votre thème actuel.
+Tous les changement sont enregistrés dans un fichier de configuration local qui sera inchangé en cas de mise à jour.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/fr/lang.php b/lib/plugins/styling/lang/fr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..92b8c3d741990641227a85171601608da9b7a683
--- /dev/null
+++ b/lib/plugins/styling/lang/fr/lang.php
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Carbain Frédéric <fcarbain@yahoo.fr>
+ * @author Nicolas Friedli <nicolas@theologique.ch>
+ */
+$lang['menu']                  = 'Paramètres de style du thème (template)';
+$lang['js']['loader']          = 'La prévisualisation est en chargement... <br />Si rien ne se passe, les données sont peut-être erronées';
+$lang['js']['popup']           = 'Ouvrir dans une nouvelle fenêtre';
+$lang['error']                 = 'Désolé, ce thème ne supporte pas cette fonctionnalité.';
+$lang['btn_preview']           = 'Aperçu des changements';
+$lang['btn_save']              = 'sauvegarder les changements.';
+$lang['btn_reset']             = 'Remettre les changements courants à zéro';
+$lang['btn_revert']            = 'Remettre les styles du thème aux valeurs par défaut';
+$lang['__text__']              = 'Couleur de texte principale';
+$lang['__background__']        = 'Couleur de fond principale';
+$lang['__text_alt__']          = 'Couleur de texte alternative';
+$lang['__background_alt__']    = 'Couleur de fond alternative';
+$lang['__text_neu__']          = 'Couleur de texte neutre';
+$lang['__background_neu__']    = 'Couleur de fond neutre';
+$lang['__border__']            = 'Couleur des contours';
+$lang['__highlight__']         = 'Couleur de surbrillance (utilisée pincipalement pour les résultats de recherche)';
diff --git a/lib/plugins/styling/lang/hu/intro.txt b/lib/plugins/styling/lang/hu/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..42f451d9a5e927713080e2f0d6468a1e045e5220
--- /dev/null
+++ b/lib/plugins/styling/lang/hu/intro.txt
@@ -0,0 +1,2 @@
+Ezzel az eszközzel módosíthatod az aktuális sablon kinézetének néhány elemét.
+A változtatások egy helyi konfigurációs fájlban kerülnek tárolásra, így a frissítések során megmaradnak.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/hu/lang.php b/lib/plugins/styling/lang/hu/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6ef5de93974d840212114f7901ea0fd33cfc9cd
--- /dev/null
+++ b/lib/plugins/styling/lang/hu/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Marton Sebok <sebokmarton@gmail.com>
+ */
+$lang['menu']                  = 'Sablon kinézetének beállításai';
+$lang['js']['loader']          = 'Az előnézet töltődik...<br />ha ez az üzenet nem tűnik el, a beállított értékek hibásak lehetnek';
+$lang['js']['popup']           = 'Megnyitás felugró ablakban';
+$lang['error']                 = 'Ez a sablon sajnos nem támogatja ezt a funkciót';
+$lang['btn_preview']           = 'Változtatások előnézete';
+$lang['btn_save']              = 'Változtatások mentése';
+$lang['btn_reset']             = 'Jelenlegi változtatások visszaállítása';
+$lang['btn_revert']            = 'A sablon alapértelmezett kinézetének visszaállítása';
+$lang['__text__']              = 'Fő szövegszín';
+$lang['__background__']        = 'Fő háttérszín';
+$lang['__text_alt__']          = 'Alternatív szövegszín';
+$lang['__background_alt__']    = 'Alternatív háttérszín';
+$lang['__text_neu__']          = 'Semleges szövegszín';
+$lang['__background_neu__']    = 'Semleges háttérszín';
+$lang['__border__']            = 'Keret színe';
+$lang['__highlight__']         = 'Kijelölés színe (leginkább a keresési eredményeknél)';
diff --git a/lib/plugins/styling/lang/it/intro.txt b/lib/plugins/styling/lang/it/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6c798e432e3aadbb583aae7858456a3eaa85beef
--- /dev/null
+++ b/lib/plugins/styling/lang/it/intro.txt
@@ -0,0 +1,2 @@
+Questo strumento ti permette di cambiare certe configurazioni di stile del tema attualmente in uso.
+Tutte le modifiche sono salvate in un file di configurazione locale e sono aggiornate in modo sicuro.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/it/lang.php b/lib/plugins/styling/lang/it/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..aea011feba5c95ffb575f427914d62a1e899d2df
--- /dev/null
+++ b/lib/plugins/styling/lang/it/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Torpedo <dgtorpedo@gmail.com>
+ */
+$lang['menu']                  = 'Configurazioni di stile del tema';
+$lang['js']['loader']          = 'Anteprima in corso...<br />se questo non sparisce, potresti aver fornito dei valori sbagliati';
+$lang['js']['popup']           = 'Apri in un finestra a parte';
+$lang['error']                 = 'Spiacente, questo template non supporta questa funzionalità.';
+$lang['btn_preview']           = 'Cambiamenti precedenti';
+$lang['btn_save']              = 'Salva i cambiamenti';
+$lang['btn_reset']             = 'Azzera le modifiche correnti';
+$lang['btn_revert']            = 'Ripristina gli stili ai valori originari del tema';
+$lang['__text__']              = 'Colore principale del testo';
+$lang['__background__']        = 'Colore principale dello sfondo';
+$lang['__text_alt__']          = 'Colore alternativo per il testo';
+$lang['__background_alt__']    = 'Colore alternativo dello sfondo';
+$lang['__text_neu__']          = 'Colore testo neutrale';
+$lang['__background_neu__']    = 'Colore sfondo neutrale';
+$lang['__border__']            = 'Colore del bordo';
+$lang['__highlight__']         = 'Colore di evidenziazione (principalmente per i risultati di ricerca)';
diff --git a/lib/plugins/styling/lang/ja/intro.txt b/lib/plugins/styling/lang/ja/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1feb4e033fe68926131bc52150e0d3a33004e7d5
--- /dev/null
+++ b/lib/plugins/styling/lang/ja/intro.txt
@@ -0,0 +1,2 @@
+この画面上で、選択中のテンプレート固有のスタイル設定を変更できます。
+変更内容はすべてローカルの設定ファイル内に保存され、テンプレートを更新しても初期化されません。
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/ja/lang.php b/lib/plugins/styling/lang/ja/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..da18829b2ca6775ae32abd19da1fa3d4e48e4966
--- /dev/null
+++ b/lib/plugins/styling/lang/ja/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Hideaki SAWADA <chuno@live.jp>
+ */
+$lang['menu']                  = 'テンプレートのスタイル設定';
+$lang['js']['loader']          = 'プレビューを読込み中です・・・<br/>この表示が消えない場合、変更した設定値に問題があるかもしれません。';
+$lang['js']['popup']           = 'ポップアップとして表示';
+$lang['error']                 = 'このテンプレートは、この機能に対応していません。';
+$lang['btn_preview']           = '変更内容のプレビュー';
+$lang['btn_save']              = '変更内容の保存';
+$lang['btn_reset']             = '変更内容の初期化';
+$lang['btn_revert']            = 'テンプレートのデフォルト値に戻す';
+$lang['__text__']              = 'メイン文字色';
+$lang['__background__']        = 'メイン背景色';
+$lang['__text_alt__']          = '代替文字色';
+$lang['__background_alt__']    = '代替背景色';
+$lang['__text_neu__']          = '無彩色の文字色';
+$lang['__background_neu__']    = '無彩色の背景色';
+$lang['__border__']            = '枠線の色';
+$lang['__highlight__']         = '強調色(主に検索結果用)';
diff --git a/lib/plugins/styling/lang/ko/intro.txt b/lib/plugins/styling/lang/ko/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c460801b159db3d1ede04f922269111a328b6043
--- /dev/null
+++ b/lib/plugins/styling/lang/ko/intro.txt
@@ -0,0 +1,2 @@
+이 도구는 현재 선택한 템플릿의 특정 스타일 설정을 바꿀 수 있습니다.
+모든 바뀜은 로컬 환경 설정 파일에 저장되며 안전하게 업그레이드됩니다.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/ko/lang.php b/lib/plugins/styling/lang/ko/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..96da76d4829062c1db3615673ce6eac9f3eca86b
--- /dev/null
+++ b/lib/plugins/styling/lang/ko/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['menu']                  = '템플릿 스타일 설정';
+$lang['js']['loader']          = '미리 보기를 불러오는 중...<br />만약 이것이 사라지지 않는다면, 당신은 실망하겠죠';
+$lang['js']['popup']           = '팝업으로 열기';
+$lang['error']                 = '죄송하지만 이 템플릿은 이 기능으로 지원하지 않습니다.';
+$lang['btn_preview']           = '바뀜 미리 보기';
+$lang['btn_save']              = '바뀜 저장';
+$lang['btn_reset']             = '현재 바뀜 재설정';
+$lang['btn_revert']            = '틀의 기본값으로 스타일을 되돌리기';
+$lang['__text__']              = '주요 텍스트 색';
+$lang['__background__']        = '주요 배경 색';
+$lang['__text_alt__']          = '대체 텍스트 색';
+$lang['__background_alt__']    = '대체 배경 색';
+$lang['__text_neu__']          = '중립 텍스트 색';
+$lang['__background_neu__']    = '중립 배경 색';
+$lang['__border__']            = '윤곽선 색';
+$lang['__highlight__']         = '(주로 검색 결과를 위한) 강조 색';
diff --git a/lib/plugins/styling/lang/nl/intro.txt b/lib/plugins/styling/lang/nl/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..727593848b90a00c35935cc3041aac4b9564c440
--- /dev/null
+++ b/lib/plugins/styling/lang/nl/intro.txt
@@ -0,0 +1,2 @@
+Deze tool laat u een aantal stijlinstellingen van uw huidig geselecteerde template aanpassen.
+Alle aanpassingen worden in een lokaal configuratiebestand bewaard en zijn upgrade veilig.
diff --git a/lib/plugins/styling/lang/nl/lang.php b/lib/plugins/styling/lang/nl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..dd258051e3ecfaf8ac841683bce7fe5a81f02d79
--- /dev/null
+++ b/lib/plugins/styling/lang/nl/lang.php
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Mark C. Prins <mprins@users.sf.net>
+ * @author hugo smet <hugo.smet@scarlet.be>
+ */
+$lang['menu']                  = 'Template stijl-instellingen';
+$lang['js']['loader']          = 'Voorbeeldweergave is aan het laden...<br />als dit niet verdwijnt zijn uw instellingen mogelijk foutief.';
+$lang['js']['popup']           = 'Open als popup';
+$lang['error']                 = 'Sorry, deze template ondersteunt deze functionaliteit niet.';
+$lang['btn_preview']           = 'Bekijk aanpassingen';
+$lang['btn_save']              = 'Sla aanpassingen op';
+$lang['btn_reset']             = 'Huidige aanpassingen verwerpen';
+$lang['btn_revert']            = 'Stijlen terugzetten naar de standaard waardes van de template';
+$lang['__text__']              = 'Hoofd tekstkleur';
+$lang['__background__']        = 'Hoofd achtergrondkleur';
+$lang['__text_alt__']          = 'Alternatieve tekstkleur';
+$lang['__background_alt__']    = 'Alternatieve achtergrondkleur';
+$lang['__text_neu__']          = 'Neutrale tekstkleur';
+$lang['__background_neu__']    = 'Neutrale achtergrondkleur';
+$lang['__border__']            = 'Kader kleur';
+$lang['__highlight__']         = 'Markeringskleur (hoofdzakelijk voor zoekresultaten)';
diff --git a/lib/plugins/styling/lang/pt-br/intro.txt b/lib/plugins/styling/lang/pt-br/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3d0f47fd694417a7bc8cd4be108b5a3ba27f5298
--- /dev/null
+++ b/lib/plugins/styling/lang/pt-br/intro.txt
@@ -0,0 +1,2 @@
+Essa ferramente permite a alteração de certas configurações do estilo do seu modelo atual.
+Todas as modificações são armazenadas em um arquivo de configuração local e estão protegidas contra atualizações.
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/pt-br/lang.php b/lib/plugins/styling/lang/pt-br/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..b7ac1fcd83bca0f41dd7c821c57084a55784c48c
--- /dev/null
+++ b/lib/plugins/styling/lang/pt-br/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ */
+$lang['menu']                  = 'Configurações de estilo do modelo';
+$lang['js']['loader']          = 'A visualização está carregando...<br />Caso essa mensagem não desapareça, pode ter algum problema com os seus valores.';
+$lang['js']['popup']           = 'Abrir como um popup';
+$lang['error']                 = 'Desculpe, mas esse modelo não suporta essa funcionalidade.';
+$lang['btn_preview']           = 'Ver alterações';
+$lang['btn_save']              = 'Salvar alterações';
+$lang['btn_reset']             = 'Eliminar as alterações atuais';
+$lang['btn_revert']            = 'Reverter o estilo para os padrões do modelo';
+$lang['__text__']              = 'Cor principal do texto';
+$lang['__background__']        = 'Cor principal do fundo';
+$lang['__text_alt__']          = 'Cor alternativa do texto';
+$lang['__background_alt__']    = 'Cor alternativa do fundo';
+$lang['__text_neu__']          = 'Cor neutra do texto';
+$lang['__background_neu__']    = 'Cor neutra do fundo';
+$lang['__border__']            = 'Cor da borda';
+$lang['__highlight__']         = 'Cor do destaque (primariamente em resultados da pesquisa)';
diff --git a/lib/plugins/styling/lang/pt/lang.php b/lib/plugins/styling/lang/pt/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..6929a40dc4487dff22efb6db95740a1f70dcd132
--- /dev/null
+++ b/lib/plugins/styling/lang/pt/lang.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Alfredo Silva <alfredo.silva@sky.com>
+ */
+$lang['js']['popup']           = 'Abrir como uma janela extra';
+$lang['error']                 = 'Desculpe, este modelo não suporta esta funcionalidade.';
+$lang['btn_preview']           = 'Pré-visualizar alterações';
+$lang['btn_save']              = 'Guardar alterações';
+$lang['btn_reset']             = 'Reiniciar alterações atuais';
+$lang['__text__']              = 'Cor do texto principal';
diff --git a/lib/plugins/styling/lang/ru/intro.txt b/lib/plugins/styling/lang/ru/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3a0141149fd83082249cc62705b7ecfcafbee11e
--- /dev/null
+++ b/lib/plugins/styling/lang/ru/intro.txt
@@ -0,0 +1 @@
+Этот инструмент позволяет изменять стилевые настройки выбранного шаблона. Все изменения хранятся в файле конфигурации и защищены от сброса при обновлении.
diff --git a/lib/plugins/styling/lang/ru/lang.php b/lib/plugins/styling/lang/ru/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..beda17619eb52fc2c27a1faea19ffc2d58e88a38
--- /dev/null
+++ b/lib/plugins/styling/lang/ru/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author RainbowSpike <1@2.ru>
+ */
+$lang['menu']                  = 'Настройки стилей шаблона';
+$lang['js']['loader']          = 'Загружается предпросмотр...<br />Если здесь случился сбой, ваши настройки могут быть сброшены';
+$lang['js']['popup']           = 'Открыть во всплывающем окне';
+$lang['error']                 = 'Этот шаблон не поддерживает такой функционал.';
+$lang['btn_preview']           = 'Просмотреть изменения';
+$lang['btn_save']              = 'Сохранить изменения';
+$lang['btn_reset']             = 'Сбросить сделанные изменения';
+$lang['btn_revert']            = 'Откатить стили к исходным для шаблона';
+$lang['__text__']              = 'Цвет текста';
+$lang['__background__']        = 'Цвет фона';
+$lang['__text_alt__']          = 'Второй цвет текста';
+$lang['__background_alt__']    = 'Второй цвет фона';
+$lang['__text_neu__']          = 'Нейтральный цвет текста';
+$lang['__background_neu__']    = 'Нейтральный цвет фона';
+$lang['__border__']            = 'Цвет границ';
+$lang['__highlight__']         = 'Цвет подсветки (в основном для результатов поиска)';
diff --git a/lib/plugins/styling/lang/sk/lang.php b/lib/plugins/styling/lang/sk/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..f1017e5c11458184c360b4f0107b8f7bd864629a
--- /dev/null
+++ b/lib/plugins/styling/lang/sk/lang.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['btn_preview']           = 'Náhľad zmien';
+$lang['btn_save']              = 'Uloženie zmien';
+$lang['btn_reset']             = 'Zruš prevedené zmeny';
+$lang['__text__']              = 'Primárna farba textu';
+$lang['__background__']        = 'Primárna farba pozadia';
+$lang['__text_alt__']          = 'Alternatívna farba textu';
+$lang['__background_alt__']    = 'Alternatívna farba pozadia';
+$lang['__text_neu__']          = 'Neutrálna farba textu';
+$lang['__background_neu__']    = 'Neutrálna farba pozadia';
+$lang['__border__']            = 'Farba okraja';
+$lang['__highlight__']         = 'Farba zvýraznenia (zvyčajne výsledkov vyhľadávania)';
diff --git a/lib/plugins/styling/lang/zh-tw/lang.php b/lib/plugins/styling/lang/zh-tw/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce4a9a960ce9b82725283636e3682fed8e0cdc57
--- /dev/null
+++ b/lib/plugins/styling/lang/zh-tw/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Liou, Jhe-Yu <lioujheyu@gmail.com>
+ */
+$lang['menu']                  = '模板風格設定';
+$lang['error']                 = '抱歉,該模板不支持這個功能';
+$lang['btn_preview']           = '預覽';
+$lang['btn_save']              = '儲存';
+$lang['btn_reset']             = '重設';
+$lang['btn_revert']            = '將風格復原至模板預設值';
+$lang['__text__']              = '主要文字顏色';
+$lang['__background__']        = '主要背景顏色';
diff --git a/lib/plugins/styling/lang/zh/intro.txt b/lib/plugins/styling/lang/zh/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..709171247457133e6b80e462a2c7ec18a49aa4e0
--- /dev/null
+++ b/lib/plugins/styling/lang/zh/intro.txt
@@ -0,0 +1 @@
+这个工具可以让您对当前选中的模板的某些样式设置进行改变。所有改动会保存在一个本地配置文件中,不会被升级所影响。
\ No newline at end of file
diff --git a/lib/plugins/styling/lang/zh/lang.php b/lib/plugins/styling/lang/zh/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..805d070dfcdd5374f6b927948ea079fb290286d1
--- /dev/null
+++ b/lib/plugins/styling/lang/zh/lang.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['menu']                  = '模板样式设置';
+$lang['js']['loader']          = '正在载入预览...<br />如果本句一直没有消失,您的设置可能有错';
+$lang['js']['popup']           = '作为弹出窗口打开';
+$lang['error']                 = '抱歉,这个模板不支持这项功能。';
+$lang['btn_preview']           = '预览改动';
+$lang['btn_save']              = '保存改动';
+$lang['btn_reset']             = '重置当前改动';
+$lang['btn_revert']            = '回退样式到模板的默认值';
+$lang['__text__']              = '主要的字体颜色';
+$lang['__background__']        = '主要的背景颜色';
+$lang['__text_alt__']          = '备选字体的颜色';
+$lang['__background_alt__']    = '备选背景的颜色';
+$lang['__text_neu__']          = '中性字体的颜色';
+$lang['__background_neu__']    = '中性背景的颜色';
+$lang['__border__']            = '边框颜色';
+$lang['__highlight__']         = '高亮颜色 (主要用于搜索结果)';
diff --git a/lib/plugins/styling/plugin.info.txt b/lib/plugins/styling/plugin.info.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9f002e28258740811e89466cb90fa8ad923105a1
--- /dev/null
+++ b/lib/plugins/styling/plugin.info.txt
@@ -0,0 +1,7 @@
+base   styling
+author Andreas Gohr
+email  andi@splitbrain.org
+date   2015-07-26
+name   styling plugin
+desc   Allows to edit style.ini replacements
+url    https://www.dokuwiki.org/plugin:styling
diff --git a/lib/plugins/styling/popup.php b/lib/plugins/styling/popup.php
new file mode 100644
index 0000000000000000000000000000000000000000..964b19e296a1d2217591e5dd3f76d3d0003168f8
--- /dev/null
+++ b/lib/plugins/styling/popup.php
@@ -0,0 +1,30 @@
+<?php
+if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__) . '/../../../');
+require_once(DOKU_INC . 'inc/init.php');
+//close session
+session_write_close();
+header('Content-Type: text/html; charset=utf-8');
+header('X-UA-Compatible: IE=edge,chrome=1');
+
+/** @var admin_plugin_styling $plugin */
+$plugin = plugin_load('admin', 'styling');
+if(!auth_isadmin()) die('only admins allowed');
+$plugin->ispopup = true;
+
+// handle posts
+$plugin->handle();
+
+// output plugin in a very minimal template:
+?><!DOCTYPE html>
+<html lang="<?php echo $conf['lang'] ?>" dir="<?php echo $lang['direction'] ?>">
+<head>
+    <meta charset="utf-8" />
+    <title><?php echo $plugin->getLang('menu') ?></title>
+    <?php tpl_metaheaders(false) ?>
+    <meta name="viewport" content="width=device-width,initial-scale=1" />
+    <?php echo tpl_favicon(array('favicon')) ?>
+</head>
+<body class="dokuwiki">
+    <?php $plugin->html() ?>
+</body>
+</html>
diff --git a/lib/plugins/styling/script.js b/lib/plugins/styling/script.js
new file mode 100644
index 0000000000000000000000000000000000000000..074c8dc40296e87004a597fa58ecdc2a39370bd8
--- /dev/null
+++ b/lib/plugins/styling/script.js
@@ -0,0 +1,97 @@
+/* DOKUWIKI:include_once iris.js */
+
+jQuery(function () {
+
+    /**
+     * Function to reload the preview styles in the main window
+     *
+     * @param {Window} target the main window
+     */
+    function applyPreview(target) {
+        // remove style
+        var $style = target.jQuery('link[rel=stylesheet][href*="lib/exe/css.php"]');
+        $style.attr('href', '');
+
+        // append the loader screen
+        var $loader = target.jQuery('#plugin__styling_loader');
+        if (!$loader.length) {
+            $loader = target.jQuery('<div id="plugin__styling_loader">' + LANG.plugins.styling.loader + '</div>');
+            $loader.css({
+                'position':         'absolute',
+                'width':            '100%',
+                'height':           '100%',
+                'top':              0,
+                'left':             0,
+                'z-index':          5000,
+                'background-color': '#fff',
+                'opacity':          '0.7',
+                'color':            '#000',
+                'font-size':        '2.5em',
+                'text-align':       'center',
+                'line-height':      1.5,
+                'padding-top':      '2em'
+            });
+            target.jQuery('body').append($loader);
+        }
+
+        // load preview in main window (timeout works around chrome updating CSS weirdness)
+        setTimeout(function () {
+            var now = new Date().getTime();
+            $style.attr('href', DOKU_BASE + 'lib/exe/css.php?preview=1&tseed=' + now);
+        }, 500);
+    }
+
+    var doreload = 1;
+    var $styling_plugin = jQuery('#plugin__styling');
+
+    // if we are not on the plugin page (either main or popup)
+    if (!$styling_plugin.length) {
+        // handle the preview cookie
+        if(DokuCookie.getValue('styling_plugin') == 1) {
+            applyPreview(window);
+        }
+        return; // nothing more to do here
+    }
+
+    /* ---- from here on we're in the popup or admin page ---- */
+
+    // add the color picker
+    $styling_plugin.find('.color').iris({});
+
+    // add button on main page
+    if (!$styling_plugin.hasClass('ispopup')) {
+        var $form = $styling_plugin.find('form.styling').first();
+        var $btn = jQuery('<button>' + LANG.plugins.styling.popup + '</button>');
+        $form.prepend($btn);
+
+        $btn.click(function (e) {
+            var windowFeatures = "menubar=no,location=no,resizable=yes,scrollbars=yes,status=false,width=500,height=500";
+            window.open(DOKU_BASE + 'lib/plugins/styling/popup.php', 'styling_popup', windowFeatures);
+            e.preventDefault();
+            e.stopPropagation();
+        }).wrap('<p></p>');
+        return; // we exit here if this is not the popup
+    }
+
+    /* ---- from here on we're in the popup only ---- */
+
+    // reload the main page on close
+    window.onunload = function(e) {
+        if(doreload) {
+            window.opener.DokuCookie.setValue('styling_plugin', 0);
+            window.opener.document.location.reload();
+        }
+        return null;
+    };
+
+    // don't reload on our own buttons
+    jQuery(':button').click(function(e){
+        doreload = false;
+    });
+
+    // on first load apply preview
+    applyPreview(window.opener);
+
+    // enable the preview cookie
+    window.opener.DokuCookie.setValue('styling_plugin', 1);
+});
diff --git a/lib/plugins/styling/style.less b/lib/plugins/styling/style.less
new file mode 100644
index 0000000000000000000000000000000000000000..be0e16a5b97baf2706b9bf78e63de895bb2257e1
--- /dev/null
+++ b/lib/plugins/styling/style.less
@@ -0,0 +1,13 @@
+#plugin__styling {
+    button.primary {
+        font-weight: bold;
+    }
+
+    [dir=rtl] & table input {
+        text-align: right;
+    }
+}
+
+#plugin__styling_loader {
+    display: none;
+}
diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php
index 86562f1dd7fc36fdebe6754295c54ad502e22b64..f90a172b3b7abedae44c903c8a5d9d93578f51b9 100644
--- a/lib/plugins/usermanager/admin.php
+++ b/lib/plugins/usermanager/admin.php
@@ -31,11 +31,12 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
     protected $_edit_userdata = array();
     protected $_disabled = '';      // if disabled set to explanatory string
     protected $_import_failures = array();
+    protected $_lastdisabled = false; // set to true if last user is unknown and last button is hence buggy
 
     /**
      * Constructor
      */
-    public function admin_plugin_usermanager(){
+    public function __construct(){
         /** @var DokuWiki_Auth_Plugin $auth */
         global $auth;
 
@@ -81,6 +82,27 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         return 2;
     }
 
+    /**
+     * @return int current start value for pageination
+     */
+    public function getStart() {
+        return $this->_start;
+    }
+
+    /**
+     * @return int number of users per page
+     */
+    public function getPagesize() {
+        return $this->_pagesize;
+    }
+
+    /**
+     * @param boolean $lastdisabled
+     */
+    public function setLastdisabled($lastdisabled) {
+        $this->_lastdisabled = $lastdisabled;
+    }
+
     /**
      * Handle user request
      *
@@ -200,9 +222,9 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
                  */
                 $groups = join(', ',$grps);
                 ptln("    <tr class=\"user_info\">");
-                ptln("      <td class=\"centeralign\"><input type=\"checkbox\" name=\"delete[".$user."]\" ".$delete_disable." /></td>");
+                ptln("      <td class=\"centeralign\"><input type=\"checkbox\" name=\"delete[".hsc($user)."]\" ".$delete_disable." /></td>");
                 if ($editable) {
-                    ptln("    <td><a href=\"".wl($ID,array('fn[edit]['.hsc($user).']' => 1,
+                    ptln("    <td><a href=\"".wl($ID,array('fn[edit]['.$user.']' => 1,
                                                            'do' => 'admin',
                                                            'page' => 'usermanager',
                                                            'sectok' => getSecurityToken())).
@@ -219,18 +241,18 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         ptln("    <tbody>");
         ptln("      <tr><td colspan=\"5\" class=\"centeralign\">");
         ptln("        <span class=\"medialeft\">");
-        ptln("          <input type=\"submit\" name=\"fn[delete]\" ".$delete_disable." class=\"button\" value=\"".$this->lang['delete_selected']."\" id=\"usrmgr__del\" />");
+        ptln("          <button type=\"submit\" name=\"fn[delete]\" id=\"usrmgr__del\" ".$delete_disable.">".$this->lang['delete_selected']."</button>");
         ptln("        </span>");
         ptln("        <span class=\"mediaright\">");
-        ptln("          <input type=\"submit\" name=\"fn[start]\" ".$page_buttons['start']." class=\"button\" value=\"".$this->lang['start']."\" />");
-        ptln("          <input type=\"submit\" name=\"fn[prev]\" ".$page_buttons['prev']." class=\"button\" value=\"".$this->lang['prev']."\" />");
-        ptln("          <input type=\"submit\" name=\"fn[next]\" ".$page_buttons['next']." class=\"button\" value=\"".$this->lang['next']."\" />");
-        ptln("          <input type=\"submit\" name=\"fn[last]\" ".$page_buttons['last']." class=\"button\" value=\"".$this->lang['last']."\" />");
+        ptln("          <button type=\"submit\" name=\"fn[start]\" ".$page_buttons['start'].">".$this->lang['start']."</button>");
+        ptln("          <button type=\"submit\" name=\"fn[prev]\" ".$page_buttons['prev'].">".$this->lang['prev']."</button>");
+        ptln("          <button type=\"submit\" name=\"fn[next]\" ".$page_buttons['next'].">".$this->lang['next']."</button>");
+        ptln("          <button type=\"submit\" name=\"fn[last]\" ".$page_buttons['last'].">".$this->lang['last']."</button>");
         ptln("        </span>");
         if (!empty($this->_filter)) {
-            ptln("    <input type=\"submit\" name=\"fn[search][clear]\" class=\"button\" value=\"".$this->lang['clear']."\" />");
+            ptln("    <button type=\"submit\" name=\"fn[search][clear]\">".$this->lang['clear']."</button>");
         }
-        ptln("        <input type=\"submit\" name=\"fn[export]\" class=\"button\" value=\"".$export_label."\" />");
+        ptln("        <button type=\"submit\" name=\"fn[export]\">".$export_label."</button>");
         ptln("        <input type=\"hidden\" name=\"do\"    value=\"admin\" />");
         ptln("        <input type=\"hidden\" name=\"page\"  value=\"usermanager\" />");
 
@@ -307,12 +329,12 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         ptln("    </thead>",$indent);
         ptln("    <tbody>",$indent);
 
-        $this->_htmlInputField($cmd."_userid",    "userid",    $this->lang["user_id"],    $user,  $this->_auth->canDo("modLogin"), $indent+6);
-        $this->_htmlInputField($cmd."_userpass",  "userpass",  $this->lang["user_pass"],  "",     $this->_auth->canDo("modPass"),  $indent+6);
-        $this->_htmlInputField($cmd."_userpass2", "userpass2", $lang["passchk"],          "",     $this->_auth->canDo("modPass"),  $indent+6);
-        $this->_htmlInputField($cmd."_username",  "username",  $this->lang["user_name"],  $name,  $this->_auth->canDo("modName"),  $indent+6);
-        $this->_htmlInputField($cmd."_usermail",  "usermail",  $this->lang["user_mail"],  $mail,  $this->_auth->canDo("modMail"),  $indent+6);
-        $this->_htmlInputField($cmd."_usergroups","usergroups",$this->lang["user_groups"],$groups,$this->_auth->canDo("modGroups"),$indent+6);
+        $this->_htmlInputField($cmd."_userid",    "userid",    $this->lang["user_id"],    $user,  $this->_auth->canDo("modLogin"),   true, $indent+6);
+        $this->_htmlInputField($cmd."_userpass",  "userpass",  $this->lang["user_pass"],  "",     $this->_auth->canDo("modPass"),   false, $indent+6);
+        $this->_htmlInputField($cmd."_userpass2", "userpass2", $lang["passchk"],          "",     $this->_auth->canDo("modPass"),   false, $indent+6);
+        $this->_htmlInputField($cmd."_username",  "username",  $this->lang["user_name"],  $name,  $this->_auth->canDo("modName"),    true, $indent+6);
+        $this->_htmlInputField($cmd."_usermail",  "usermail",  $this->lang["user_mail"],  $mail,  $this->_auth->canDo("modMail"),    true, $indent+6);
+        $this->_htmlInputField($cmd."_usergroups","usergroups",$this->lang["user_groups"],$groups,$this->_auth->canDo("modGroups"), false, $indent+6);
 
         if ($this->_auth->canDo("modPass")) {
             if ($cmd == 'add') {
@@ -334,11 +356,11 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
 
         // save current $user, we need this to access details if the name is changed
         if ($user)
-          ptln("          <input type=\"hidden\" name=\"userid_old\"  value=\"".$user."\" />",$indent);
+          ptln("          <input type=\"hidden\" name=\"userid_old\"  value=\"".hsc($user)."\" />",$indent);
 
         $this->_htmlFilterSettings($indent+10);
 
-        ptln("          <input type=\"submit\" name=\"fn[".$cmd."]\" class=\"button\" value=\"".$this->lang[$cmd]."\" />",$indent);
+        ptln("          <button type=\"submit\" name=\"fn[".$cmd."]\">".$this->lang[$cmd]."</button>",$indent);
         ptln("        </td>",$indent);
         ptln("      </tr>",$indent);
         ptln("    </tbody>",$indent);
@@ -347,7 +369,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         if ($notes) {
             ptln("    <ul class=\"notes\">");
             foreach ($notes as $note) {
-                ptln("      <li><span class=\"li\">".$note."</span></li>",$indent);
+                ptln("      <li><span class=\"li\">".$note."</li>",$indent);
             }
             ptln("    </ul>");
         }
@@ -363,9 +385,10 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
      * @param string $label
      * @param string $value
      * @param bool   $cando whether auth backend is capable to do this action
+     * @param bool   $required is this field required?
      * @param int $indent
      */
-    protected function _htmlInputField($id, $name, $label, $value, $cando, $indent=0) {
+    protected function _htmlInputField($id, $name, $label, $value, $cando, $required, $indent=0) {
         $class = $cando ? '' : ' class="disabled"';
         echo str_pad('',$indent);
 
@@ -379,12 +402,15 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
             $fieldtype = 'text';
             $autocomp  = '';
         }
+        $value = hsc($value);
 
         echo "<tr $class>";
         echo "<td><label for=\"$id\" >$label: </label></td>";
         echo "<td>";
         if($cando){
-            echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit\" $autocomp />";
+            $req = '';
+            if($required) $req = 'required="required"';
+            echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit\" $autocomp $req />";
         }else{
             echo "<input type=\"hidden\" name=\"$name\" value=\"$value\" />";
             echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit disabled\" disabled=\"disabled\" />";
@@ -433,7 +459,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         ptln('  <form action="'.wl($ID).'" method="post" enctype="multipart/form-data">',$indent);
         formSecurityToken();
         ptln('    <label>'.$this->lang['import_userlistcsv'].'<input type="file" name="import" /></label>',$indent);
-        ptln('    <input type="submit" name="fn[import]" value="'.$this->lang['import'].'" />',$indent);
+        ptln('    <button type="submit" name="fn[import]">'.$this->lang['import'].'</button>',$indent);
         ptln('    <input type="hidden" name="do"    value="admin" />',$indent);
         ptln('    <input type="hidden" name="page"  value="usermanager" />',$indent);
 
@@ -495,16 +521,20 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
                     $pass = auth_pwgen($user);
                 } else {
                     msg($this->lang['add_fail'], -1);
+                    msg($this->lang['addUser_error_missing_pass'], -1);
                     return false;
                 }
             } else {
                 if (!$this->_verifyPassword($pass,$passconfirm)) {
+                    msg($this->lang['add_fail'], -1);
+                    msg($this->lang['addUser_error_pass_not_identical'], -1);
                     return false;
                 }
             }
         } else {
             if (!empty($pass)){
                 msg($this->lang['add_fail'], -1);
+                msg($this->lang['addUser_error_modPass_disabled'], -1);
                 return false;
             }
         }
@@ -512,10 +542,13 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         if ($this->_auth->canDo('modName')){
             if (empty($name)){
                 msg($this->lang['add_fail'], -1);
+                msg($this->lang['addUser_error_name_missing'], -1);
                 return false;
             }
         } else {
             if (!empty($name)){
+                msg($this->lang['add_fail'], -1);
+                msg($this->lang['addUser_error_modName_disabled'], -1);
                 return false;
             }
         }
@@ -523,10 +556,13 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
         if ($this->_auth->canDo('modMail')){
             if (empty($mail)){
                 msg($this->lang['add_fail'], -1);
+                msg($this->lang['addUser_error_mail_missing'], -1);
                 return false;
             }
         } else {
             if (!empty($mail)){
+                msg($this->lang['add_fail'], -1);
+                msg($this->lang['addUser_error_modMail_disabled'], -1);
                 return false;
             }
         }
@@ -540,6 +576,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
             }
         } else {
             msg($this->lang['add_fail'], -1);
+            msg($this->lang['addUser_error_create_event_failed'], -1);
         }
 
         return $ok;
@@ -836,6 +873,10 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
             $buttons['last'] = $buttons['next'] = (($this->_start + $this->_pagesize) >= $this->_user_total) ? $disabled : '';
         }
 
+        if ($this->_lastdisabled) {
+            $buttons['last'] = $disabled;
+        }
+
         return $buttons;
     }
 
diff --git a/lib/plugins/usermanager/images/search.png b/lib/plugins/usermanager/images/search.png
index e9dabc11ec18b16b320a6a3caed01bf46539ad00..3f2a0b53b8d2948dd6666848eb6c9aa5ae4f923f 100644
Binary files a/lib/plugins/usermanager/images/search.png and b/lib/plugins/usermanager/images/search.png differ
diff --git a/lib/plugins/usermanager/lang/bg/lang.php b/lib/plugins/usermanager/lang/bg/lang.php
index aadf7651284797489889ab3ebdfa64f0753fd697..f98cc8c4044fb4f0ceab31686e5a96df46608bb0 100644
--- a/lib/plugins/usermanager/lang/bg/lang.php
+++ b/lib/plugins/usermanager/lang/bg/lang.php
@@ -28,6 +28,10 @@ $lang['search']                = 'Търсене';
 $lang['search_prompt']         = 'Търси';
 $lang['clear']                 = 'Обновяване на търсенето';
 $lang['filter']                = 'Филтър';
+$lang['export_all']            = 'Износ на всички потребители (CSV)';
+$lang['import']                = 'Импорт на нови потребители';
+$lang['line']                  = 'Ред №';
+$lang['error']                 = 'Съобщение за грешка';
 $lang['summary']               = 'Показване на потребители %1$d-%2$d от %3$d намерени. Общо %4$d потребителя.';
 $lang['nonefound']             = 'Не са намерени потребители. Общо %d потребителя.';
 $lang['delete_ok']             = '%d изтрити потребителя';
@@ -48,3 +52,8 @@ $lang['add_ok']                = 'Добавянето на потребител
 $lang['add_fail']              = 'Добавянето на потребителя се провали';
 $lang['notify_ok']             = 'Изпратено е осведомителен имейл';
 $lang['notify_fail']           = 'Изпращането на осведомителен имейл не е възможно';
+$lang['import_error_badname']  = 'Грешно потребителско име';
+$lang['import_error_badmail']  = 'Грешен имейл адрес';
+$lang['import_error_upload']   = 'Внасянето се провали. CSV файлът не може да бъде качен или е празен.';
+$lang['import_error_readfail'] = 'Внасянето се провали. Каченият файл не може да бъде прочетен.';
+$lang['import_error_create']   = 'Потребителят не може да бъде съдаден';
diff --git a/lib/plugins/usermanager/lang/ca/lang.php b/lib/plugins/usermanager/lang/ca/lang.php
index 6debd73ca119387bbfdb4869fb81e06d4fa309c0..4b07326aba08ff307325cdcc23c6f1cedd8965ed 100644
--- a/lib/plugins/usermanager/lang/ca/lang.php
+++ b/lib/plugins/usermanager/lang/ca/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Catalan language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author Carles Bellver <carles.bellver@gmail.com>
  * @author carles.bellver@gmail.com
  * @author carles.bellver@cent.uji.es
diff --git a/lib/plugins/usermanager/lang/cs/lang.php b/lib/plugins/usermanager/lang/cs/lang.php
index 6130fccd88e7aee6e333f463a3a28a34aaddfe62..3cd42efcb55b85419dda3f5681760b59879a511c 100644
--- a/lib/plugins/usermanager/lang/cs/lang.php
+++ b/lib/plugins/usermanager/lang/cs/lang.php
@@ -76,3 +76,11 @@ $lang['import_error_readfail'] = 'Import selhal. Nelze číst nahraný soubor.';
 $lang['import_error_create']   = 'Nelze vytvořit uživatele';
 $lang['import_notify_fail']    = 'Importovanému uživateli %s s e-mailem %s nemohlo být zasláno upozornění.';
 $lang['import_downloadfailures'] = 'Stáhnout chyby pro nápravu jako CVS';
+$lang['addUser_error_missing_pass'] = 'Buď prosím nastavte heslo nebo aktivujte upozorňování uživatel aby fungovalo vytváření hesel.';
+$lang['addUser_error_pass_not_identical'] = 'Zadaná hesla nebyla shodná.';
+$lang['addUser_error_modPass_disabled'] = 'Změna hesel je momentálně zákázána.';
+$lang['addUser_error_name_missing'] = 'Zadejte prosím jméno nového uživatele.';
+$lang['addUser_error_modName_disabled'] = 'Změna jmen je momentálně zákázána.';
+$lang['addUser_error_mail_missing'] = 'Zadejte prosím emailovou adresu nového uživatele.';
+$lang['addUser_error_modMail_disabled'] = 'Změna emailové adresy je momentálně zákázána.';
+$lang['addUser_error_create_event_failed'] = 'Zásuvný modul zabránil přidání nového uživatele. Pro více informací si prohlédněte další možné zprávy.';
diff --git a/lib/plugins/usermanager/lang/cy/add.txt b/lib/plugins/usermanager/lang/cy/add.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c804e531d91831df5e3315b92442ec31bbc8b8a6
--- /dev/null
+++ b/lib/plugins/usermanager/lang/cy/add.txt
@@ -0,0 +1 @@
+===== Ychwanegu defnyddiwr =====
diff --git a/lib/plugins/usermanager/lang/cy/delete.txt b/lib/plugins/usermanager/lang/cy/delete.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a81f3a9896ccbcd072f74aed26e0192c10e37236
--- /dev/null
+++ b/lib/plugins/usermanager/lang/cy/delete.txt
@@ -0,0 +1 @@
+===== Dileu defnyddiwr =====
diff --git a/lib/plugins/usermanager/lang/cy/edit.txt b/lib/plugins/usermanager/lang/cy/edit.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3fcb6d1d2272756455e6e9bda710954267f7a35d
--- /dev/null
+++ b/lib/plugins/usermanager/lang/cy/edit.txt
@@ -0,0 +1 @@
+===== Golygu defnyddiwr =====
diff --git a/lib/plugins/usermanager/lang/cy/import.txt b/lib/plugins/usermanager/lang/cy/import.txt
new file mode 100644
index 0000000000000000000000000000000000000000..211e8cf24f7e7dcc9b5fb5a71dc7a64aad03c9de
--- /dev/null
+++ b/lib/plugins/usermanager/lang/cy/import.txt
@@ -0,0 +1,9 @@
+===== Swmp Mewnforio Defnyddwyr =====
+
+Mae hwn angen ffeil CSV o ddefnyddwyr gydag o leiaf pedair colofn.
+Mae'n rhaid i'r colofnau gynnwys, mewn trefn: id-defnyddiwr, enw llawn, cyfeiriad ebost a grwpiau.
+Dylai'r meysydd CSV gael eu gwahanu gan goma (,) a llinynnau eu hamffinio gan ddyfynodau (%%""%%). Gall ôl-slaes (\) ei ddefnyddio ar gyfer glanhau (escaping).
+Am enghraifft o ffeil addas, ceisiwch y swyddogaeth "Allforio Defnyddwyr" uchod.
+Caiff id-defnyddiwr dyblygiedig eu hanwybyddu.
+
+Generadwyd cyfrinair a'i ebostio i bob defnyddiwr sydd wedi'i fewnforio'n llwyddiannus.
diff --git a/lib/plugins/usermanager/lang/cy/intro.txt b/lib/plugins/usermanager/lang/cy/intro.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a381a30764bd6b79fe4b87bd3f70cbaa4ec70688
--- /dev/null
+++ b/lib/plugins/usermanager/lang/cy/intro.txt
@@ -0,0 +1 @@
+====== Rheolwr Defnyddwyr ======
diff --git a/lib/plugins/usermanager/lang/cy/lang.php b/lib/plugins/usermanager/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..5120d39e24d043db945d1ec9d99748ac42d1eb26
--- /dev/null
+++ b/lib/plugins/usermanager/lang/cy/lang.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Welsh language file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Alan Davies <ben.brynsadler@gmail.com>
+ */
+
+$lang['menu'] = 'Rheolwr Defnyddwyr';
+
+// custom language strings for the plugin
+$lang['noauth']      = '(dilysiad defnddwyr ddim ar gael)';
+$lang['nosupport']   = '(rheolaeth defnyddwyr heb ei chynnal)';
+
+$lang['badauth']     = 'mecanwaith dilysu annilys';     // should never be displayed!
+
+$lang['user_id']     = 'Defnyddiwr';
+$lang['user_pass']   = 'Cyfrinair';
+$lang['user_name']   = 'Enw Cywir';
+$lang['user_mail']   = 'Ebost';
+$lang['user_groups'] = 'Grwpiau';
+
+$lang['field']       = 'Maes';
+$lang['value']       = 'Gwerth';
+$lang['add']         = 'Ychwanegu';
+$lang['delete']      = 'Dileu';
+$lang['delete_selected'] = 'Dileu\'r Dewisiadau';
+$lang['edit']        = 'Golygu';
+$lang['edit_prompt'] = 'Golygu\'r defnyddiwr hwn';
+$lang['modify']      = 'Cadw Newidiadau';
+$lang['search']      = 'Chwilio';
+$lang['search_prompt'] = 'Perfformio chwiliad';
+$lang['clear']       = 'Ailosod Hidlydd Chwilio';
+$lang['filter']      = 'Hidlo';
+$lang['export_all']  = 'Allforio Pob Defnyddiwr (CSV)';
+$lang['export_filtered'] = 'Allforio Rhestr Defnyddwyr wedi\'u Hidlo (CSV)';
+$lang['import']      = 'Mewnforio Defnyddwyr Newydd';
+$lang['line']        = 'Llinell rhif';
+$lang['error']       = 'Gwallneges';
+
+$lang['summary']     = 'Yn dangos %1$d-%2$d defnyddiwr allan o %3$d wedi\'u darganfod. %4$d defnyddiwr yn gyfan gwbl.';
+$lang['nonefound']   = 'Dim defnyddwyr wedi\'u darganfod. %d defnyddiwr yn gyfan gwbl.';
+$lang['delete_ok']   = 'Dilëwyd %d defnyddiwr';
+$lang['delete_fail'] = 'Dileu %d wedi methu.';
+$lang['update_ok']   = 'Diweddarwyd y defnyddiwr yn llwyddiannus';
+$lang['update_fail'] = 'Methodd diweddariad y defnyddiwr';
+$lang['update_exists'] = 'Methodd newid y defnyddair, mae\'r defnyddair hwnnw (%s) yn bodoli eisoes (caiff pob newid arall ei gyflwyno).';
+
+$lang['start']  = 'dechrau';
+$lang['prev']   = 'blaenorol';
+$lang['next']   = 'nesaf';
+$lang['last']   = 'diwethaf';
+
+// added after 2006-03-09 release
+$lang['edit_usermissing'] = 'Methu darganfod y defnyddiwr hwn. Efallai bod y defnyddair hwn wedi\'i ddileu neu wedi\'i newid mewn man arall.';
+$lang['user_notify'] = 'Hysbysu defnyddiwr';
+$lang['note_notify'] = 'Bydd ebyst hysbysu eu hanfon dim ond os ydy defnyddiwr yn derbyn cyfrinair newydd.';
+$lang['note_group'] = 'Bydd defnyddwyr newydd yn cael eu hychwanegu i\'r grŵp diofyn (%s) os na chaiff grŵp ei enwi.';
+$lang['note_pass'] = 'Caiff y cyfrinair ei generadu\'n awtomatig os caiff y maes ei adael yn wag a bod hysbysu\'r defnyddiwr wedi\'i alluogi.';
+$lang['add_ok'] = 'Ychwanegwyd y defnyddiwr yn llwyddiannus';
+$lang['add_fail'] = 'Methodd ychwanegu defnyddiwr';
+$lang['notify_ok'] = 'Anfonwyd yr ebost hysbysu';
+$lang['notify_fail'] = 'Doedd dim modd anfon yr ebost hysbysu';
+
+// import & errors
+$lang['import_userlistcsv'] = 'Ffeil rhestr defnyddwyr (CSV):  ';
+$lang['import_header'] = 'Mewnforiad Diweddaraf - Methiannau';
+$lang['import_success_count'] = 'Mewnforio Defnyddwyr: darganfuwyd %d defnyddiwr, mewnforiwyd %d yn llwyddiannus.';
+$lang['import_failure_count'] = 'Mewnforio Defnyddwyr: methodd %d. Rhestrwyd y methiannau isod.';
+$lang['import_error_fields']  = "Meysydd annigonol, darganfuwyd %d, angen 4.";
+$lang['import_error_baduserid'] = "Id-defnyddiwr ar goll";
+$lang['import_error_badname'] = 'Enw gwael';
+$lang['import_error_badmail'] = 'Cyfeiriad ebost gwael';
+$lang['import_error_upload']  = 'Methodd y Mewnforiad. Doedd dim modd lanlwytho\'r ffeil neu roedd yn wag.';
+$lang['import_error_readfail'] = 'Methodd y Mewnforiad. Methu â darllen y ffeil a lanlwythwyd.';
+$lang['import_error_create']  = 'Methu â chreu\'r defnyddiwr';
+$lang['import_notify_fail']   = 'Doedd dim modd anfon neges hysbysu i\'r defyddiwr a fewnforiwyd, %s gydag ebost %s.';
+$lang['import_downloadfailures'] = 'Lawlwytho Methiannau fel CSV er mwyn cywiro';
+
+$lang['addUser_error_missing_pass'] = 'Gosodwch gyfrinair neu trowch hysbysu defnyddwyr ymlaen i alluogi generadu cyfrineiriau.';
+$lang['addUser_error_pass_not_identical'] = '\'Dyw\'r cyfrineiriau hyn ddim yn cydweddu.';
+$lang['addUser_error_modPass_disabled'] = 'Mae newid cyfrineiriau wedi\'i analluogi\'n bresennol.';
+$lang['addUser_error_name_missing'] = 'Rhowch enw ar gyfer y defnyddiwr newydd.';
+$lang['addUser_error_modName_disabled'] = 'Mae newid enwau wedi\'i analluogi\'n bresennol.';
+$lang['addUser_error_mail_missing'] = 'Rhowch gyfeiriad ebost ar gyfer y defnyddiwr newydd.';
+$lang['addUser_error_modMail_disabled'] = 'Mae newid cyfeiriadau ebost wedi\'i analluogi\'n bresennol.';
+$lang['addUser_error_create_event_failed'] = 'Mae ategyn wedi atal ychwanegu\'r defnyddiwr newydd. Adolygwch negeseuon ychwanegol bosib am wybodaeth bellach.';
diff --git a/lib/plugins/usermanager/lang/cy/list.txt b/lib/plugins/usermanager/lang/cy/list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..653177491f70178b928ebafd27c0d6f40572dcc4
--- /dev/null
+++ b/lib/plugins/usermanager/lang/cy/list.txt
@@ -0,0 +1 @@
+===== Rhestr Defnyddwyr =====
diff --git a/lib/plugins/usermanager/lang/de/lang.php b/lib/plugins/usermanager/lang/de/lang.php
index 4b297b0dc257e02a0646ff3ee65ee57fd542a434..a388eb53152f801f0b9eaf2fa31653c79f0d40c0 100644
--- a/lib/plugins/usermanager/lang/de/lang.php
+++ b/lib/plugins/usermanager/lang/de/lang.php
@@ -22,6 +22,8 @@
  * @author christian studer <cstuder@existenz.ch>
  * @author Ben Fey <benedikt.fey@beck-heun.de>
  * @author Jonas Gröger <jonas.groeger@gmail.com>
+ * @author Uwe Benzelrath <uwebenzelrath@gmail.com>
+ * @author ms <msocial@posteo.de>
  */
 $lang['menu']                  = 'Benutzerverwaltung';
 $lang['noauth']                = '(Authentifizierungssystem nicht verfügbar)';
@@ -82,3 +84,10 @@ $lang['import_error_readfail'] = 'Import fehlgeschlagen. Die hochgeladene Datei
 $lang['import_error_create']   = 'User konnte nicht angelegt werden';
 $lang['import_notify_fail']    = 'Notifikation konnte nicht an den importierten Benutzer %s (E-Mail: %s) gesendet werden.';
 $lang['import_downloadfailures'] = 'Fehler als CSV-Datei zur Korrektur herunterladen';
+$lang['addUser_error_pass_not_identical'] = 'Die eingegebenen Passwörter stimmen nicht überein.';
+$lang['addUser_error_modPass_disabled'] = 'Das bearbeiten von Passwörtern ist momentan deaktiviert';
+$lang['addUser_error_name_missing'] = 'Bitte geben sie den Namen des neuen Benutzer ein.';
+$lang['addUser_error_modName_disabled'] = 'Das bearbeiten von Namen ist momentan deaktiviert.';
+$lang['addUser_error_mail_missing'] = 'Bitte geben sie die E-Mail-Adresse des neuen Benutzer ein.';
+$lang['addUser_error_modMail_disabled'] = 'Das bearbeiten von E-Mailadressen ist momentan deaktiviert.';
+$lang['addUser_error_create_event_failed'] = 'Ein Plug-in hat das hinzufügen des neuen Benutzers verhindert. Für weitere Informationen, sehen Sie sich mögliche andere Meldungen an.';
diff --git a/lib/plugins/usermanager/lang/en/import.txt b/lib/plugins/usermanager/lang/en/import.txt
index 360a0689b6748db5251a69a026966e72f7bddd14..3a1cf999ef026b79967762b77912c9ff29991a8d 100644
--- a/lib/plugins/usermanager/lang/en/import.txt
+++ b/lib/plugins/usermanager/lang/en/import.txt
@@ -2,8 +2,8 @@
 
 Requires a CSV file of users with at least four columns.
 The columns must contain, in order: user-id, full name, email address and groups.
-The CSV fields should be separated by commas (,) and strings delimited by quotation marks (%%""%%).  Backslash (\) can be used for escaping.
-For an example of a suitable file, try the "Export Users" function above.  
+The CSV fields should be separated by commas (,) and strings delimited by quotation marks (%%""%%). Backslash (\) can be used for escaping.
+For an example of a suitable file, try the "Export Users" function above.
 Duplicate user-ids will be ignored.
 
 A password will be generated and emailed to each successfully imported user.
diff --git a/lib/plugins/usermanager/lang/en/lang.php b/lib/plugins/usermanager/lang/en/lang.php
index b55ecc998e9d9643121da1c73ae2fd397b9fe351..5f47673f3855ad2150ed0bf2fe4667cb2a30b557 100644
--- a/lib/plugins/usermanager/lang/en/lang.php
+++ b/lib/plugins/usermanager/lang/en/lang.php
@@ -76,3 +76,11 @@ $lang['import_error_create']  = 'Unable to create the user';
 $lang['import_notify_fail']   = 'Notification message could not be sent for imported user, %s with email %s.';
 $lang['import_downloadfailures'] = 'Download Failures as CSV for correction';
 
+$lang['addUser_error_missing_pass'] = 'Please either set a password or activate user notification to enable password generation.';
+$lang['addUser_error_pass_not_identical'] = 'The entered passwords were not identical.';
+$lang['addUser_error_modPass_disabled'] = 'Modifing passwords is currently disabled';
+$lang['addUser_error_name_missing'] = 'Please enter a name for the new user.';
+$lang['addUser_error_modName_disabled'] = 'Modifing names is currently disabled.';
+$lang['addUser_error_mail_missing'] = 'Please enter an Email-Adress for the new user.';
+$lang['addUser_error_modMail_disabled'] = 'Modifing Email-Adresses is currently disabled.';
+$lang['addUser_error_create_event_failed'] = 'A plugin prevented the new user being added. Review possible other messages for more information.';
diff --git a/lib/plugins/usermanager/lang/es/import.txt b/lib/plugins/usermanager/lang/es/import.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2482096d5505ec455feea073208ff29cafa7196b
--- /dev/null
+++ b/lib/plugins/usermanager/lang/es/import.txt
@@ -0,0 +1,9 @@
+===== Importación y carga de usuarios  =====
+
+Se requiere un archivo CSV de usuarios con al menos cuatro columnas.
+Las columnas deben contener, en este orden: Identificador de usuario, nombre completo, dirección de correo electrónico y grupos.
+Los campos CSV deben estar separados por comas (,) y las cadenas delimitadas por comillas dobles (%%""%%). Barra inversa (\\) se puede utilizar para escapar caracteres.
+Para un ejemplo de un archivo adecuado, probar la función "Exportar usuarios" de arriba.
+Valores de identificador de usuario duplicados serán ignorados.
+
+Una contraseña será generada y enviada por correo electrónico a cada usuario importado correctamente.
\ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/es/lang.php b/lib/plugins/usermanager/lang/es/lang.php
index a557eacdd0ad8d2ff610058e1879185c8ab0c08c..57752de068e4318aea9a9cf213bdf385533aa3ee 100644
--- a/lib/plugins/usermanager/lang/es/lang.php
+++ b/lib/plugins/usermanager/lang/es/lang.php
@@ -27,6 +27,8 @@
  * @author Antonio Bueno <atnbueno@gmail.com>
  * @author Antonio Castilla <antoniocastilla@trazoide.com>
  * @author Jonathan Hernández <me@jhalicea.com>
+ * @author Domingo Redal <docxml@gmail.com>
+ * @author solohazlo <solohhazlo@gmail.com>
  */
 $lang['menu']                  = 'Administración de usuarios';
 $lang['noauth']                = '(la autenticación de usuarios no está disponible)';
@@ -75,9 +77,18 @@ $lang['add_fail']              = 'Falló la creación del usuario';
 $lang['notify_ok']             = 'Se envió la notificación por correo electrónico';
 $lang['notify_fail']           = 'No se pudo enviar la notificación por correo electrónico';
 $lang['import_userlistcsv']    = 'Lista de usuarios (CSV): ';
+$lang['import_header']         = 'Importaciones Más Recientes - Fallos';
+$lang['import_success_count']  = 'Importación de usuarios: %d usuarios encontrados, %d importados correctamente.';
+$lang['import_failure_count']  = 'Importación de usuarios: %d fallaron. Los fallos se enumeran a continuación.';
+$lang['import_error_fields']   = 'Campos insuficientes, encontrados %d, se requieren 4.';
+$lang['import_error_baduserid'] = 'Identificador de usuario no encontrado';
+$lang['import_error_badname']  = 'Nombre erróneo';
 $lang['import_error_badmail']  = 'Dirección de correo electrónico incorrecta';
 $lang['import_error_upload']   = 'Error al importar. El archivo csv no se pudo cargar o está vacío.';
 $lang['import_error_readfail'] = 'Error al importar. No se puede leer el archivo subido.';
 $lang['import_error_create']   = 'No se puede crear el usuario';
 $lang['import_notify_fail']    = 'Mensaje de notificación no se ha podido enviar por el usuario importado,%s con el email %s.';
 $lang['import_downloadfailures'] = 'Descarga errores en archivo CSV para la corrección';
+$lang['addUser_error_pass_not_identical'] = 'Las contraseñas no coinciden';
+$lang['addUser_error_modPass_disabled'] = 'Está desactivado por ahora modificar contraseñas.';
+$lang['addUser_error_name_missing'] = 'Por favor teclea el nombre del nuevo usuario.';
diff --git a/lib/plugins/usermanager/lang/fa/import.txt b/lib/plugins/usermanager/lang/fa/import.txt
new file mode 100644
index 0000000000000000000000000000000000000000..562a28aa5cb71460bf9facd94712d84a4d27658e
--- /dev/null
+++ b/lib/plugins/usermanager/lang/fa/import.txt
@@ -0,0 +1,6 @@
+ =====  اضافه کردن کاربر =====
+
+برای اینکار یک فایل CSV با حداقل چهار ستون لازم است. ستون‌ها به ترتیب باید شامل id کاربر، نام کامل کاربر، آدرس ایمیل و گروه‌های کاربری او باشند.
+خانه‌های جدول CSV باید به وسیلهٔ کاما (,) و رشته‌ها با علامت نقل قول (%%""%%) از هم جدا شوند. علامت واکج‌خط (\) می‌تواند برای غیرفعال کردن معنای کاراکترها استفاده شود. برای دیدن یک نمونه از فایل مناسب، از گزینهٔ "خروجی کاربران" در بالا استفاده کنید. id های تکراری در جدول در نظر گرفته نمی‌شوند.
+
+به ازای هر کاربری که با موفقیت اضافه شود یک رمز تولید و ایمیل می‌شود.
\ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/fa/lang.php b/lib/plugins/usermanager/lang/fa/lang.php
index bb2505a2774e949afb7fe3f13e9521adce285e9e..cfa14f23b3b02e567933d29c39a3c5a9135178ad 100644
--- a/lib/plugins/usermanager/lang/fa/lang.php
+++ b/lib/plugins/usermanager/lang/fa/lang.php
@@ -12,6 +12,7 @@
  * @author AmirH Hassaneini <mytechmix@gmail.com>
  * @author Hamid <zarrabi@sharif.edu>
  * @author Mohamad Mehdi Habibi <habibi.esf@gmail.com>
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
  */
 $lang['menu']                  = 'مدیریت کاربر';
 $lang['noauth']                = '(معتبرسازی کاربر ممکن نیست)';
@@ -34,7 +35,10 @@ $lang['search']                = 'جستجو';
 $lang['search_prompt']         = 'انجام جستجو';
 $lang['clear']                 = 'بازنویسی فیلترهای جستجو';
 $lang['filter']                = 'فیلتر';
+$lang['export_all']            = 'خروجی گرفتن از تمام کاربران (CSV):';
+$lang['export_filtered']       = 'خروجی لیست فیلتر شده کاربران (CSV):';
 $lang['import']                = 'ورود کاربران جدید';
+$lang['line']                  = 'شماره خط.';
 $lang['error']                 = 'متن خطا';
 $lang['summary']               = 'نمایش کاربر %1$d-%2$d از %3$d. در کل %4$d کاربر.';
 $lang['nonefound']             = 'هیچ کاربری یافت نشد. در کل %d کاربر.';
@@ -56,3 +60,24 @@ $lang['add_ok']                = 'کاربر با موفقیت افزوده شد
 $lang['add_fail']              = 'افزودن کاربر با مشکل مواجه شد';
 $lang['notify_ok']             = 'ایمیل آگاهی‌دهنده ارسال شد';
 $lang['notify_fail']           = 'ارسال ایمیل آگاهی‌دهنده با مشکل مواجه شد';
+$lang['import_userlistcsv']    = 'فایل لیست کاربران (CSV):';
+$lang['import_header']         = 'آخرین ایمپورت - خطا';
+$lang['import_success_count']  = 'ایمپورت کاربران: %d کاربر پیدا شد، %d با موفقیت وارد شد.';
+$lang['import_failure_count']  = 'ایمپورت کاربران: %d ناموفق. موارد ناموفق در پایین فهرست شده.';
+$lang['import_error_fields']   = 'فیلدهای ناکافی. %d تا پیدا شد ولی ۴ تا لازم است.';
+$lang['import_error_baduserid'] = 'id کاربر وارد نشده';
+$lang['import_error_badname']  = 'نام نامناسب';
+$lang['import_error_badmail']  = 'ایمیل نامناسب';
+$lang['import_error_upload']   = 'ایمپورت ناموفق. امکان ایمپورت فایل csv وجود ندارد یا خالی است.';
+$lang['import_error_readfail'] = 'ایمپورت ناموفق. امکان خواندن فایل آپلود شده وجود ندارد.';
+$lang['import_error_create']   = 'امکان ساخت کاربر وجود ندارد.';
+$lang['import_notify_fail']    = 'امکان ارسال پیغام آگاهی‌رسان برای کاربر ایمپورت شده وجود ندارد، %s با ایمیل %s.';
+$lang['import_downloadfailures'] = 'دانلود خطاها به صورت CSV برای اصلاح';
+$lang['addUser_error_missing_pass'] = 'لطفا یک پسورد وارد کنید یا آگاهی‌رسان کاربر را فعال کنید تا امکان تولید پسورد ایجاد شود';
+$lang['addUser_error_pass_not_identical'] = 'پسورد وارد شده معتبر نیست.';
+$lang['addUser_error_modPass_disabled'] = 'پسوردهای تغییریافتنی غیرفعال است.';
+$lang['addUser_error_name_missing'] = 'لطفا یک نام برای کاربر جدید وارد کنید.';
+$lang['addUser_error_modName_disabled'] = 'نام‌های تغییریافتنی غیر فعال است.';
+$lang['addUser_error_mail_missing'] = 'لطفا یک نشانی ایمیل برای کاربر جدید وارد نمایید.';
+$lang['addUser_error_modMail_disabled'] = 'ایمیل‌های تغییریافتنی غیر فعال است.';
+$lang['addUser_error_create_event_failed'] = 'افزونه از اضافه شدن کاربر جدید جلوگیری کرد. برای اطلاعات بیشتر پیغام‌های احتمالی دیگر را مطالعه کنید.';
diff --git a/lib/plugins/usermanager/lang/fr/lang.php b/lib/plugins/usermanager/lang/fr/lang.php
index dd0e64fc4d6433f177fe0e0f2e7d06d70bbc3bc8..eef81c6c5bf0fd98f68d864c2d5e53054a875311 100644
--- a/lib/plugins/usermanager/lang/fr/lang.php
+++ b/lib/plugins/usermanager/lang/fr/lang.php
@@ -15,15 +15,15 @@
  * @author Florian Gaub <floriang@floriang.net>
  * @author Samuel Dorsaz samuel.dorsaz@novelion.net
  * @author Johan Guilbaud <guilbaud.johan@gmail.com>
- * @author schplurtz@laposte.net
  * @author skimpax@gmail.com
  * @author Yannick Aure <yannick.aure@gmail.com>
  * @author Olivier DUVAL <zorky00@gmail.com>
  * @author Anael Mobilia <contrib@anael.eu>
  * @author Bruno Veilleux <bruno.vey@gmail.com>
  * @author Antoine Turmel <geekshadow@gmail.com>
- * @author schplurtz <Schplurtz@laposte.net>
  * @author Jérôme Brandt <jeromebrandt@gmail.com>
+ * @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
+ * @author Olivier Humbert <trebmuh@tuxfamily.org>
  */
 $lang['menu']                  = 'Gestion des utilisateurs';
 $lang['noauth']                = '(authentification de l\'utilisateur non disponible)';
@@ -84,3 +84,11 @@ $lang['import_error_readfail'] = 'L\'import a échoué. Impossible de lire le fi
 $lang['import_error_create']   = 'Impossible de créer l\'utilisateur';
 $lang['import_notify_fail']    = 'Impossible d\'expédier une notification à l\'utilisateur importé %s, adresse %s.';
 $lang['import_downloadfailures'] = 'Télécharger les erreurs au format CSV pour correction';
+$lang['addUser_error_missing_pass'] = 'Veuillez saisir un mot de passe ou activer la notification à l\'utilisateur pour permettre la génération d\'un mot de passe.';
+$lang['addUser_error_pass_not_identical'] = 'Les mots de passe saisis diffèrent.';
+$lang['addUser_error_modPass_disabled'] = 'La modification des mots de passe est actuellement désactivée.';
+$lang['addUser_error_name_missing'] = 'Veuillez saisir un nom pour le nouvel utilisateur.';
+$lang['addUser_error_modName_disabled'] = 'La modification des noms est actuellement désactivée.';
+$lang['addUser_error_mail_missing'] = 'Veuillez saisir une adressse de courriel pour le nouvel utilisateur.';
+$lang['addUser_error_modMail_disabled'] = 'La modification des adresses de courriel est actuellement désactivée.';
+$lang['addUser_error_create_event_failed'] = 'Un greffon a empêché l\'ajout du nouvel utilisateur. Examinez les autres messages potentiels pour obtenir de plus amples informations.';
diff --git a/lib/plugins/usermanager/lang/it/import.txt b/lib/plugins/usermanager/lang/it/import.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ed7b0001183d9f8a2c1e7111aec9ae779a5e4e3f
--- /dev/null
+++ b/lib/plugins/usermanager/lang/it/import.txt
@@ -0,0 +1,9 @@
+===== Importazione Bulk di utente =====
+
+Richiesto un file CSV di utenti con almeno quattro colonne.
+Le colonne devono contenere, in ordine: ID utente, nome completo, indirizzo e-mail e gruppi.
+I campi CSV devono essere separati da una virgola (,) e le stringhe delimitate con apici (%%""%%). Il backslash (\) può essere usato come carattere di escape, cioè per indicare che il carattere successivo deve essere trattato in maniera speciale.
+Per un esempio di file tipo, prova la funzione "Esporta Utenti" che trovi qui sopra.
+Verranno ignorati gli ID utenti duplicati.
+
+Verrà generata una password ed inviata via e-mail ad ogni utente correttamente importato. 
\ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/it/lang.php b/lib/plugins/usermanager/lang/it/lang.php
index ffded3481af1d33a162dad226b60d63bc32e7ec4..fe52d5e91a877b78ac552805670303dbf123d80b 100644
--- a/lib/plugins/usermanager/lang/it/lang.php
+++ b/lib/plugins/usermanager/lang/it/lang.php
@@ -18,6 +18,7 @@
  * @author Claudio Lanconelli <lancos@libero.it>
  * @author Francesco <francesco.cavalli@hotmail.com>
  * @author Fabio <fabioslurp@yahoo.it>
+ * @author Torpedo <dgtorpedo@gmail.com>
  */
 $lang['menu']                  = 'Gestione Utenti';
 $lang['noauth']                = '(autenticazione non disponibile)';
@@ -65,6 +66,8 @@ $lang['add_ok']                = 'Utente aggiunto correttamente';
 $lang['add_fail']              = 'Aggiunta utente fallita';
 $lang['notify_ok']             = 'Email di notifica inviata';
 $lang['notify_fail']           = 'L\'email di notifica non può essere inviata';
+$lang['import_userlistcsv']    = 'File lista utente (CSV):';
+$lang['import_header']         = 'Importazioni più recenti - Non riuscite';
 $lang['import_success_count']  = 'Importazione utenti: %d utenti trovati, %d utenti importati con successo.';
 $lang['import_failure_count']  = 'Importazione utenti: %d falliti. Errori riportati qui sotto.';
 $lang['import_error_fields']   = 'Campi insufficienti, trovati %d, richiesti 4.';
@@ -74,3 +77,13 @@ $lang['import_error_badmail']  = 'Indirizzo email errato';
 $lang['import_error_upload']   = 'Importazione fallita. Il file CSV non può essere caricato, o è vuoto.';
 $lang['import_error_readfail'] = 'Importazione in errore. Impossibile leggere i file caricati.';
 $lang['import_error_create']   = 'Impossibile creare l\'utente';
+$lang['import_notify_fail']    = 'Non è stato possibile inviare un messaggio di notifica per l\'utente importato %s con e-mail %s.';
+$lang['import_downloadfailures'] = 'Scarica operazioni non riuscite come CSV per correzione';
+$lang['addUser_error_missing_pass'] = 'Imposta una password oppure attiva la notifica utente per abilitare la generazione password.';
+$lang['addUser_error_pass_not_identical'] = 'Le password inserite non sono identiche.';
+$lang['addUser_error_modPass_disabled'] = 'La modifica delle password è al momento disabilitata.';
+$lang['addUser_error_name_missing'] = 'Inserire un nome per il nuovo utente.';
+$lang['addUser_error_modName_disabled'] = 'La modifica dei nomi è al momento disabilitata.';
+$lang['addUser_error_mail_missing'] = 'Inserire un indirizzo e-mail per il nuovo utente.';
+$lang['addUser_error_modMail_disabled'] = 'La modifica degli indirizzi e-mail è al momento disabilitata.';
+$lang['addUser_error_create_event_failed'] = 'Un plugin ha impedito che il nuovo utente venisse aggiunto. Rivedere gli altri messaggi per maggiori informazioni.';
diff --git a/lib/plugins/usermanager/lang/ja/import.txt b/lib/plugins/usermanager/lang/ja/import.txt
index 6af87c263e750dd28e0636b92b714d44a295407d..4987df0e3b8a3ded7f492da1db19c72ad9c89de4 100644
--- a/lib/plugins/usermanager/lang/ja/import.txt
+++ b/lib/plugins/usermanager/lang/ja/import.txt
@@ -1,7 +1,7 @@
 ===== 一括ユーザーインポート =====
 
 少なくとも4列のユーザーCSVファイルが必要です。
-列の順序:ユーザーID、氏名、電子メールアドレス、グループ。
+列の順序: ユーザーID、フルネーム、電子メールアドレス、グループ。
 CSVフィールドはカンマ(,)区切り、文字列は引用符(%%""%%)区切りです。
 エスケープにバックスラッシュ(\)を使用できます。
 適切なファイル例は、上記の"エクスポートユーザー"機能で試して下さい。 
diff --git a/lib/plugins/usermanager/lang/ja/lang.php b/lib/plugins/usermanager/lang/ja/lang.php
index 23109f2a29a42db53abe76e43ef351b9c02eb0f2..ad55a3e8ae97e4b4060e340c2467f0533325633b 100644
--- a/lib/plugins/usermanager/lang/ja/lang.php
+++ b/lib/plugins/usermanager/lang/ja/lang.php
@@ -19,7 +19,7 @@ $lang['nosupport']             = '(ユーザー管理はサポートされて
 $lang['badauth']               = '認証のメカニズムが無効です';
 $lang['user_id']               = 'ユーザー';
 $lang['user_pass']             = 'パスワード';
-$lang['user_name']             = '氏名';
+$lang['user_name']             = 'フルネーム';
 $lang['user_mail']             = 'メールアドレス';
 $lang['user_groups']           = 'グループ';
 $lang['field']                 = 'é …ç›®';
@@ -65,10 +65,18 @@ $lang['import_success_count']  = 'ユーザーインポート:ユーザーが%
 $lang['import_failure_count']  = 'ユーザーインポート:%d件が失敗しました。失敗は次のとおりです。';
 $lang['import_error_fields']   = '列の不足(4列必要)が%d件ありました。';
 $lang['import_error_baduserid'] = '欠落したユーザーID';
-$lang['import_error_badname']  = '不正な氏名';
+$lang['import_error_badname']  = '不正なフルネーム';
 $lang['import_error_badmail']  = '不正な電子メールアドレス';
 $lang['import_error_upload']   = 'インポートが失敗しました。CSVファイルをアップロードできなかったか、ファイルが空です。';
 $lang['import_error_readfail'] = 'インポートが失敗しました。アップロードされたファイルが読込できません。';
 $lang['import_error_create']   = 'ユーザーが作成できません。';
 $lang['import_notify_fail']    = '通知メッセージがインポートされたユーザー(%s)・電子メールアドレス(%s)に送信できませんでした。';
 $lang['import_downloadfailures'] = '修正用に失敗を CSVファイルとしてダウンロードする。';
+$lang['addUser_error_missing_pass'] = 'パスワードを設定するかパスワードの自動生成できるようにユーザーへの通知を有効にして下さい。';
+$lang['addUser_error_pass_not_identical'] = '入力されたパスワードは同一ではありません。';
+$lang['addUser_error_modPass_disabled'] = 'パスワードの変更は現在無効になっています。';
+$lang['addUser_error_name_missing'] = '新規ユーザーのフルネームを入力してください。';
+$lang['addUser_error_modName_disabled'] = 'フルネームの変更は現在無効になっています。';
+$lang['addUser_error_mail_missing'] = '新規ユーザーのメールアドレスを入力してください。';
+$lang['addUser_error_modMail_disabled'] = 'メールアドレスの変更は現在無効になっています。';
+$lang['addUser_error_create_event_failed'] = 'プラグインが新規ユーザーの追加を抑止しました。詳細については、他のメッセージで確認できます。';
diff --git a/lib/plugins/usermanager/lang/ko/lang.php b/lib/plugins/usermanager/lang/ko/lang.php
index bc76470e84911dd059a22bf5ee0dbfe1254b042a..af020a72df9401c29577005f4b16ee8389c02ba5 100644
--- a/lib/plugins/usermanager/lang/ko/lang.php
+++ b/lib/plugins/usermanager/lang/ko/lang.php
@@ -11,6 +11,7 @@
  * @author Myeongjin <aranet100@gmail.com>
  * @author Gerrit Uitslag <klapinklapin@gmail.com>
  * @author Garam <rowain8@gmail.com>
+ * @author Erial <erial2@gmail.com>
  */
 $lang['menu']                  = '사용자 관리자';
 $lang['noauth']                = '(사용자 인증을 사용할 수 없습니다)';
@@ -43,7 +44,7 @@ $lang['nonefound']             = '찾은 사용자가 없습니다. 전체 사
 $lang['delete_ok']             = '사용자 %d명이 삭제되었습니다';
 $lang['delete_fail']           = '사용자 %d명을 삭제하는 데 실패했습니다.';
 $lang['update_ok']             = '사용자 정보를 성공적으로 바꾸었습니다';
-$lang['update_fail']           = '사용자 정보를 바꾸는 데 실패했습니다';
+$lang['update_fail']           = '사용자 정보를 업데이트하는 데 실패했습니다';
 $lang['update_exists']         = '사용자 이름을 바꾸는 데 실패했습니다. 사용자 이름(%s)이 이미 존재합니다. (다른 항목의 바뀜은 적용됩니다)';
 $lang['start']                 = '시작';
 $lang['prev']                  = '이전';
@@ -53,7 +54,7 @@ $lang['edit_usermissing']      = '선택된 사용자를 찾을 수 없습니다
 $lang['user_notify']           = '사용자에게 알림';
 $lang['note_notify']           = '사용자에게 새로운 비밀번호를 준 경우에만 알림 이메일이 보내집니다.';
 $lang['note_group']            = '새로운 사용자는 어떤 그룹도 설정하지 않은 경우에 기본 그룹(%s)에 추가됩니다.';
-$lang['note_pass']             = '사용자 알림이 지정되어 있을 때 필드에 아무 값도 입력하지 않으면 비밀번호가 자동으로 만들어집니다.';
+$lang['note_pass']             = '사용자 알림이 지정되어 있을 때 필드에 아무 값도 입력하지 않으면 비밀번호가 자동으로 생성됩니다.';
 $lang['add_ok']                = '사용자를 성공적으로 추가했습니다';
 $lang['add_fail']              = '사용자 추가를 실패했습니다';
 $lang['notify_ok']             = '알림 이메일을 성공적으로 보냈습니다';
@@ -71,3 +72,11 @@ $lang['import_error_readfail'] = '가져오기를 실패했습니다. 올린 파
 $lang['import_error_create']   = '사용자를 만들 수 없습니다';
 $lang['import_notify_fail']    = '알림 메시지를 가져온 %s (이메일: %s) 사용자에게 보낼 수 없습니다.';
 $lang['import_downloadfailures'] = '교정을 위한 CSV로 다운로드 실패';
+$lang['addUser_error_missing_pass'] = '암호를 입력하시거나, 암호 생성 기능이 켜진 경우 사용자 알림을 활성화 해주십시오.';
+$lang['addUser_error_pass_not_identical'] = '입력된 암호가 일치하지 않습니다.';
+$lang['addUser_error_modPass_disabled'] = '현재 암호 변경이 금지되어있습니다';
+$lang['addUser_error_name_missing'] = '새 사용자의 이름을 넣어주세요.';
+$lang['addUser_error_modName_disabled'] = '현재 이름 변경이 금지되어있습니다.';
+$lang['addUser_error_mail_missing'] = '새 사용자의 이메일 주소를 넣어주세요.';
+$lang['addUser_error_modMail_disabled'] = '현재 이메일 주소 변경이 금지되어있습니다.';
+$lang['addUser_error_create_event_failed'] = '새 사용자 추가를 플러그인이 막았습니다. 정확한 정보를 위한 메시지를 보고해주시기 바랍니다.';
diff --git a/lib/plugins/usermanager/lang/lt/lang.php b/lib/plugins/usermanager/lang/lt/lang.php
index db3cf2d32648c347b6fc28284d51d10669517ebd..3c002930395400845bdc390a5846b33e28e59e28 100644
--- a/lib/plugins/usermanager/lang/lt/lang.php
+++ b/lib/plugins/usermanager/lang/lt/lang.php
@@ -1,7 +1,8 @@
 <?php
+
 /**
- * Lithuanian language file
- *
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
  * @author grawity <grawity@gmail.com>
  * @author audrius.klevas@gmail.com
  * @author Arunas Vaitekunas <aras@fan.lt>
diff --git a/lib/plugins/usermanager/lang/nl/lang.php b/lib/plugins/usermanager/lang/nl/lang.php
index 3f9902e141e6478ae4b1740db5fc18b3699e08d3..ea85d0f7b73e2b28cc45c2eccb5723b75a7ecba2 100644
--- a/lib/plugins/usermanager/lang/nl/lang.php
+++ b/lib/plugins/usermanager/lang/nl/lang.php
@@ -16,6 +16,7 @@
  * @author Ricardo Guijt <ricardoguijt@gmail.com>
  * @author Gerrit Uitslag <klapinklapin@gmail.com>
  * @author Rene <wllywlnt@yahoo.com>
+ * @author Wesley de Weerd <wesleytiel@gmail.com>
  */
 $lang['menu']                  = 'Gebruikersbeheer';
 $lang['noauth']                = '(gebruikersauthenticatie niet beschikbaar)';
@@ -76,3 +77,11 @@ $lang['import_error_readfail'] = 'Importeren mislukt. Lezen van het geüploade b
 $lang['import_error_create']   = 'Aanmaken van de gebruiker was niet mogelijk.';
 $lang['import_notify_fail']    = 'Notificatiebericht kon niet naar de geïmporteerde gebruiker worden verstuurd, %s met e-mail %s.';
 $lang['import_downloadfailures'] = 'Download de gevonden fouten als CSV voor correctie';
+$lang['addUser_error_missing_pass'] = 'Vul een wachtwoord in of activeer de gebruikers notificatie om een wachtwoord te genereren.';
+$lang['addUser_error_pass_not_identical'] = 'De ingevulde wachtwoorden komen niet overeen';
+$lang['addUser_error_modPass_disabled'] = 'Het aanpassen van wachtwoorden is momenteel uitgeschakeld';
+$lang['addUser_error_name_missing'] = 'Vul een naam in voor de nieuwe gebruiker';
+$lang['addUser_error_modName_disabled'] = 'Het aanpassen van namen is momenteel uitgeschakeld';
+$lang['addUser_error_mail_missing'] = 'Vul een email adres in voor de nieuwe gebruiker';
+$lang['addUser_error_modMail_disabled'] = 'Het aanpassen van uw email adres is momenteel uitgeschakeld';
+$lang['addUser_error_create_event_failed'] = 'Een plugin heeft voorkomen dat de nieuwe gebruiker wordt toegevoegd . Bekijk mogelijke andere berichten voor meer informatie.';
diff --git a/lib/plugins/usermanager/lang/pt-br/import.txt b/lib/plugins/usermanager/lang/pt-br/import.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d692bb3642a5696992abf04ec66bcea53c21a713
--- /dev/null
+++ b/lib/plugins/usermanager/lang/pt-br/import.txt
@@ -0,0 +1,9 @@
+===== Importação de Usuários em Massa =====
+
+Requer um arquivo CSV de usuários com pelo menos quatro colunas.
+As colunas devem conter, nesta ordem: id-usuário, nome completo, endereço de e-mail e grupos.
+Os campos CSV devem ser separados por vírgulas ( , ) e nomes delimitados por aspas (). Barra invertida (\ ) pode ser usado para escapar nomes.
+Para um exemplo de um arquivo adequado , tente a função Exportar usuários acima.
+Usuário ids duplicados serão ignorados.
+
+A senha será gerada e enviada para cada usuário importado com sucesso.
\ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/pt-br/lang.php b/lib/plugins/usermanager/lang/pt-br/lang.php
index 356d139ebed6ee251a6510b2ede3870fee050c22..4c6ada86201fa5230c845ea431e20e066abc4b8d 100644
--- a/lib/plugins/usermanager/lang/pt-br/lang.php
+++ b/lib/plugins/usermanager/lang/pt-br/lang.php
@@ -21,6 +21,7 @@
  * @author Leone Lisboa Magevski <leone1983@gmail.com>
  * @author Dário Estevão <darioems@gmail.com>
  * @author Juliano Marconi Lanigra <juliano.marconi@gmail.com>
+ * @author Guilherme Cardoso <guicardoso@gmail.com>
  */
 $lang['menu']                  = 'Gerenciamento de Usuários';
 $lang['noauth']                = '(o gerenciamento de usuários não está disponível)';
@@ -81,3 +82,9 @@ $lang['import_error_readfail'] = 'Falha na Importação: Habilitar para ler o ar
 $lang['import_error_create']   = 'Habilitar para criar o usuário.';
 $lang['import_notify_fail']    = 'Mensagem de notificação não pode ser enviada para o usuário importado, %s com email %s.';
 $lang['import_downloadfailures'] = 'Falhas no Download como CSV para correção';
+$lang['addUser_error_missing_pass'] = 'Por favor coloque uma senha ou ative as notificações do usuário para habilitar a geração de senhas.';
+$lang['addUser_error_pass_not_identical'] = 'As senhas fornecidas não são idênticas.';
+$lang['addUser_error_modPass_disabled'] = 'A alteração de senhas está atualmente desabilitada.';
+$lang['addUser_error_name_missing'] = 'Por favor entre com um nome para o novo usuário.';
+$lang['addUser_error_mail_missing'] = 'Por favor entre com um endereço de e-mail para o novo usuário.';
+$lang['addUser_error_create_event_failed'] = 'Uma extensão impediu que um novo usuário seja adicionado. Reveja outras mensagens para mais informações.';
diff --git a/lib/plugins/usermanager/lang/pt/lang.php b/lib/plugins/usermanager/lang/pt/lang.php
index 43ea69e53e5cea7b1cab2c55b49480e0ee835faf..86885e415e3d0a69f994874dc3acd0996d4ebb55 100644
--- a/lib/plugins/usermanager/lang/pt/lang.php
+++ b/lib/plugins/usermanager/lang/pt/lang.php
@@ -9,6 +9,9 @@
  * @author André Neves <drakferion@gmail.com>
  * @author José Campos zecarlosdecampos@gmail.com
  * @author Guido Salatino <guidorafael23@gmail.com>
+ * @author Romulo Pereira <romuloccomp@gmail.com>
+ * @author Paulo Carmino <contato@paulocarmino.com>
+ * @author Alfredo Silva <alfredo.silva@sky.com>
  */
 $lang['menu']                  = 'Gestor de Perfis';
 $lang['noauth']                = '(autenticação indisponível)';
diff --git a/lib/plugins/usermanager/lang/ru/import.txt b/lib/plugins/usermanager/lang/ru/import.txt
index c92e47b4c8051dcaee2e04d10fdbebab726bb350..22372c25460364dca6a30b42ae403f35595fd78b 100644
--- a/lib/plugins/usermanager/lang/ru/import.txt
+++ b/lib/plugins/usermanager/lang/ru/import.txt
@@ -2,7 +2,8 @@
 
 Потребуется список пользователей в файле формата CSV, состоящий из 4 столбцов. 
 Столбцы должны быть заполнены следующим образом: user-id, полное имя, эл. почта, группы. 
-Поля CSV должны быть отделены запятой (,), а строки должны быть заключены в кавычки (%%""%%). Обратный слэш используется как прерывание.
-В качестве примера можете взять список пользователей, экспортированный через «Экспорт пользователей». Повторяющиеся идентификаторы user-id будут игнорироваться.
+Поля CSV должны быть отделены запятой (,), а строки должны быть заключены в кавычки (%%""%%). Обратный слэш (\) используется как прерывание.  
+В качестве примера можете взять список пользователей, экспортированный через «Экспорт пользователей».  
+Повторяющиеся идентификаторы user-id будут игнорироваться.
 
 Пароль доступа будет сгенерирован и отправлен по почте удачно импортированному пользователю. 
\ No newline at end of file
diff --git a/lib/plugins/usermanager/lang/ru/lang.php b/lib/plugins/usermanager/lang/ru/lang.php
index 0914d7b499f23cc4e2b7f6e87d86b79701825eee..ca39b879597cbe7b3112421fb11b13e24712416f 100644
--- a/lib/plugins/usermanager/lang/ru/lang.php
+++ b/lib/plugins/usermanager/lang/ru/lang.php
@@ -22,6 +22,7 @@
  * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
  * @author Igor Degraf <igordegraf@gmail.com>
  * @author Vitaly Filatenko <kot@hacktest.net>
+ * @author dimsharav <dimsharav@gmail.com>
  */
 $lang['menu']                  = 'Управление пользователями';
 $lang['noauth']                = '(авторизация пользователей недоступна)';
@@ -45,8 +46,8 @@ $lang['search_prompt']         = 'Искать';
 $lang['clear']                 = 'Сброс фильтра поиска';
 $lang['filter']                = 'Фильтр';
 $lang['export_all']            = 'Экспорт всех пользователей (CSV)';
-$lang['export_filtered']       = 'Экспорт пользователей с фильтрацией списка (CSV)';
-$lang['import']                = 'Импорт новых пользователей';
+$lang['export_filtered']       = 'Экспорт отфильтрованного списка пользователей (CSV)';
+$lang['import']                = 'импортировать новых пользователей';
 $lang['line']                  = 'Строка №';
 $lang['error']                 = 'Ошибка';
 $lang['summary']               = 'Показаны пользователи %1$d–%2$d из %3$d найденных. Всего пользователей: %4$d.';
@@ -60,20 +61,20 @@ $lang['start']                 = 'в начало';
 $lang['prev']                  = 'назад';
 $lang['next']                  = 'вперёд';
 $lang['last']                  = 'в конец';
-$lang['edit_usermissing']      = 'Выбранный пользователь не найден. Возможно, указанный логин был удалён или изменён извне.';
-$lang['user_notify']           = 'Сообщить пользователю';
-$lang['note_notify']           = 'Письма с уведомлением высылаются только в случае получения нового пароля.';
-$lang['note_group']            = 'Если группа не указана, новые пользователи будут добавлены в группу по умолчанию (%s).';
-$lang['note_pass']             = 'Пароль будет сгенерирован автоматически, если поле оставлено пустым и включено уведомление пользователя.';
+$lang['edit_usermissing']      = 'Выбранный пользователь не найден. Возможно, указанный логин был удалён или изменён извне.';
+$lang['user_notify']           = 'Оповестить пользователя';
+$lang['note_notify']           = 'Письма с уведомлением высылаются только в случае получения нового пароля.';
+$lang['note_group']            = 'Если группа не указана, новые пользователи будут добавлены в группу по умолчанию (%s).';
+$lang['note_pass']             = 'Пароль будет сгенерирован автоматически, если поле оставлено пустым и включено уведомление пользователя.';
 $lang['add_ok']                = 'Пользователь успешно добавлен';
 $lang['add_fail']              = 'Не удалось добавить пользователя';
 $lang['notify_ok']             = 'Письмо с уведомлением отправлено';
 $lang['notify_fail']           = 'Не удалось отправить письмо с уведомлением';
 $lang['import_userlistcsv']    = 'Файл со списком пользователей (CSV):';
-$lang['import_header']         = 'Последний импорт - список ошибок';
+$lang['import_header']         = 'Последний импорт — список ошибок';
 $lang['import_success_count']  = 'Импорт пользователей: %d пользователей найдено, %d импортировано успешно.';
-$lang['import_failure_count']  = 'Импорт пользователей: %d не удалось. Список ошибок прочтите ниже.';
-$lang['import_error_fields']   = 'Не все поля заполнены. Найдено %d, а нужно 4.';
+$lang['import_failure_count']  = 'Импорт пользователей: %d не удалось. Ошибки перечислены ниже.';
+$lang['import_error_fields']   = 'Не все поля заполнены. Найдено %d, а нужно: 4.';
 $lang['import_error_baduserid'] = 'Отсутствует идентификатор пользователя';
 $lang['import_error_badname']  = 'Имя не годится';
 $lang['import_error_badmail']  = 'Адрес электронной почты не годится';
@@ -82,3 +83,10 @@ $lang['import_error_readfail'] = 'Импорт не удался. Невозмо
 $lang['import_error_create']   = 'Невозможно создать пользователя';
 $lang['import_notify_fail']    = 'Оповещение не может быть отправлено импортированному пользователю %s по электронной почте %s.';
 $lang['import_downloadfailures'] = 'Скачать ошибки в формате CSV для исправления';
+$lang['addUser_error_missing_pass'] = 'Для возможности генерации пароля, пожалуйста, установите пароль или активируйте оповещения.';
+$lang['addUser_error_pass_not_identical'] = 'Введённые ппароли не совпадают.';
+$lang['addUser_error_modPass_disabled'] = 'Изменение пароля в настоящее время невозможно.';
+$lang['addUser_error_name_missing'] = 'Укажите имя нового пользователя.';
+$lang['addUser_error_modName_disabled'] = 'Изменение имени в настоящее время невозможно.';
+$lang['addUser_error_mail_missing'] = 'Укажите адрес эл. почты нового пользователя.';
+$lang['addUser_error_modMail_disabled'] = 'Изменение e-mail в настоящее время невозможно.';
diff --git a/lib/plugins/usermanager/lang/sk/lang.php b/lib/plugins/usermanager/lang/sk/lang.php
index 535f77972a9b93a8dfe785e33e0bb065b82bc462..a3ae713953e344484b60395829305dbe04179788 100644
--- a/lib/plugins/usermanager/lang/sk/lang.php
+++ b/lib/plugins/usermanager/lang/sk/lang.php
@@ -40,7 +40,7 @@ $lang['delete_ok']             = '%d užívateľov zmazaných';
 $lang['delete_fail']           = '%d chýb vymazania.';
 $lang['update_ok']             = 'Užívateľ úspešne zmenený';
 $lang['update_fail']           = 'Chyba zmeny užívateľa';
-$lang['update_exists']         = 'Chyba zmeny užívateľa, užívateľské meno (%s) už existuje (iné zmeny budú zaznamenané).';
+$lang['update_exists']         = 'Chyba zmeny mena používateľa, používateľské meno (%s) už existuje (iné zmeny budú zaznamenané).';
 $lang['start']                 = 'prvé';
 $lang['prev']                  = 'predošlé';
 $lang['next']                  = 'ďalšie';
diff --git a/lib/plugins/usermanager/lang/zh/lang.php b/lib/plugins/usermanager/lang/zh/lang.php
index b833c6ce4650ab37846eb69b86afc9468aab8fb0..69d0c818907aa7bab2cdc3abbd8737ebac556b92 100644
--- a/lib/plugins/usermanager/lang/zh/lang.php
+++ b/lib/plugins/usermanager/lang/zh/lang.php
@@ -18,6 +18,7 @@
  * @author Rachel <rzhang0802@gmail.com>
  * @author Yangyu Huang <yangyu.huang@gmail.com>
  * @author oott123 <ip.192.168.1.1@qq.com>
+ * @author Garfield <garfield_550@outlook.com>
  */
 $lang['menu']                  = '用户管理器';
 $lang['noauth']                = '(用户认证不可用)';
@@ -78,3 +79,11 @@ $lang['import_error_readfail'] = '导入失败。无法读取上传的文件。'
 $lang['import_error_create']   = '不能创建新用户';
 $lang['import_notify_fail']    = '通知消息无法发送到导入的用户 %s,电子邮件地址是 %s。';
 $lang['import_downloadfailures'] = '下载CSV的错误信息以修正。';
+$lang['addUser_error_missing_pass'] = '请设置一个密码或者激活用户通知来启用密码生成。';
+$lang['addUser_error_pass_not_identical'] = '输入的密码不相同。';
+$lang['addUser_error_modPass_disabled'] = '修改密码已禁用';
+$lang['addUser_error_name_missing'] = '请为新用户输入一个名字。';
+$lang['addUser_error_modName_disabled'] = '修改名字已禁用';
+$lang['addUser_error_mail_missing'] = '请为新用户输入一个电子邮件地址。';
+$lang['addUser_error_modMail_disabled'] = '修改邮件地址已禁用';
+$lang['addUser_error_create_event_failed'] = '一个插件阻止了添加新用户。请查看其它可能的消息来获取更多信息。';
diff --git a/lib/plugins/usermanager/plugin.info.txt b/lib/plugins/usermanager/plugin.info.txt
index ae4f9b9ccab4ead43febf119ee0a153d1c65a830..607eca75f0de2350469fb0153a84318559371be8 100644
--- a/lib/plugins/usermanager/plugin.info.txt
+++ b/lib/plugins/usermanager/plugin.info.txt
@@ -1,7 +1,7 @@
 base   usermanager
 author Chris Smith
 email  chris@jalakai.co.uk
-date   2014-03-05
+date   2015-07-15
 name   User Manager
 desc   Manage DokuWiki user accounts
 url    http://dokuwiki.org/plugin:usermanager
diff --git a/lib/plugins/usermanager/style.css b/lib/plugins/usermanager/style.css
index d119b195a0475eb0cadb7143436f4cd9ec7f71d8..9028fed5eb58d0e66cd866864c50943d83c27442 100644
--- a/lib/plugins/usermanager/style.css
+++ b/lib/plugins/usermanager/style.css
@@ -17,7 +17,7 @@
   padding-left: 0;
   padding-right: 1.4em;
 }
-#user__manager input.button[disabled] {
+#user__manager button[disabled] {
   color: #ccc!important;
   border-color: #ccc!important;
 }
diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js
index fb61f6e48b4de063787f30c10ab9affbe18a5759..b05949a90533f97f6f094add3690dbeaeed60d76 100644
--- a/lib/scripts/behaviour.js
+++ b/lib/scripts/behaviour.js
@@ -1,37 +1,41 @@
 /**
  * Hides elements with a slide animation
  *
- * @param fn optional callback to run after hiding
+ * @param {function} fn optional callback to run after hiding
+ * @param {bool} noaria supress aria-expanded state setting
  * @author Adrian Lang <mail@adrianlang.de>
  */
-jQuery.fn.dw_hide = function(fn) {
-    this.attr('aria-expanded', 'false');
+jQuery.fn.dw_hide = function(fn, noaria) {
+    if(!noaria) this.attr('aria-expanded', 'false');
     return this.slideUp('fast', fn);
 };
 
 /**
  * Unhides elements with a slide animation
  *
- * @param fn optional callback to run after hiding
+ * @param {function} fn optional callback to run after hiding
+ * @param {bool} noaria supress aria-expanded state setting
  * @author Adrian Lang <mail@adrianlang.de>
  */
-jQuery.fn.dw_show = function(fn) {
-    this.attr('aria-expanded', 'true');
+jQuery.fn.dw_show = function(fn, noaria) {
+    if(!noaria) this.attr('aria-expanded', 'true');
     return this.slideDown('fast', fn);
 };
 
 /**
  * Toggles visibility of an element using a slide element
  *
- * @param bool the current state of the element (optional)
+ * @param {bool} state the current state of the element (optional)
+ * @param {function} fn callback after the state has been toggled
+ * @param {bool} noaria supress aria-expanded state setting
  */
-jQuery.fn.dw_toggle = function(bool, fn) {
+jQuery.fn.dw_toggle = function(state, fn, noaria) {
     return this.each(function() {
         var $this = jQuery(this);
-        if (typeof bool === 'undefined') {
-            bool = $this.is(':hidden');
+        if (typeof state === 'undefined') {
+            state = $this.is(':hidden');
         }
-        $this[bool ? "dw_show" : "dw_hide" ](fn);
+        $this[state ? "dw_show" : "dw_hide" ](fn, noaria);
     });
 };
 
@@ -107,7 +111,7 @@ var dw_behaviour = {
     quickSelect: function(){
         jQuery('select.quickselect')
             .change(function(e){ e.target.form.submit(); })
-            .closest('form').find('input[type=submit]').not('.show').hide();
+            .closest('form').find(':button').not('.show').hide();
     },
 
     /**
@@ -171,10 +175,10 @@ var dw_behaviour = {
 
         if($checked.length < 2){
             $all.attr('disabled',false);
-            jQuery('#page__revisions input[type=submit]').attr('disabled',true);
+            jQuery('#page__revisions button').attr('disabled',true);
         }else{
             $all.attr('disabled',true);
-            jQuery('#page__revisions input[type=submit]').attr('disabled',false);
+            jQuery('#page__revisions button').attr('disabled',false);
             for(var i=0; i<$checked.length; i++){
                 $checked[i].disabled = false;
                 if(i>1){
diff --git a/lib/scripts/compatibility.js b/lib/scripts/compatibility.js
index fc020cce80845d7207009b4437d60098ee06b1e5..154aeadf7266fe31697c43b759c15c2c53a2a48b 100644
--- a/lib/scripts/compatibility.js
+++ b/lib/scripts/compatibility.js
@@ -40,398 +40,3 @@ function DEPRECATED_WRAP(func, context) {
         return func.apply(context || this, arguments);
     };
 }
-
-/**
- * Handy shortcut to document.getElementById
- *
- * This function was taken from the prototype library
- *
- * @link http://prototype.conio.net/
- */
-function $() {
-    DEPRECATED('Please use the jQuery() function instead.');
-
-    var elements = new Array();
-
-    for (var i = 0; i < arguments.length; i++) {
-        var element = arguments[i];
-        if (typeof element == 'string')
-            element = document.getElementById(element);
-
-        if (arguments.length == 1)
-            return element;
-
-        elements.push(element);
-    }
-
-    return elements;
-}
-
-
-
-
-var index = {
-    throbber_delay: dw_index.throbber_delay,
-    toggle: DEPRECATED_WRAP(dw_index.toggle, dw_index),
-    treeattach: DEPRECATED_WRAP(dw_index.treeattach, dw_index)
-};
-
-var ajax_quicksearch = {
-    init: function() {
-        DEPRECATED('Use jQuery().dw_qsearch() instead');
-        jQuery('#qsearch__in').dw_qsearch({
-            output: '#qsearch__out'
-        });
-    },
-    clear_results: function() {
-        DEPRECATED('ajax_quicksearch.clear_results is removed');
-    },
-    onCompletion: function() {
-        DEPRECATED('ajax_quicksearch.onCompletion is removed');
-    }
-};
-var dw_qsearch = {
-    init: function(input, output) {
-        DEPRECATED('Use jQuery().dw_qsearch() instead');
-        jQuery(input).dw_qsearch({
-            output: output
-        });
-    },
-    clear_results: function() {
-        DEPRECATED('dw_qsearch.clear_results is removed');
-    },
-    onCompletion: function() {
-        DEPRECATED('dw_qsearch.onCompletion is removed');
-    }
-};
-
-var linkwiz = {
-    init: DEPRECATED_WRAP(dw_linkwiz.init, dw_linkwiz),
-    onEntry: DEPRECATED_WRAP(dw_linkwiz.onEntry, dw_linkwiz),
-    getResult: DEPRECATED_WRAP(dw_linkwiz.getResult, dw_linkwiz),
-    select: DEPRECATED_WRAP(dw_linkwiz.select, dw_linkwiz),
-    deselect: DEPRECATED_WRAP(dw_linkwiz.deselect, dw_linkwiz),
-    onResultClick: DEPRECATED_WRAP(dw_linkwiz.onResultClick, dw_linkwiz),
-    resultClick: DEPRECATED_WRAP(dw_linkwiz.resultClick, dw_linkwiz),
-    insertLink: DEPRECATED_WRAP(dw_linkwiz.insertLink, dw_linkwiz),
-    autocomplete: DEPRECATED_WRAP(dw_linkwiz.autocomplete, dw_linkwiz),
-    autocomplete_exec: DEPRECATED_WRAP(dw_linkwiz.autocomplete_exec, dw_linkwiz),
-    show: DEPRECATED_WRAP(dw_linkwiz.show, dw_linkwiz),
-    hide: DEPRECATED_WRAP(dw_linkwiz.hide, dw_linkwiz),
-    toggle: DEPRECATED_WRAP(dw_linkwiz.toggle, dw_linkwiz)
-};
-
-var locktimer = {
-    init: DEPRECATED_WRAP(dw_locktimer.init, dw_locktimer),
-    reset: DEPRECATED_WRAP(dw_locktimer.reset, dw_locktimer),
-    warning: DEPRECATED_WRAP(dw_locktimer.warning, dw_locktimer),
-    clear: DEPRECATED_WRAP(dw_locktimer.clear, dw_locktimer),
-    refresh: DEPRECATED_WRAP(dw_locktimer.refresh, dw_locktimer),
-    refreshed: DEPRECATED_WRAP(dw_locktimer.refreshed, dw_locktimer)
-};
-
-var media_manager = {
-    // treeattach, selectorattach, confirmattach are munched together into
-    // dw_mediamanager.init
-    attachoptions: DEPRECATED_WRAP(dw_mediamanager.attachoptions, dw_mediamanager),
-    togglekeepopen: function (event, cb) {
-        DEPRECATED('Use dw_mediamanager.toggleOption instead');
-        return dw_mediamanager.toggleOption.call(cb, 'keepopen');
-    },
-    togglehide: function (event, cb) {
-        DEPRECATED('Use dw_mediamanager.toggleOption instead');
-        return dw_mediamanager.toggleOption.call(cb, 'hide');
-    },
-    updatehide: DEPRECATED_WRAP(dw_mediamanager.updatehide, dw_mediamanager),
-    select: function (event, link) {
-        DEPRECATED('Use dw_mediamanager.select instead');
-        return dw_mediamanager.select.call(link, event);
-    },
-    initpopup: DEPRECATED_WRAP(dw_mediamanager.initpopup, dw_mediamanager),
-    insert: DEPRECATED_WRAP(dw_mediamanager.insert, dw_mediamanager),
-    list: function (event, link) {
-        DEPRECATED('Use dw_mediamanager.list instead');
-        return dw_mediamanager.list.call(link, event);
-    },
-    // toggle is handled by dw_tree
-    suggest: DEPRECATED_WRAP(dw_mediamanager.suggest, dw_mediamanager),
-    initFlashUpload: DEPRECATED_WRAP(dw_mediamanager.initFlashUpload, dw_mediamanager),
-    closePopup: function () {
-        DEPRECATED();
-        dw_mediamanager.$popup.dialog('close');
-    },
-    setalign: function (event, cb) {
-        DEPRECATED('Use dw_mediamanager.setOpt instead');
-        return dw_mediamanager.setOpt.call(this, 'align', event);
-    },
-    setlink: function (event, cb) {
-        DEPRECATED('Use dw_mediamanager.setOpt instead');
-        return dw_mediamanager.setOpt.call(this, 'link', event);
-    },
-    setsize: function (event, cb) {
-        DEPRECATED('Use dw_mediamanager.setOpt instead');
-        return dw_mediamanager.setOpt.call(this, 'size', event);
-    },
-    outSet: function (id) {
-        DEPRECATED();
-        return jQuery(id).removeClass('selected');
-    },
-    inSet: function (id) {
-        DEPRECATED();
-        return jQuery(id).addClass('selected');
-    }
-};
-
-initSizeCtl = DEPRECATED_WRAP(dw_editor.initSizeCtl);
-sizeCtl = DEPRECATED_WRAP(dw_editor.sizeCtl);
-toggleWrap = DEPRECATED_WRAP(dw_editor.toggleWrap);
-setWrap = DEPRECATED_WRAP(dw_editor.setWrap);
-
-function findPosX(object){
-    DEPRECATED('Use jQuery.offset() instead');
-    return jQuery(object).offset().left;
-}
-
-function findPosY(object){
-    DEPRECATED('Use jQuery.offset() instead');
-    return jQuery(object).offset().top;
-}
-
-function getElementsByClass(searchClass,node,tag){
-    DEPRECATED('Use jQuery() instead');
-    if(node == null) node = document;
-    if(typeof tag === 'undefined') tag = '';
-    return jQuery(node).find(tag+'.'+searchClass).toArray();
-}
-
-function prependChild(parent,element) {
-    DEPRECATED('Use jQuery.prepend() instead');
-    jQuery(parent).prepend(element);
-}
-
-function addEvent(element, type, handler) {
-    DEPRECATED('Use jQuery.bind() instead. Note that jQuery’s behaviour' +
-               ' when a handler returns false differs from addEvent’s');
-    jQuery(element).bind(type,{},function (e) {
-        // returning false in an addEvent event handler did not prevent
-        // bubbling but just canceled handlers on this node and prevented
-        // default behavior, so wrap the handler call and mimic that behavior.
-        //
-        // Refer to jQuery.event.handle().
-        var ret = handler.apply(this, Array.prototype.slice.call(arguments, 0));
-        if (typeof ret !== 'undefined') {
-            if ( ret !== false ) {
-                return ret;
-            }
-            // What jQuery does.
-            e.result = ret;
-            e.preventDefault();
-            // Not what jQuery does. This would be: event.stopPropagation();
-            // Hack it so that immediate propagation (other event handlers on
-            // this element) appears stopped without stopping the actual
-            // propagation (bubbling)
-            e.isImmediatePropagationStopped = function () { return true; };
-        }
-    });
-}
-
-function removeEvent(element, type, handler) {
-    DEPRECATED('Use jQuery.unbind() instead.');
-    jQuery(element).unbind(type,handler);
-}
-
-function addInitEvent(func) {
-    DEPRECATED('Use jQuery(<function>) instead');
-    jQuery(func);
-}
-
-
-function jsEscape(text){
-    DEPRECATED('Insert text through jQuery.text() instead of escaping on your own');
-    var re=new RegExp("\\\\","g");
-    text=text.replace(re,"\\\\");
-    re=new RegExp("'","g");
-    text=text.replace(re,"\\'");
-    re=new RegExp('"',"g");
-    text=text.replace(re,'&quot;');
-    re=new RegExp("\\\\\\\\n","g");
-    text=text.replace(re,"\\n");
-    return text;
-}
-
-/**
- * Simple function to check if a global var is defined
- *
- * @author Kae Verens
- * @link http://verens.com/archives/2005/07/25/isset-for-javascript/#comment-2835
- */
-function isset(varname){
-    DEPRECATED("Use `typeof var !== 'undefined'` instead");
-    return(typeof(window[varname])!='undefined');
-}
-
-/**
- * Checks if property is undefined
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isUndefined (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `typeof var === 'undefined'` instead");
-    return (typeof prop == 'undefined');
-}
-
-/**
- * Checks if property is function
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isFunction (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `typeof var === 'function'` instead");
-    return (typeof prop == 'function');
-}
-/**
- * Checks if property is string
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isString (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `typeof var === 'string'` instead");
-    return (typeof prop == 'string');
-}
-
-/**
- * Checks if property is number
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isNumber (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `typeof var === 'number'` instead");
-    return (typeof prop == 'number');
-}
-
-/**
- * Checks if property is the calculable number
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isNumeric (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `typeof var === 'number' && !isNaN(var) && isFinite(var)` instead");
-    return isNumber(prop)&&!isNaN(prop)&&isFinite(prop);
-}
-
-/**
- * Checks if property is array
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isArray (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `var instanceof Array` instead");
-    return (prop instanceof Array);
-}
-
-/**
- *  Checks if property is regexp
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isRegExp (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `var instanceof RegExp` instead");
-    return (prop instanceof RegExp);
-}
-
-/**
- * Checks if property is a boolean value
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isBoolean (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `typeof var === 'boolean'` instead");
-    return ('boolean' == typeof prop);
-}
-
-/**
- * Checks if property is a scalar value (value that could be used as the hash key)
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isScalar (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED("Use `typeof var === 'string' || (typeof var === 'number' &&" +
-               " !isNaN(var) && isFinite(var))` instead");
-    return isNumeric(prop)||isString(prop);
-}
-
-/**
- * Checks if property is empty
- *
- * @param {Object} prop value to check
- * @return {Boolean} true if matched
- * @scope public
- * @author Ilya Lebedev <ilya@lebedev.net>
- */
-function isEmpty (prop /* :Object */) /* :Boolean */ {
-    DEPRECATED();
-    var i;
-    if (isBoolean(prop)) {
-        return false;
-    } else if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) {
-        return true;
-    } else if (isString(prop) || isNumber(prop)) {
-        return !prop;
-    } else if (Boolean(prop) && false != prop) {
-        for (i in prop) {
-            if(prop.hasOwnProperty(i)) {
-                return false;
-            }
-        }
-    }
-    return true;
-}
-
-/**
- * Get the computed style of a node.
- *
- * @link https://acidmartin.wordpress.com/2008/08/26/style-get-any-css-property-value-of-an-object/
- * @link http://svn.dojotoolkit.org/src/dojo/trunk/_base/html.js
- */
-function gcs(node){
-    DEPRECATED('Use jQuery(node).style() instead');
-    if(node.currentStyle){
-        return node.currentStyle;
-    }else{
-        return node.ownerDocument.defaultView.getComputedStyle(node, null);
-    }
-}
-
-/**
- * Until 2011-05-25 "Rincewind", a code intended to fix some Safari issue
- * always declared the global _timer. plugin:sortablejs relies on _timer
- * being declared.
- */
-var _timer;
diff --git a/lib/scripts/drag.js b/lib/scripts/drag.js
deleted file mode 100644
index dd252d95d5a13690c7871168e367b5697a914400..0000000000000000000000000000000000000000
--- a/lib/scripts/drag.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Makes a DOM object draggable
- *
- * If you just want to move objects around, use drag.attach. For full
- * customization, drag can be used as a javascript prototype, it is
- * inheritance-aware.
- *
- * @deprecated
- * @link http://nofunc.org/Drag_Drop/
- */
-var drag = {
-    obj: null,
-    handle: null,
-    oX: 0,  // object X position
-    oY: 0,  // object Y position
-    eX: 0,  // event X delta
-    eY: 0,  // event Y delta
-
-    /**
-     * Attaches the needed handlers to the given object
-     *
-     * This can be called for multiple objects, the right one is later
-     * determined from the event itself. The handle is optional
-     *
-     * @param DOMObject obj    The object that should be draggable
-     * @param DOMObject handle A handle on which the obj can be dragged
-     */
-    attach: function (obj,handle) {
-        DEPRECATED('Use jQuery.draggable() instead.');
-        if(handle){
-            handle.dragobject = obj;
-        }else{
-            handle = obj;
-        }
-        var _this = this;
-        addEvent($(handle),'mousedown',function (e) {return _this.start(e); });
-    },
-
-    /**
-     * Starts the dragging operation
-     */
-    start: function (e){
-        this.handle = e.target;
-        if(this.handle.dragobject){
-            this.obj = this.handle.dragobject;
-        }else{
-            this.obj = this.handle;
-        }
-
-        this.handle.className += ' ondrag';
-        this.obj.className    += ' ondrag';
-
-        this.oX = parseInt(this.obj.style.left);
-        this.oY = parseInt(this.obj.style.top);
-        this.eX = e.pageX;
-        this.eY = e.pageY;
-
-        var _this = this;
-        this.mousehandlers = [function (e) {return _this.drag(e);}, function (e) {return _this.stop(e);}];
-        addEvent(document,'mousemove', this.mousehandlers[0]);
-        addEvent(document,'mouseup', this.mousehandlers[1]);
-
-        return false;
-    },
-
-    /**
-     * Ends the dragging operation
-     */
-    stop: function(){
-        this.handle.className = this.handle.className.replace(/ ?ondrag/,'');
-        this.obj.className    = this.obj.className.replace(/ ?ondrag/,'');
-        removeEvent(document,'mousemove', this.mousehandlers[0]);
-        removeEvent(document,'mouseup', this.mousehandlers[1]);
-        this.obj = null;
-        this.handle = null;
-    },
-
-    /**
-     * Moves the object during the dragging operation
-     */
-    drag: function(e) {
-        if(this.obj) {
-            this.obj.style.top  = (e.pageY+this.oY-this.eY+'px');
-            this.obj.style.left = (e.pageX+this.oX-this.eX+'px');
-        }
-    }
-};
diff --git a/lib/scripts/editor.js b/lib/scripts/editor.js
index f4143f0bc20a9edd9cb53bddb23af6bf81ac4397..fac084489246a7dc73987e5c360f5d82701fc79c 100644
--- a/lib/scripts/editor.js
+++ b/lib/scripts/editor.js
@@ -146,7 +146,7 @@ var dw_editor = {
 
         if((e.keyCode == 13 || e.keyCode == 10) && e.ctrlKey) { // Ctrl-Enter (With Chrome workaround)
             // Submit current edit
-            jQuery('input#edbtn__save').click();
+            jQuery('#edbtn__save').click();
             e.preventDefault(); // prevent enter key
             return false;
         }else if(e.keyCode == 13){ // Enter
diff --git a/lib/scripts/fileuploaderextended.js b/lib/scripts/fileuploaderextended.js
index f5786c387dbcb9a5c55f8f7b428c32cbf5e7737a..d6a82397d7e5a6c2e705123775f95e1d689130f3 100644
--- a/lib/scripts/fileuploaderextended.js
+++ b/lib/scripts/fileuploaderextended.js
@@ -82,7 +82,7 @@ qq.FileUploaderExtended = function(o){
             '<div class="qq-upload-button">' + LANG.media_select + '</div>' +
             '<ul class="qq-upload-list"></ul>' +
             '<div class="qq-action-container">' +
-            '  <input class="qq-upload-action button" type="submit" value="' + LANG.media_upload_btn + '" id="mediamanager__upload_button">' +
+            '  <button class="qq-upload-action" type="submit" id="mediamanager__upload_button">' + LANG.media_upload_btn + '</button>' +
             '  <label class="qq-overwrite-check"><input type="checkbox" value="1" name="ow" class="dw__ow"> <span>' + LANG.media_overwrt + '</span></label>' +
             '</div>' +
             '</div>',
@@ -189,7 +189,7 @@ qq.extend(qq.FileUploaderExtended.prototype, {
             var button = '<form method="post" action="' + action + '" id="mediamanager__done_form"><div>';
             button += '<input type="hidden" value="' + result.ns + '" name="ns">';
             button += '<input type="hidden" value="1" name="recent">';
-            button += '<input class="button" type="submit" value="' + LANG.media_done_btn + '"></div></form>';
+            button += '<button type="submit">' + LANG.media_done_btn + '</button></div></form>';
             jQuery('#mediamanager__uploader').append(button);
         }
     }
diff --git a/lib/scripts/hotkeys.js b/lib/scripts/hotkeys.js
index bff28530d240d70bba0c34d1b8974d4344e4bcd8..76a277aea2ad6b09e7d2850def2b16678b58d90d 100644
--- a/lib/scripts/hotkeys.js
+++ b/lib/scripts/hotkeys.js
@@ -26,7 +26,7 @@ function Hotkeys() {
      * Initialization
      *
      * This function looks up all the accesskeys used in the current page
-     * (at anchor elements and input elements [type="submit"]) and registers
+     * (at anchor elements and button elements [type="submit"]) and registers
      * appropriate shortcuts.
      *
      * Secondly, initialization registers listeners on document to catch all
@@ -59,10 +59,10 @@ function Hotkeys() {
         });
 
         /**
-         * Lookup all input [type="submit"] with accesskey and register event -
+         * Lookup all button [type="submit"] with accesskey and register event -
          * perform "click" on a button.
          */
-        var inputs = document.getElementsByTagName("input");
+        var inputs = document.getElementsByTagName("button");
         t.each(inputs, function(i) {
             if (i.type == "submit" && i.accessKey != "") {
                 t.addShortcut(t.modifier + '+' + i.accessKey, function() {
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/animated-overlay.gif b/lib/scripts/jquery/jquery-ui-theme/images/animated-overlay.gif
deleted file mode 100644
index d441f75ebfbdf26a265dfccd670120d25c0a341c..0000000000000000000000000000000000000000
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/animated-overlay.gif and /dev/null differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_0_aaaaaa_40x100.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_0_aaaaaa_40x100.png
index 4b8c26b723c23f7e83e5d61edaf0872d7b1bf6df..03b1d721659c41bb2e6ba452c214ce17b7c79611 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_0_aaaaaa_40x100.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_0_aaaaaa_40x100.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_75_ffffff_40x100.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_75_ffffff_40x100.png
index 718a4045414e0dabd438660f79cd4c6f228e6e19..882c78c4f389908c4211b7b54eab4a5dabcc8031 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_75_ffffff_40x100.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_flat_75_ffffff_40x100.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_55_fbf9ee_1x400.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_55_fbf9ee_1x400.png
index 9e3de4335ad12bdadbe7cc0710afb7ad73e42ff1..e17b8809cab832ba9cb4518a4bcbd598747e3c77 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_55_fbf9ee_1x400.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_55_fbf9ee_1x400.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_65_ffffff_1x400.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_65_ffffff_1x400.png
index 18fd8b166728f5ff185aa4bb3df012d08ac78854..de3b7cc4d70392be37c496b40c853bf78b39a983 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_65_ffffff_1x400.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_75_dadada_1x400.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_75_dadada_1x400.png
index 8f31ae15dc12a2fd2e30491065baa6735ae6fd0c..74ff8a2f52a8e40dadde8c4337c4b9d5cabef808 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_75_dadada_1x400.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_75_dadada_1x400.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_75_e6e6e6_1x400.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_75_e6e6e6_1x400.png
index a6effc68ebd9aee94648798a7a6422afebb81618..08cf4c38aa14cb03b4d307749bd8538a4629e821 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_75_e6e6e6_1x400.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_75_e6e6e6_1x400.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_95_fef1ec_1x400.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_95_fef1ec_1x400.png
index c50038affa7e2dd8704b809efca7cc0edd834a69..e7b6f8322735075b05c7d436a23d55c7368b7892 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_95_fef1ec_1x400.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_glass_95_fef1ec_1x400.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png
index f08378e9febd56a97ba6699b43b3ec803ae973ae..fea66d4dd97d03924cb5296c80bd5459dcbb5c57 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_222222_256x240.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_222222_256x240.png
index 8deb23b9d3247e4c0abd245bc0f44857157650db..e556b9a90b19e71d08950599014c86d344e54a87 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_222222_256x240.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_222222_256x240.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_2e83ff_256x240.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_2e83ff_256x240.png
index aa2ddc3b505ab063a07c0cb81fdfaf7050a4223e..54f652fec05082143f8e400e322590fe0d5120aa 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_2e83ff_256x240.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_2e83ff_256x240.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_454545_256x240.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_454545_256x240.png
index ef231bb2550f0ecdfa2470eff59573d80fbe4d74..1a2b52e8991536267f7e10ebb27048b1e1d1768f 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_454545_256x240.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_454545_256x240.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_888888_256x240.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_888888_256x240.png
index 8bfb685341064524e810de23eb8b22c45b3fb70a..88c31424bb54f423de5ed12c52bd3ccf4c27080a 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_888888_256x240.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_888888_256x240.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_cd0a0a_256x240.png b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_cd0a0a_256x240.png
index d72d6906d1068db96752c0cce7f6253b1a081336..8da7fb0823e83fe8606c02f64905fa144c447d86 100644
Binary files a/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_cd0a0a_256x240.png and b/lib/scripts/jquery/jquery-ui-theme/images/ui-icons_cd0a0a_256x240.png differ
diff --git a/lib/scripts/jquery/jquery-ui-theme/smoothness.css b/lib/scripts/jquery/jquery-ui-theme/smoothness.css
index 93a79cad2dce85399e74ecb7a99935935c93682e..2fa859a43b6573f783aa1e742212fe23c23920e8 100644
--- a/lib/scripts/jquery/jquery-ui-theme/smoothness.css
+++ b/lib/scripts/jquery/jquery-ui-theme/smoothness.css
@@ -1,8 +1,8 @@
-/*! jQuery UI - v1.11.0 - 2014-06-26
+/*! jQuery UI - v1.11.4 - 2015-03-11
 * http://jqueryui.com
 * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
 * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
 
 /* Layout helpers
 ----------------------------------*/
@@ -48,7 +48,7 @@
 	left: 0;
 	position: absolute;
 	opacity: 0;
-	filter:Alpha(Opacity=0);
+	filter:Alpha(Opacity=0); /* support: IE8 */
 }
 
 .ui-front {
@@ -274,7 +274,7 @@ button.ui-button::-moz-focus-inner {
 }
 .ui-datepicker select.ui-datepicker-month,
 .ui-datepicker select.ui-datepicker-year {
-	width: 49%;
+	width: 45%;
 }
 .ui-datepicker table {
 	width: 100%;
@@ -514,9 +514,9 @@ button.ui-button::-moz-focus-inner {
 	height: 100%;
 }
 .ui-progressbar .ui-progressbar-overlay {
-	background: url("images/animated-overlay.gif");
+	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
 	height: 100%;
-	filter: alpha(opacity=25);
+	filter: alpha(opacity=25); /* support: IE8 */
 	opacity: 0.25;
 }
 .ui-progressbar-indeterminate .ui-progressbar-value {
@@ -672,7 +672,7 @@ button.ui-button::-moz-focus-inner {
 	background-position: 0 0;
 }
 
-/* For IE8 - See #6727 */
+/* support: IE8 - See #6727 */
 .ui-slider.ui-state-disabled .ui-slider-handle,
 .ui-slider.ui-state-disabled .ui-slider-range {
 	filter: inherit;
@@ -954,18 +954,18 @@ body .ui-tooltip {
 .ui-widget-content .ui-priority-secondary,
 .ui-widget-header .ui-priority-secondary {
 	opacity: .7;
-	filter:Alpha(Opacity=70);
+	filter:Alpha(Opacity=70); /* support: IE8 */
 	font-weight: normal;
 }
 .ui-state-disabled,
 .ui-widget-content .ui-state-disabled,
 .ui-widget-header .ui-state-disabled {
 	opacity: .35;
-	filter:Alpha(Opacity=35);
+	filter:Alpha(Opacity=35); /* support: IE8 */
 	background-image: none;
 }
 .ui-state-disabled .ui-icon {
-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
 }
 
 /* Icons
@@ -1213,13 +1213,13 @@ body .ui-tooltip {
 .ui-widget-overlay {
 	background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
 	opacity: .3;
-	filter: Alpha(Opacity=30);
+	filter: Alpha(Opacity=30); /* support: IE8 */
 }
 .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: .3;
-	filter: Alpha(Opacity=30);
+	filter: Alpha(Opacity=30); /* support: IE8 */
 	border-radius: 8px;
 }
diff --git a/lib/scripts/jquery/jquery-ui.js b/lib/scripts/jquery/jquery-ui.js
index 670e39a8f96e55cac280d4d91318daafd5a73a9e..31ee9cd8116b6b65683351c782446eb7ee48cf15 100644
--- a/lib/scripts/jquery/jquery-ui.js
+++ b/lib/scripts/jquery/jquery-ui.js
@@ -1,7 +1,7 @@
-/*! jQuery UI - v1.11.0 - 2014-06-26
+/*! jQuery UI - v1.11.4 - 2015-03-11
 * http://jqueryui.com
 * Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
 
 (function( factory ) {
 	if ( typeof define === "function" && define.amd ) {
@@ -15,10 +15,10 @@
 	}
 }(function( $ ) {
 /*!
- * jQuery UI Core 1.11.0
+ * jQuery UI Core 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -30,7 +30,7 @@
 $.ui = $.ui || {};
 
 $.extend( $.ui, {
-	version: "1.11.0",
+	version: "1.11.4",
 
 	keyCode: {
 		BACKSPACE: 8,
@@ -54,15 +54,16 @@ $.extend( $.ui, {
 
 // plugins
 $.fn.extend({
-	scrollParent: function() {
+	scrollParent: function( includeHidden ) {
 		var position = this.css( "position" ),
 			excludeStaticParent = position === "absolute",
+			overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
 			scrollParent = this.parents().filter( function() {
 				var parent = $( this );
 				if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
 					return false;
 				}
-				return (/(auto|scroll)/).test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
+				return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
 			}).eq( 0 );
 
 		return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
@@ -99,10 +100,10 @@ function focusable( element, isTabIndexNotNaN ) {
 		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
 			return false;
 		}
-		img = $( "img[usemap=#" + mapName + "]" )[0];
+		img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
 		return !!img && visible( img );
 	}
-	return ( /input|select|textarea|button|object/.test( nodeName ) ?
+	return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
 		!element.disabled :
 		"a" === nodeName ?
 			element.href || isTabIndexNotNaN :
@@ -308,10 +309,10 @@ $.ui.plugin = {
 
 
 /*!
- * jQuery UI Widget 1.11.0
+ * jQuery UI Widget 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -324,11 +325,18 @@ var widget_uuid = 0,
 
 $.cleanData = (function( orig ) {
 	return function( elems ) {
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+		var events, elem, i;
+		for ( i = 0; (elem = elems[i]) != null; i++ ) {
 			try {
-				$( elem ).triggerHandler( "remove" );
+
+				// Only trigger remove when necessary to save time
+				events = $._data( elem, "events" );
+				if ( events && events.remove ) {
+					$( elem ).triggerHandler( "remove" );
+				}
+
 			// http://bugs.jquery.com/ticket/8235
-			} catch( e ) {}
+			} catch ( e ) {}
 		}
 		orig( elems );
 	};
@@ -482,11 +490,6 @@ $.widget.bridge = function( name, object ) {
 			args = widget_slice.call( arguments, 1 ),
 			returnValue = this;
 
-		// allow multiple hashes to be passed on init
-		options = !isMethodCall && args.length ?
-			$.widget.extend.apply( null, [ options ].concat(args) ) :
-			options;
-
 		if ( isMethodCall ) {
 			this.each(function() {
 				var methodValue,
@@ -511,6 +514,12 @@ $.widget.bridge = function( name, object ) {
 				}
 			});
 		} else {
+
+			// Allow multiple hashes to be passed on init
+			if ( args.length ) {
+				options = $.widget.extend.apply( null, [ options ].concat(args) );
+			}
+
 			this.each(function() {
 				var instance = $.data( this, fullName );
 				if ( instance ) {
@@ -546,10 +555,6 @@ $.Widget.prototype = {
 		this.element = $( element );
 		this.uuid = widget_uuid++;
 		this.eventNamespace = "." + this.widgetName + this.uuid;
-		this.options = $.widget.extend( {},
-			this.options,
-			this._getCreateOptions(),
-			options );
 
 		this.bindings = $();
 		this.hoverable = $();
@@ -572,6 +577,11 @@ $.Widget.prototype = {
 			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
 		}
 
+		this.options = $.widget.extend( {},
+			this.options,
+			this._getCreateOptions(),
+			options );
+
 		this._create();
 		this._trigger( "create", null, this._getCreateEventData() );
 		this._init();
@@ -734,8 +744,14 @@ $.Widget.prototype = {
 	},
 
 	_off: function( element, eventName ) {
-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+			this.eventNamespace;
 		element.unbind( eventName ).undelegate( eventName );
+
+		// Clear the stack to avoid memory leaks (#10056)
+		this.bindings = $( this.bindings.not( element ).get() );
+		this.focusable = $( this.focusable.not( element ).get() );
+		this.hoverable = $( this.hoverable.not( element ).get() );
 	},
 
 	_delay: function( handler, delay ) {
@@ -841,10 +857,10 @@ var widget = $.widget;
 
 
 /*!
- * jQuery UI Mouse 1.11.0
+ * jQuery UI Mouse 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -858,7 +874,7 @@ $( document ).mouseup( function() {
 });
 
 var mouse = $.widget("ui.mouse", {
-	version: "1.11.0",
+	version: "1.11.4",
 	options: {
 		cancel: "input,textarea,button,select,option",
 		distance: 1,
@@ -899,6 +915,8 @@ var mouse = $.widget("ui.mouse", {
 			return;
 		}
 
+		this._mouseMoved = false;
+
 		// we may have missed mouseup (out of window)
 		(this._mouseStarted && this._mouseUp(event));
 
@@ -952,13 +970,23 @@ var mouse = $.widget("ui.mouse", {
 	},
 
 	_mouseMove: function(event) {
-		// IE mouseup check - mouseup happened when mouse was out of window
-		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
-			return this._mouseUp(event);
+		// Only check for mouseups outside the document if you've moved inside the document
+		// at least once. This prevents the firing of mouseup in the case of IE<9, which will
+		// fire a mousemove event if content is placed under the cursor. See #7778
+		// Support: IE <9
+		if ( this._mouseMoved ) {
+			// IE mouseup check - mouseup happened when mouse was out of window
+			if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+				return this._mouseUp(event);
+
+			// Iframe mouseup check - mouseup occurred in another document
+			} else if ( !event.which ) {
+				return this._mouseUp( event );
+			}
+		}
 
-		// Iframe mouseup check - mouseup occurred in another document
-		} else if ( !event.which ) {
-			return this._mouseUp( event );
+		if ( event.which || event.button ) {
+			this._mouseMoved = true;
 		}
 
 		if (this._mouseStarted) {
@@ -1015,10 +1043,10 @@ var mouse = $.widget("ui.mouse", {
 
 
 /*!
- * jQuery UI Position 1.11.0
+ * jQuery UI Position 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -1129,8 +1157,11 @@ $.position = {
 			offset: withinElement.offset() || { left: 0, top: 0 },
 			scrollLeft: withinElement.scrollLeft(),
 			scrollTop: withinElement.scrollTop(),
-			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
-			height: isWindow ? withinElement.height() : withinElement.outerHeight()
+
+			// support: jQuery 1.6.x
+			// jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
+			width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
+			height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
 		};
 	}
 };
@@ -1451,12 +1482,12 @@ $.ui.position = {
 				newOverBottom;
 			if ( overTop < 0 ) {
 				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
-				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+				if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
 					position.top += myOffset + atOffset + offset;
 				}
 			} else if ( overBottom > 0 ) {
 				newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
-				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+				if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
 					position.top += myOffset + atOffset + offset;
 				}
 			}
@@ -1519,10 +1550,10 @@ var position = $.ui.position;
 
 
 /*!
- * jQuery UI Accordion 1.11.0
+ * jQuery UI Accordion 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -1531,7 +1562,7 @@ var position = $.ui.position;
 
 
 var accordion = $.widget( "ui.accordion", {
-	version: "1.11.0",
+	version: "1.11.4",
 	options: {
 		active: 0,
 		animate: {},
@@ -1765,13 +1796,22 @@ var accordion = $.widget( "ui.accordion", {
 	},
 
 	_processPanels: function() {
+		var prevHeaders = this.headers,
+			prevPanels = this.panels;
+
 		this.headers = this.element.find( this.options.header )
 			.addClass( "ui-accordion-header ui-state-default ui-corner-all" );
 
-		this.headers.next()
+		this.panels = this.headers.next()
 			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
 			.filter( ":not(.ui-accordion-content-active)" )
 			.hide();
+
+		// Avoid memory leaks (#10056)
+		if ( prevPanels ) {
+			this._off( prevHeaders.not( this.headers ) );
+			this._off( prevPanels.not( this.panels ) );
+		}
 	},
 
 	_refresh: function() {
@@ -1980,7 +2020,10 @@ var accordion = $.widget( "ui.accordion", {
 		toHide.attr({
 			"aria-hidden": "true"
 		});
-		toHide.prev().attr( "aria-selected", "false" );
+		toHide.prev().attr({
+			"aria-selected": "false",
+			"aria-expanded": "false"
+		});
 		// if we're switching panels, remove the old header from the tab order
 		// if we're opening from collapsed state, remove the previous header from the tab order
 		// if we're collapsing, then keep the collapsing header in the tab order
@@ -1991,7 +2034,7 @@ var accordion = $.widget( "ui.accordion", {
 			});
 		} else if ( toShow.length ) {
 			this.headers.filter(function() {
-				return $( this ).attr( "tabIndex" ) === 0;
+				return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
 			})
 			.attr( "tabIndex", -1 );
 		}
@@ -2001,8 +2044,8 @@ var accordion = $.widget( "ui.accordion", {
 			.prev()
 				.attr({
 					"aria-selected": "true",
-					tabIndex: 0,
-					"aria-expanded": "true"
+					"aria-expanded": "true",
+					tabIndex: 0
 				});
 	},
 
@@ -2010,6 +2053,7 @@ var accordion = $.widget( "ui.accordion", {
 		var total, easing, duration,
 			that = this,
 			adjust = 0,
+			boxSizing = toShow.css( "box-sizing" ),
 			down = toShow.length &&
 				( !toHide.length || ( toShow.index() < toHide.index() ) ),
 			animate = this.options.animate || {},
@@ -2052,7 +2096,9 @@ var accordion = $.widget( "ui.accordion", {
 				step: function( now, fx ) {
 					fx.now = Math.round( now );
 					if ( fx.prop !== "height" ) {
-						adjust += fx.now;
+						if ( boxSizing === "content-box" ) {
+							adjust += fx.now;
+						}
 					} else if ( that.options.heightStyle !== "content" ) {
 						fx.now = Math.round( total - toHide.outerHeight() - adjust );
 						adjust = 0;
@@ -2080,10 +2126,10 @@ var accordion = $.widget( "ui.accordion", {
 
 
 /*!
- * jQuery UI Menu 1.11.0
+ * jQuery UI Menu 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -2092,7 +2138,7 @@ var accordion = $.widget( "ui.accordion", {
 
 
 var menu = $.widget( "ui.menu", {
-	version: "1.11.0",
+	version: "1.11.4",
 	defaultElement: "<ul>",
 	delay: 300,
 	options: {
@@ -2167,6 +2213,12 @@ var menu = $.widget( "ui.menu", {
 				}
 			},
 			"mouseenter .ui-menu-item": function( event ) {
+				// Ignore mouse events while typeahead is active, see #10458.
+				// Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+				// is over an item in the menu
+				if ( this.previousFilter ) {
+					return;
+				}
 				var target = $( event.currentTarget );
 				// Remove ui-state-active class from siblings of the newly focused menu item
 				// to avoid a jump caused by adjacent elements both having a class with a border
@@ -2246,13 +2298,9 @@ var menu = $.widget( "ui.menu", {
 	},
 
 	_keydown: function( event ) {
-		var match, prev, character, skip, regex,
+		var match, prev, character, skip,
 			preventDefault = true;
 
-		function escape( value ) {
-			return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
-		}
-
 		switch ( event.keyCode ) {
 		case $.ui.keyCode.PAGE_UP:
 			this.previousPage( event );
@@ -2301,10 +2349,7 @@ var menu = $.widget( "ui.menu", {
 				character = prev + character;
 			}
 
-			regex = new RegExp( "^" + escape( character ), "i" );
-			match = this.activeMenu.find( this.options.items ).filter(function() {
-				return regex.test( $( this ).text() );
-			});
+			match = this._filterMenuItems( character );
 			match = skip && match.index( this.active.next() ) !== -1 ?
 				this.active.nextAll( ".ui-menu-item" ) :
 				match;
@@ -2313,22 +2358,15 @@ var menu = $.widget( "ui.menu", {
 			// to move down the menu to the first item that starts with that character
 			if ( !match.length ) {
 				character = String.fromCharCode( event.keyCode );
-				regex = new RegExp( "^" + escape( character ), "i" );
-				match = this.activeMenu.find( this.options.items ).filter(function() {
-					return regex.test( $( this ).text() );
-				});
+				match = this._filterMenuItems( character );
 			}
 
 			if ( match.length ) {
 				this.focus( event, match );
-				if ( match.length > 1 ) {
-					this.previousFilter = character;
-					this.filterTimer = this._delay(function() {
-						delete this.previousFilter;
-					}, 1000 );
-				} else {
+				this.previousFilter = character;
+				this.filterTimer = this._delay(function() {
 					delete this.previousFilter;
-				}
+				}, 1000 );
 			} else {
 				delete this.previousFilter;
 			}
@@ -2700,15 +2738,29 @@ var menu = $.widget( "ui.menu", {
 			this.collapseAll( event, true );
 		}
 		this._trigger( "select", event, ui );
+	},
+
+	_filterMenuItems: function(character) {
+		var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+			regex = new RegExp( "^" + escapedCharacter, "i" );
+
+		return this.activeMenu
+			.find( this.options.items )
+
+			// Only match on items, not dividers or other content (#10571)
+			.filter( ".ui-menu-item" )
+			.filter(function() {
+				return regex.test( $.trim( $( this ).text() ) );
+			});
 	}
 });
 
 
 /*!
- * jQuery UI Autocomplete 1.11.0
+ * jQuery UI Autocomplete 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -2717,7 +2769,7 @@ var menu = $.widget( "ui.menu", {
 
 
 $.widget( "ui.autocomplete", {
-	version: "1.11.0",
+	version: "1.11.4",
 	defaultElement: "<input>",
 	options: {
 		appendTo: null,
@@ -2820,7 +2872,9 @@ $.widget( "ui.autocomplete", {
 					break;
 				case keyCode.ESCAPE:
 					if ( this.menu.element.is( ":visible" ) ) {
-						this._value( this.term );
+						if ( !this.isMultiLine ) {
+							this._value( this.term );
+						}
 						this.close( event );
 						// Different browsers have different default behavior for escape
 						// Single press can mean undo or clear
@@ -2956,7 +3010,7 @@ $.widget( "ui.autocomplete", {
 
 				// Announce the value in the liveRegion
 				label = ui.item.attr( "aria-label" ) || item.value;
-				if ( label && jQuery.trim( label ).length ) {
+				if ( label && $.trim( label ).length ) {
 					this.liveRegion.children().hide();
 					$( "<div>" ).text( label ).appendTo( this.liveRegion );
 				}
@@ -3315,10 +3369,10 @@ var autocomplete = $.ui.autocomplete;
 
 
 /*!
- * jQuery UI Button 1.11.0
+ * jQuery UI Button 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -3354,7 +3408,7 @@ var lastActive,
 	};
 
 $.widget( "ui.button", {
-	version: "1.11.0",
+	version: "1.11.4",
 	defaultElement: "<button>",
 	options: {
 		disabled: null,
@@ -3650,7 +3704,7 @@ $.widget( "ui.button", {
 });
 
 $.widget( "ui.buttonset", {
-	version: "1.11.0",
+	version: "1.11.4",
 	options: {
 		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
 	},
@@ -3712,10 +3766,10 @@ var button = $.ui.button;
 
 
 /*!
- * jQuery UI Datepicker 1.11.0
+ * jQuery UI Datepicker 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -3723,7 +3777,7 @@ var button = $.ui.button;
  */
 
 
-$.extend($.ui, { datepicker: { version: "1.11.0" } });
+$.extend($.ui, { datepicker: { version: "1.11.4" } });
 
 var datepicker_instActive;
 
@@ -4089,6 +4143,10 @@ $.extend(Datepicker.prototype, {
 		} else if (nodeName === "div" || nodeName === "span") {
 			$target.removeClass(this.markerClassName).empty();
 		}
+
+		if ( datepicker_instActive === inst ) {
+			datepicker_instActive = null;
+		}
 	},
 
 	/* Enable the date picker to a jQuery selection.
@@ -4499,12 +4557,16 @@ $.extend(Datepicker.prototype, {
 		datepicker_instActive = inst; // for delegate hover events
 		inst.dpDiv.empty().append(this._generateHTML(inst));
 		this._attachHandlers(inst);
-		inst.dpDiv.find("." + this._dayOverClass + " a");
 
 		var origyearshtml,
 			numMonths = this._getNumberOfMonths(inst),
 			cols = numMonths[1],
-			width = 17;
+			width = 17,
+			activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+		if ( activeCell.length > 0 ) {
+			datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+		}
 
 		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
 		if (cols > 1) {
@@ -4838,7 +4900,8 @@ $.extend(Datepicker.prototype, {
 				var isDoubled = lookAhead(match),
 					size = (match === "@" ? 14 : (match === "!" ? 20 :
 					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
-					digits = new RegExp("^\\d{1," + size + "}"),
+					minSize = (match === "y" ? size : 1),
+					digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
 					num = value.substring(iValue).match(digits);
 				if (!num) {
 					throw "Missing number at position " + iValue;
@@ -5699,18 +5762,20 @@ function datepicker_bindHover(dpDiv) {
 				$(this).removeClass("ui-datepicker-next-hover");
 			}
 		})
-		.delegate(selector, "mouseover", function(){
-			if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? dpDiv.parent()[0] : datepicker_instActive.input[0])) {
-				$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
-				$(this).addClass("ui-state-hover");
-				if (this.className.indexOf("ui-datepicker-prev") !== -1) {
-					$(this).addClass("ui-datepicker-prev-hover");
-				}
-				if (this.className.indexOf("ui-datepicker-next") !== -1) {
-					$(this).addClass("ui-datepicker-next-hover");
-				}
-			}
-		});
+		.delegate( selector, "mouseover", datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+	if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {
+		$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+		$(this).addClass("ui-state-hover");
+		if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+			$(this).addClass("ui-datepicker-prev-hover");
+		}
+		if (this.className.indexOf("ui-datepicker-next") !== -1) {
+			$(this).addClass("ui-datepicker-next-hover");
+		}
+	}
 }
 
 /* jQuery extend now ignores nulls! */
@@ -5766,16 +5831,16 @@ $.fn.datepicker = function(options){
 $.datepicker = new Datepicker(); // singleton instance
 $.datepicker.initialized = false;
 $.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "1.11.0";
+$.datepicker.version = "1.11.4";
 
 var datepicker = $.datepicker;
 
 
 /*!
- * jQuery UI Draggable 1.11.0
+ * jQuery UI Draggable 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -5784,7 +5849,7 @@ var datepicker = $.datepicker;
 
 
 $.widget("ui.draggable", $.ui.mouse, {
-	version: "1.11.0",
+	version: "1.11.4",
 	widgetEventPrefix: "drag",
 	options: {
 		addClasses: true,
@@ -5819,8 +5884,8 @@ $.widget("ui.draggable", $.ui.mouse, {
 	},
 	_create: function() {
 
-		if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
-			this.element[0].style.position = "relative";
+		if ( this.options.helper === "original" ) {
+			this._setPositionRelative();
 		}
 		if (this.options.addClasses){
 			this.element.addClass("ui-draggable");
@@ -5836,6 +5901,7 @@ $.widget("ui.draggable", $.ui.mouse, {
 	_setOption: function( key, value ) {
 		this._super( key, value );
 		if ( key === "handle" ) {
+			this._removeHandleClassName();
 			this._setHandleClassName();
 		}
 	},
@@ -5851,20 +5917,9 @@ $.widget("ui.draggable", $.ui.mouse, {
 	},
 
 	_mouseCapture: function(event) {
+		var o = this.options;
 
-		var document = this.document[ 0 ],
-			o = this.options;
-
-		// support: IE9
-		// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
-		try {
-			// Support: IE9+
-			// If the <body> is blurred, IE will switch windows, see #9520
-			if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
-				// Blur any element that currently has focus, see #4261
-				$( document.activeElement ).blur();
-			}
-		} catch ( error ) {}
+		this._blurActiveElement( event );
 
 		// among others, prevent a drag on a resizable-handle
 		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
@@ -5877,20 +5932,54 @@ $.widget("ui.draggable", $.ui.mouse, {
 			return false;
 		}
 
-		$(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
-			$("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
-			.css({
-				width: this.offsetWidth + "px", height: this.offsetHeight + "px",
-				position: "absolute", opacity: "0.001", zIndex: 1000
-			})
-			.css($(this).offset())
-			.appendTo("body");
-		});
+		this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
 
 		return true;
 
 	},
 
+	_blockFrames: function( selector ) {
+		this.iframeBlocks = this.document.find( selector ).map(function() {
+			var iframe = $( this );
+
+			return $( "<div>" )
+				.css( "position", "absolute" )
+				.appendTo( iframe.parent() )
+				.outerWidth( iframe.outerWidth() )
+				.outerHeight( iframe.outerHeight() )
+				.offset( iframe.offset() )[ 0 ];
+		});
+	},
+
+	_unblockFrames: function() {
+		if ( this.iframeBlocks ) {
+			this.iframeBlocks.remove();
+			delete this.iframeBlocks;
+		}
+	},
+
+	_blurActiveElement: function( event ) {
+		var document = this.document[ 0 ];
+
+		// Only need to blur if the event occurred on the draggable itself, see #10527
+		if ( !this.handleElement.is( event.target ) ) {
+			return;
+		}
+
+		// support: IE9
+		// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+		try {
+
+			// Support: IE9, IE10
+			// If the <body> is blurred, IE will switch windows, see #9520
+			if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
+
+				// Blur any element that currently has focus, see #4261
+				$( document.activeElement ).blur();
+			}
+		} catch ( error ) {}
+	},
+
 	_mouseStart: function(event) {
 
 		var o = this.options;
@@ -5918,28 +6007,15 @@ $.widget("ui.draggable", $.ui.mouse, {
 
 		//Store the helper's css position
 		this.cssPosition = this.helper.css( "position" );
-		this.scrollParent = this.helper.scrollParent();
+		this.scrollParent = this.helper.scrollParent( true );
 		this.offsetParent = this.helper.offsetParent();
-		this.offsetParentCssPosition = this.offsetParent.css( "position" );
+		this.hasFixedAncestor = this.helper.parents().filter(function() {
+				return $( this ).css( "position" ) === "fixed";
+			}).length > 0;
 
 		//The element's absolute position on the page minus margins
-		this.offset = this.positionAbs = this.element.offset();
-		this.offset = {
-			top: this.offset.top - this.margins.top,
-			left: this.offset.left - this.margins.left
-		};
-
-		//Reset scroll cache
-		this.offset.scroll = false;
-
-		$.extend(this.offset, {
-			click: { //Where the click happened, relative to the element
-				left: event.pageX - this.offset.left,
-				top: event.pageY - this.offset.top
-			},
-			parent: this._getParentOffset(),
-			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
-		});
+		this.positionAbs = this.element.offset();
+		this._refreshOffsets( event );
 
 		//Generate the original position
 		this.originalPosition = this.position = this._generatePosition( event, false );
@@ -5966,6 +6042,10 @@ $.widget("ui.draggable", $.ui.mouse, {
 			$.ui.ddmanager.prepareOffsets(this, event);
 		}
 
+		// Reset helper's right/bottom css if they're set and set explicit width/height instead
+		// as this prevents resizing of elements with right/bottom set (see #7772)
+		this._normalizeRightBottom();
+
 		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
 
 		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
@@ -5976,9 +6056,24 @@ $.widget("ui.draggable", $.ui.mouse, {
 		return true;
 	},
 
+	_refreshOffsets: function( event ) {
+		this.offset = {
+			top: this.positionAbs.top - this.margins.top,
+			left: this.positionAbs.left - this.margins.left,
+			scroll: false,
+			parent: this._getParentOffset(),
+			relative: this._getRelativeOffset()
+		};
+
+		this.offset.click = {
+			left: event.pageX - this.offset.left,
+			top: event.pageY - this.offset.top
+		};
+	},
+
 	_mouseDrag: function(event, noPropagation) {
 		// reset any necessary cached properties (see #5009)
-		if ( this.offsetParentCssPosition === "fixed" ) {
+		if ( this.hasFixedAncestor ) {
 			this.offset.parent = this._getParentOffset();
 		}
 
@@ -6036,19 +6131,19 @@ $.widget("ui.draggable", $.ui.mouse, {
 		return false;
 	},
 
-	_mouseUp: function(event) {
-		//Remove frame helpers
-		$("div.ui-draggable-iframeFix").each(function() {
-			this.parentNode.removeChild(this);
-		});
+	_mouseUp: function( event ) {
+		this._unblockFrames();
 
 		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
 		if ( $.ui.ddmanager ) {
 			$.ui.ddmanager.dragStop(this, event);
 		}
 
-		// The interaction is over; whether or not the click resulted in a drag, focus the element
-		this.element.focus();
+		// Only need to focus if the event occurred on the draggable itself, see #10527
+		if ( this.handleElement.is( event.target ) ) {
+			// The interaction is over; whether or not the click resulted in a drag, focus the element
+			this.element.focus();
+		}
 
 		return $.ui.mouse.prototype._mouseUp.call(this, event);
 	},
@@ -6072,25 +6167,36 @@ $.widget("ui.draggable", $.ui.mouse, {
 	},
 
 	_setHandleClassName: function() {
-		this._removeHandleClassName();
-		$( this.options.handle || this.element ).addClass( "ui-draggable-handle" );
+		this.handleElement = this.options.handle ?
+			this.element.find( this.options.handle ) : this.element;
+		this.handleElement.addClass( "ui-draggable-handle" );
 	},
 
 	_removeHandleClassName: function() {
-		this.element.find( ".ui-draggable-handle" )
-			.addBack()
-			.removeClass( "ui-draggable-handle" );
+		this.handleElement.removeClass( "ui-draggable-handle" );
 	},
 
 	_createHelper: function(event) {
 
 		var o = this.options,
-			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[ 0 ], [ event ])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
+			helperIsFunction = $.isFunction( o.helper ),
+			helper = helperIsFunction ?
+				$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+				( o.helper === "clone" ?
+					this.element.clone().removeAttr( "id" ) :
+					this.element );
 
 		if (!helper.parents("body").length) {
 			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
 		}
 
+		// http://bugs.jqueryui.com/ticket/9446
+		// a helper function can return the original element
+		// which wouldn't have been set to relative in _create
+		if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+			this._setPositionRelative();
+		}
+
 		if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
 			helper.css("position", "absolute");
 		}
@@ -6099,6 +6205,12 @@ $.widget("ui.draggable", $.ui.mouse, {
 
 	},
 
+	_setPositionRelative: function() {
+		if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+			this.element[ 0 ].style.position = "relative";
+		}
+	},
+
 	_adjustOffsetFromHelper: function(obj) {
 		if (typeof obj === "string") {
 			obj = obj.split(" ");
@@ -6144,8 +6256,8 @@ $.widget("ui.draggable", $.ui.mouse, {
 		}
 
 		return {
-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
 		};
 
 	},
@@ -6167,10 +6279,10 @@ $.widget("ui.draggable", $.ui.mouse, {
 
 	_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)
+			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)
 		};
 	},
 
@@ -6183,11 +6295,11 @@ $.widget("ui.draggable", $.ui.mouse, {
 
 	_setContainment: function() {
 
-		var over, c, ce,
+		var isUserScrollable, c, ce,
 			o = this.options,
 			document = this.document[ 0 ];
 
-		this.relative_container = null;
+		this.relativeContainer = null;
 
 		if ( !o.containment ) {
 			this.containment = null;
@@ -6230,15 +6342,25 @@ $.widget("ui.draggable", $.ui.mouse, {
 			return;
 		}
 
-		over = c.css( "overflow" ) !== "hidden";
+		isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
 
 		this.containment = [
 			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
 			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
-			( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
-			( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+			( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+				( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+				( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+				this.helperProportions.width -
+				this.margins.left -
+				this.margins.right,
+			( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+				( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+				( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+				this.helperProportions.height -
+				this.margins.top -
+				this.margins.bottom
 		];
-		this.relative_container = c;
+		this.relativeContainer = c;
 	},
 
 	_convertPositionTo: function(d, pos) {
@@ -6291,8 +6413,8 @@ $.widget("ui.draggable", $.ui.mouse, {
 		// If we are not dragging yet, we won't check for options
 		if ( constrainPosition ) {
 			if ( this.containment ) {
-				if ( this.relative_container ){
-					co = this.relative_container.offset();
+				if ( this.relativeContainer ){
+					co = this.relativeContainer.offset();
 					containment = [
 						this.containment[ 0 ] + co.left,
 						this.containment[ 1 ] + co.top,
@@ -6366,16 +6488,29 @@ $.widget("ui.draggable", $.ui.mouse, {
 		}
 	},
 
+	_normalizeRightBottom: function() {
+		if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
+			this.helper.width( this.helper.width() );
+			this.helper.css( "right", "auto" );
+		}
+		if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
+			this.helper.height( this.helper.height() );
+			this.helper.css( "bottom", "auto" );
+		}
+	},
+
 	// From now on bulk stuff - mainly helpers
 
-	_trigger: function(type, event, ui) {
+	_trigger: function( type, event, ui ) {
 		ui = ui || this._uiHash();
 		$.ui.plugin.call( this, type, [ event, ui, this ], true );
-		//The absolute position has to be recalculated after plugins
-		if (type === "drag") {
-			this.positionAbs = this._convertPositionTo("absolute");
+
+		// Absolute position and offset (see #6884 ) have to be recalculated after plugins
+		if ( /^(drag|start|stop)/.test( type ) ) {
+			this.positionAbs = this._convertPositionTo( "absolute" );
+			ui.offset = this.positionAbs;
 		}
-		return $.Widget.prototype._trigger.call(this, type, event, ui);
+		return $.Widget.prototype._trigger.call( this, type, event, ui );
 	},
 
 	plugins: {},
@@ -6391,160 +6526,201 @@ $.widget("ui.draggable", $.ui.mouse, {
 
 });
 
-$.ui.plugin.add("draggable", "connectToSortable", {
-	start: function( event, ui, inst ) {
+$.ui.plugin.add( "draggable", "connectToSortable", {
+	start: function( event, ui, draggable ) {
+		var uiSortable = $.extend( {}, ui, {
+			item: draggable.element
+		});
 
-		var o = inst.options,
-			uiSortable = $.extend({}, ui, { item: inst.element });
-		inst.sortables = [];
-		$(o.connectToSortable).each(function() {
+		draggable.sortables = [];
+		$( draggable.options.connectToSortable ).each(function() {
 			var sortable = $( this ).sortable( "instance" );
-			if (sortable && !sortable.options.disabled) {
-				inst.sortables.push({
-					instance: sortable,
-					shouldRevert: sortable.options.revert
-				});
-				sortable.refreshPositions();	// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
+
+			if ( sortable && !sortable.options.disabled ) {
+				draggable.sortables.push( sortable );
+
+				// refreshPositions is called at drag start to refresh the containerCache
+				// which is used in drag. This ensures it's initialized and synchronized
+				// with any changes that might have happened on the page since initialization.
+				sortable.refreshPositions();
 				sortable._trigger("activate", event, uiSortable);
 			}
 		});
-
 	},
-	stop: function( event, ui, inst ) {
-
-		//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
+	stop: function( event, ui, draggable ) {
 		var uiSortable = $.extend( {}, ui, {
-			item: inst.element
+			item: draggable.element
 		});
 
-		$.each(inst.sortables, function() {
-			if (this.instance.isOver) {
+		draggable.cancelHelperRemoval = false;
 
-				this.instance.isOver = 0;
+		$.each( draggable.sortables, function() {
+			var sortable = this;
 
-				inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
-				this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
-
-				//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
-				if (this.shouldRevert) {
-					this.instance.options.revert = this.shouldRevert;
-				}
+			if ( sortable.isOver ) {
+				sortable.isOver = 0;
 
-				//Trigger the stop of the sortable
-				this.instance._mouseStop(event);
+				// Allow this sortable to handle removing the helper
+				draggable.cancelHelperRemoval = true;
+				sortable.cancelHelperRemoval = false;
 
-				this.instance.options.helper = this.instance.options._helper;
+				// Use _storedCSS To restore properties in the sortable,
+				// as this also handles revert (#9675) since the draggable
+				// may have modified them in unexpected ways (#8809)
+				sortable._storedCSS = {
+					position: sortable.placeholder.css( "position" ),
+					top: sortable.placeholder.css( "top" ),
+					left: sortable.placeholder.css( "left" )
+				};
 
-				//If the helper has been the original item, restore properties in the sortable
-				if (inst.options.helper === "original") {
-					this.instance.currentItem.css({ top: "auto", left: "auto" });
-				}
+				sortable._mouseStop(event);
 
+				// Once drag has ended, the sortable should return to using
+				// its original helper, not the shared helper from draggable
+				sortable.options.helper = sortable.options._helper;
 			} else {
-				this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
-				this.instance._trigger("deactivate", event, uiSortable);
-			}
+				// Prevent this Sortable from removing the helper.
+				// However, don't set the draggable to remove the helper
+				// either as another connected Sortable may yet handle the removal.
+				sortable.cancelHelperRemoval = true;
 
+				sortable._trigger( "deactivate", event, uiSortable );
+			}
 		});
-
 	},
-	drag: function( event, ui, inst ) {
-
-		var that = this;
-
-		$.each(inst.sortables, function() {
-
+	drag: function( event, ui, draggable ) {
+		$.each( draggable.sortables, function() {
 			var innermostIntersecting = false,
-				thisSortable = this;
+				sortable = this;
 
-			//Copy over some variables to allow calling the sortable's native _intersectsWith
-			this.instance.positionAbs = inst.positionAbs;
-			this.instance.helperProportions = inst.helperProportions;
-			this.instance.offset.click = inst.offset.click;
+			// Copy over variables that sortable's _intersectsWith uses
+			sortable.positionAbs = draggable.positionAbs;
+			sortable.helperProportions = draggable.helperProportions;
+			sortable.offset.click = draggable.offset.click;
 
-			if (this.instance._intersectsWith(this.instance.containerCache)) {
+			if ( sortable._intersectsWith( sortable.containerCache ) ) {
 				innermostIntersecting = true;
-				$.each(inst.sortables, function() {
-					this.instance.positionAbs = inst.positionAbs;
-					this.instance.helperProportions = inst.helperProportions;
-					this.instance.offset.click = inst.offset.click;
-					if (this !== thisSortable &&
-						this.instance._intersectsWith(this.instance.containerCache) &&
-						$.contains(thisSortable.instance.element[0], this.instance.element[0])
-					) {
+
+				$.each( draggable.sortables, function() {
+					// Copy over variables that sortable's _intersectsWith uses
+					this.positionAbs = draggable.positionAbs;
+					this.helperProportions = draggable.helperProportions;
+					this.offset.click = draggable.offset.click;
+
+					if ( this !== sortable &&
+							this._intersectsWith( this.containerCache ) &&
+							$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
 						innermostIntersecting = false;
 					}
+
 					return innermostIntersecting;
 				});
 			}
 
-			if (innermostIntersecting) {
-				//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
-				if (!this.instance.isOver) {
+			if ( innermostIntersecting ) {
+				// If it intersects, we use a little isOver variable and set it once,
+				// so that the move-in stuff gets fired only once.
+				if ( !sortable.isOver ) {
+					sortable.isOver = 1;
 
-					this.instance.isOver = 1;
-					//Now we fake the start of dragging for the sortable instance,
-					//by cloning the list group item, appending it to the sortable and using it as inst.currentItem
-					//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
-					this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
-					this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
-					this.instance.options.helper = function() { return ui.helper[0]; };
+					// Store draggable's parent in case we need to reappend to it later.
+					draggable._parent = ui.helper.parent();
 
-					event.target = this.instance.currentItem[0];
-					this.instance._mouseCapture(event, true);
-					this.instance._mouseStart(event, true, true);
+					sortable.currentItem = ui.helper
+						.appendTo( sortable.element )
+						.data( "ui-sortable-item", true );
 
-					//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
-					this.instance.offset.click.top = inst.offset.click.top;
-					this.instance.offset.click.left = inst.offset.click.left;
-					this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
-					this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+					// Store helper option to later restore it
+					sortable.options._helper = sortable.options.helper;
 
-					inst._trigger("toSortable", event);
-					inst.dropped = this.instance.element; //draggable revert needs that
-					//hack so receive/update callbacks work (mostly)
-					inst.currentItem = inst.element;
-					this.instance.fromOutside = inst;
+					sortable.options.helper = function() {
+						return ui.helper[ 0 ];
+					};
 
-				}
+					// Fire the start events of the sortable with our passed browser event,
+					// and our own helper (so it doesn't create a new one)
+					event.target = sortable.currentItem[ 0 ];
+					sortable._mouseCapture( event, true );
+					sortable._mouseStart( event, true, true );
+
+					// Because the browser event is way off the new appended portlet,
+					// modify necessary variables to reflect the changes
+					sortable.offset.click.top = draggable.offset.click.top;
+					sortable.offset.click.left = draggable.offset.click.left;
+					sortable.offset.parent.left -= draggable.offset.parent.left -
+						sortable.offset.parent.left;
+					sortable.offset.parent.top -= draggable.offset.parent.top -
+						sortable.offset.parent.top;
+
+					draggable._trigger( "toSortable", event );
+
+					// Inform draggable that the helper is in a valid drop zone,
+					// used solely in the revert option to handle "valid/invalid".
+					draggable.dropped = sortable.element;
+
+					// Need to refreshPositions of all sortables in the case that
+					// adding to one sortable changes the location of the other sortables (#9675)
+					$.each( draggable.sortables, function() {
+						this.refreshPositions();
+					});
 
-				//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
-				if (this.instance.currentItem) {
-					this.instance._mouseDrag(event);
+					// hack so receive/update callbacks work (mostly)
+					draggable.currentItem = draggable.element;
+					sortable.fromOutside = draggable;
 				}
 
+				if ( sortable.currentItem ) {
+					sortable._mouseDrag( event );
+					// Copy the sortable's position because the draggable's can potentially reflect
+					// a relative position, while sortable is always absolute, which the dragged
+					// element has now become. (#8809)
+					ui.position = sortable.position;
+				}
 			} else {
+				// If it doesn't intersect with the sortable, and it intersected before,
+				// we fake the drag stop of the sortable, but make sure it doesn't remove
+				// the helper by using cancelHelperRemoval.
+				if ( sortable.isOver ) {
 
-				//If it doesn't intersect with the sortable, and it intersected before,
-				//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
-				if (this.instance.isOver) {
-
-					this.instance.isOver = 0;
-					this.instance.cancelHelperRemoval = true;
+					sortable.isOver = 0;
+					sortable.cancelHelperRemoval = true;
 
-					//Prevent reverting on this forced stop
-					this.instance.options.revert = false;
+					// Calling sortable's mouseStop would trigger a revert,
+					// so revert must be temporarily false until after mouseStop is called.
+					sortable.options._revert = sortable.options.revert;
+					sortable.options.revert = false;
 
-					// The out event needs to be triggered independently
-					this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+					sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+					sortable._mouseStop( event, true );
 
-					this.instance._mouseStop(event, true);
-					this.instance.options.helper = this.instance.options._helper;
+					// restore sortable behaviors that were modfied
+					// when the draggable entered the sortable area (#9481)
+					sortable.options.revert = sortable.options._revert;
+					sortable.options.helper = sortable.options._helper;
 
-					//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
-					this.instance.currentItem.remove();
-					if (this.instance.placeholder) {
-						this.instance.placeholder.remove();
+					if ( sortable.placeholder ) {
+						sortable.placeholder.remove();
 					}
 
-					inst._trigger("fromSortable", event);
-					inst.dropped = false; //draggable revert needs that
-				}
+					// Restore and recalculate the draggable's offset considering the sortable
+					// may have modified them in unexpected ways. (#8809, #10669)
+					ui.helper.appendTo( draggable._parent );
+					draggable._refreshOffsets( event );
+					ui.position = draggable._generatePosition( event, true );
 
-			}
+					draggable._trigger( "fromSortable", event );
 
-		});
+					// Inform draggable that the helper is no longer in a valid drop zone
+					draggable.dropped = false;
 
+					// Need to refreshPositions of all sortables just in case removing
+					// from one sortable changes the location of other sortables (#9675)
+					$.each( draggable.sortables, function() {
+						this.refreshPositions();
+					});
+				}
+			}
+		});
 	}
 });
 
@@ -6585,30 +6761,35 @@ $.ui.plugin.add("draggable", "opacity", {
 
 $.ui.plugin.add("draggable", "scroll", {
 	start: function( event, ui, i ) {
-		if ( i.scrollParent[ 0 ] !== i.document[ 0 ] && i.scrollParent[ 0 ].tagName !== "HTML" ) {
-			i.overflowOffset = i.scrollParent.offset();
+		if ( !i.scrollParentNotHidden ) {
+			i.scrollParentNotHidden = i.helper.scrollParent( false );
+		}
+
+		if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+			i.overflowOffset = i.scrollParentNotHidden.offset();
 		}
 	},
 	drag: function( event, ui, i  ) {
 
 		var o = i.options,
 			scrolled = false,
+			scrollParent = i.scrollParentNotHidden[ 0 ],
 			document = i.document[ 0 ];
 
-		if ( i.scrollParent[ 0 ] !== document && i.scrollParent[ 0 ].tagName !== "HTML" ) {
-			if (!o.axis || o.axis !== "x") {
-				if ((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
-				} else if (event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
-					i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+		if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+			if ( !o.axis || o.axis !== "x" ) {
+				if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
+					scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+				} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+					scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
 				}
 			}
 
-			if (!o.axis || o.axis !== "y") {
-				if ((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
-				} else if (event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
-					i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+			if ( !o.axis || o.axis !== "y" ) {
+				if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
+					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+				} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
 				}
 			}
 
@@ -6669,9 +6850,9 @@ $.ui.plugin.add("draggable", "snap", {
 
 		for (i = inst.snapElements.length - 1; i >= 0; i--){
 
-			l = inst.snapElements[i].left;
+			l = inst.snapElements[i].left - inst.margins.left;
 			r = l + inst.snapElements[i].width;
-			t = inst.snapElements[i].top;
+			t = inst.snapElements[i].top - inst.margins.top;
 			b = t + inst.snapElements[i].height;
 
 			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
@@ -6688,16 +6869,16 @@ $.ui.plugin.add("draggable", "snap", {
 				ls = Math.abs(l - x2) <= d;
 				rs = Math.abs(r - x1) <= d;
 				if (ts) {
-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
 				}
 				if (bs) {
-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
 				}
 				if (ls) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
 				}
 				if (rs) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
 				}
 			}
 
@@ -6709,16 +6890,16 @@ $.ui.plugin.add("draggable", "snap", {
 				ls = Math.abs(l - x1) <= d;
 				rs = Math.abs(r - x2) <= d;
 				if (ts) {
-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
 				}
 				if (bs) {
-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
 				}
 				if (ls) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
 				}
 				if (rs) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
 				}
 			}
 
@@ -6736,8 +6917,8 @@ $.ui.plugin.add("draggable", "stack", {
 	start: function( event, ui, instance ) {
 		var min,
 			o = instance.options,
-			group = $.makeArray($(o.stack)).sort(function(a,b) {
-				return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+			group = $.makeArray($(o.stack)).sort(function(a, b) {
+				return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
 			});
 
 		if (!group.length) { return; }
@@ -6773,10 +6954,10 @@ var draggable = $.ui.draggable;
 
 
 /*!
- * jQuery UI Resizable 1.11.0
+ * jQuery UI Resizable 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -6785,7 +6966,7 @@ var draggable = $.ui.draggable;
 
 
 $.widget("ui.resizable", $.ui.mouse, {
-	version: "1.11.0",
+	version: "1.11.4",
 	widgetEventPrefix: "resize",
 	options: {
 		alsoResize: false,
@@ -6817,7 +6998,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 	},
 
 	_isNumber: function( value ) {
-		return !isNaN( parseInt( value , 10 ) );
+		return !isNaN( parseInt( value, 10 ) );
 	},
 
 	_hasScroll: function( el, a ) {
@@ -6858,7 +7039,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 		});
 
 		// Wrap the element if it cannot hold child nodes
-		if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+		if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {
 
 			this.element.wrap(
 				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
@@ -6876,14 +7057,28 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 			this.elementIsWrapper = true;
 
-			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.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
+			});
 			// support: Safari
 			// Prevent Safari textarea resize
 			this.originalResizeStyle = this.originalElement.css("resize");
 			this.originalElement.css("resize", "none");
 
-			this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+			this._proportionallyResizeElements.push( this.originalElement.css({
+				position: "static",
+				zoom: 1,
+				display: "block"
+			}) );
 
 			// support: IE9
 			// avoid IE jump (hard set the margin)
@@ -6892,8 +7087,21 @@ $.widget("ui.resizable", $.ui.mouse, {
 			this._proportionallyResize();
 		}
 
-		this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { 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" });
-		if(this.handles.constructor === String) {
+		this.handles = o.handles ||
+			( !$(".ui-resizable-handle", this.element).length ?
+				"e,s,se" : {
+					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"
+				} );
+
+		this._handles = $();
+		if ( this.handles.constructor === String ) {
 
 			if ( this.handles === "all") {
 				this.handles = "n,e,s,w,se,sw,ne,nw";
@@ -6902,10 +7110,10 @@ $.widget("ui.resizable", $.ui.mouse, {
 			n = this.handles.split(",");
 			this.handles = {};
 
-			for(i = 0; i < n.length; i++) {
+			for (i = 0; i < n.length; i++) {
 
 				handle = $.trim(n[i]);
-				hname = "ui-resizable-"+handle;
+				hname = "ui-resizable-" + handle;
 				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
 
 				axis.css({ zIndex: o.zIndex });
@@ -6915,7 +7123,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
 				}
 
-				this.handles[handle] = ".ui-resizable-"+handle;
+				this.handles[handle] = ".ui-resizable-" + handle;
 				this.element.append(axis);
 			}
 
@@ -6927,13 +7135,16 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 			target = target || this.element;
 
-			for(i in this.handles) {
+			for (i in this.handles) {
 
-				if(this.handles[i].constructor === String) {
+				if (this.handles[i].constructor === String) {
 					this.handles[i] = this.element.children( this.handles[ i ] ).first().show();
+				} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
+					this.handles[ i ] = $( this.handles[ i ] );
+					this._on( this.handles[ i ], { "mousedown": that._mouseDown });
 				}
 
-				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {
 
 					axis = $(this.handles[i], this.element);
 
@@ -6947,21 +7158,17 @@ $.widget("ui.resizable", $.ui.mouse, {
 					target.css(padPos, padWrapper);
 
 					this._proportionallyResize();
-
 				}
 
-				// TODO: What's that good for? There's not anything to be executed left
-				if(!$(this.handles[i]).length) {
-					continue;
-				}
+				this._handles = this._handles.add( this.handles[ i ] );
 			}
 		};
 
 		// TODO: make renderAxis a prototype function
 		this._renderAxis(this.element);
 
-		this._handles = $(".ui-resizable-handle", this.element)
-			.disableSelection();
+		this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
+		this._handles.disableSelection();
 
 		this._handles.mouseover(function() {
 			if (!that.resizing) {
@@ -6983,7 +7190,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 					$(this).removeClass("ui-resizable-autohide");
 					that._handles.show();
 				})
-				.mouseleave(function(){
+				.mouseleave(function() {
 					if (o.disabled) {
 						return;
 					}
@@ -6995,7 +7202,6 @@ $.widget("ui.resizable", $.ui.mouse, {
 		}
 
 		this._mouseInit();
-
 	},
 
 	_destroy: function() {
@@ -7004,8 +7210,13 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 		var wrapper,
 			_destroy = function(exp) {
-				$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
-					.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+				$(exp)
+					.removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+					.removeData("resizable")
+					.removeData("ui-resizable")
+					.unbind(".resizable")
+					.find(".ui-resizable-handle")
+						.remove();
 			};
 
 		// TODO: Unwrap at same DOM position
@@ -7062,13 +7273,34 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 		this.offset = this.helper.offset();
 		this.position = { left: curleft, top: curtop };
-		this.size = this._helper ? { width: this.helper.width(), height: this.helper.height() } : { width: el.width(), height: el.height() };
-		this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+
+		this.size = this._helper ? {
+				width: this.helper.width(),
+				height: this.helper.height()
+			} : {
+				width: el.width(),
+				height: el.height()
+			};
+
+		this.originalSize = this._helper ? {
+				width: el.outerWidth(),
+				height: el.outerHeight()
+			} : {
+				width: el.width(),
+				height: el.height()
+			};
+
+		this.sizeDiff = {
+			width: el.outerWidth() - el.width(),
+			height: el.outerHeight() - el.height()
+		};
+
 		this.originalPosition = { left: curleft, top: curtop };
-		this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
 		this.originalMousePosition = { left: event.pageX, top: event.pageY };
 
-		this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+		this.aspectRatio = (typeof o.aspectRatio === "number") ?
+			o.aspectRatio :
+			((this.originalSize.width / this.originalSize.height) || 1);
 
 		cursor = $(".ui-resizable-" + this.axis).css("cursor");
 		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
@@ -7080,28 +7312,20 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 	_mouseDrag: function(event) {
 
-		var data,
-			el = this.helper, props = {},
+		var data, props,
 			smp = this.originalMousePosition,
 			a = this.axis,
-			dx = (event.pageX-smp.left)||0,
-			dy = (event.pageY-smp.top)||0,
+			dx = (event.pageX - smp.left) || 0,
+			dy = (event.pageY - smp.top) || 0,
 			trigger = this._change[a];
 
-		this.prevPosition = {
-			top: this.position.top,
-			left: this.position.left
-		};
-		this.prevSize = {
-			width: this.size.width,
-			height: this.size.height
-		};
+		this._updatePrevProperties();
 
 		if (!trigger) {
 			return false;
 		}
 
-		data = trigger.apply(this, [event, dx, dy]);
+		data = trigger.apply(this, [ event, dx, dy ]);
 
 		this._updateVirtualBoundaries(event.shiftKey);
 		if (this._aspectRatio || event.shiftKey) {
@@ -7114,26 +7338,16 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 		this._propagate("resize", event);
 
-		if ( this.position.top !== this.prevPosition.top ) {
-			props.top = this.position.top + "px";
-		}
-		if ( this.position.left !== this.prevPosition.left ) {
-			props.left = this.position.left + "px";
-		}
-		if ( this.size.width !== this.prevSize.width ) {
-			props.width = this.size.width + "px";
-		}
-		if ( this.size.height !== this.prevSize.height ) {
-			props.height = this.size.height + "px";
-		}
-		el.css( props );
+		props = this._applyChanges();
 
 		if ( !this._helper && this._proportionallyResizeElements.length ) {
 			this._proportionallyResize();
 		}
 
 		if ( !$.isEmptyObject( props ) ) {
+			this._updatePrevProperties();
 			this._trigger( "resize", event, this.ui() );
+			this._applyChanges();
 		}
 
 		return false;
@@ -7145,16 +7359,21 @@ $.widget("ui.resizable", $.ui.mouse, {
 		var pr, ista, soffseth, soffsetw, s, left, top,
 			o = this.options, that = this;
 
-		if(this._helper) {
+		if (this._helper) {
 
 			pr = this._proportionallyResizeElements;
 			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
-			soffseth = ista && this._hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+			soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height;
 			soffsetw = ista ? 0 : that.sizeDiff.width;
 
-			s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+			s = {
+				width: (that.helper.width()  - soffsetw),
+				height: (that.helper.height() - soffseth)
+			};
+			left = (parseInt(that.element.css("left"), 10) +
+				(that.position.left - that.originalPosition.left)) || null;
+			top = (parseInt(that.element.css("top"), 10) +
+				(that.position.top - that.originalPosition.top)) || null;
 
 			if (!o.animate) {
 				this.element.css($.extend(s, { top: top, left: left }));
@@ -7182,6 +7401,38 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 	},
 
+	_updatePrevProperties: function() {
+		this.prevPosition = {
+			top: this.position.top,
+			left: this.position.left
+		};
+		this.prevSize = {
+			width: this.size.width,
+			height: this.size.height
+		};
+	},
+
+	_applyChanges: function() {
+		var props = {};
+
+		if ( this.position.top !== this.prevPosition.top ) {
+			props.top = this.position.top + "px";
+		}
+		if ( this.position.left !== this.prevPosition.left ) {
+			props.left = this.position.left + "px";
+		}
+		if ( this.size.width !== this.prevSize.width ) {
+			props.width = this.size.width + "px";
+		}
+		if ( this.size.height !== this.prevSize.height ) {
+			props.height = this.size.height + "px";
+		}
+
+		this.helper.css( props );
+
+		return props;
+	},
+
 	_updateVirtualBoundaries: function(forceAspectRatio) {
 		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
 			o = this.options;
@@ -7193,22 +7444,22 @@ $.widget("ui.resizable", $.ui.mouse, {
 			maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity
 		};
 
-		if(this._aspectRatio || forceAspectRatio) {
+		if (this._aspectRatio || forceAspectRatio) {
 			pMinWidth = b.minHeight * this.aspectRatio;
 			pMinHeight = b.minWidth / this.aspectRatio;
 			pMaxWidth = b.maxHeight * this.aspectRatio;
 			pMaxHeight = b.maxWidth / this.aspectRatio;
 
-			if(pMinWidth > b.minWidth) {
+			if (pMinWidth > b.minWidth) {
 				b.minWidth = pMinWidth;
 			}
-			if(pMinHeight > b.minHeight) {
+			if (pMinHeight > b.minHeight) {
 				b.minHeight = pMinHeight;
 			}
-			if(pMaxWidth < b.maxWidth) {
+			if (pMaxWidth < b.maxWidth) {
 				b.maxWidth = pMaxWidth;
 			}
-			if(pMaxHeight < b.maxHeight) {
+			if (pMaxHeight < b.maxHeight) {
 				b.maxHeight = pMaxHeight;
 			}
 		}
@@ -7259,8 +7510,10 @@ $.widget("ui.resizable", $.ui.mouse, {
 
 		var o = this._vBoundaries,
 			a = this.axis,
-			ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
-			isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+			ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),
+			ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+			isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),
+			isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
 			dw = this.originalPosition.left + this.originalSize.width,
 			dh = this.position.top + this.size.height,
 			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
@@ -7300,32 +7553,56 @@ $.widget("ui.resizable", $.ui.mouse, {
 		return data;
 	},
 
+	_getPaddingPlusBorderDimensions: function( element ) {
+		var i = 0,
+			widths = [],
+			borders = [
+				element.css( "borderTopWidth" ),
+				element.css( "borderRightWidth" ),
+				element.css( "borderBottomWidth" ),
+				element.css( "borderLeftWidth" )
+			],
+			paddings = [
+				element.css( "paddingTop" ),
+				element.css( "paddingRight" ),
+				element.css( "paddingBottom" ),
+				element.css( "paddingLeft" )
+			];
+
+		for ( ; i < 4; i++ ) {
+			widths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );
+			widths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );
+		}
+
+		return {
+			height: widths[ 0 ] + widths[ 2 ],
+			width: widths[ 1 ] + widths[ 3 ]
+		};
+	},
+
 	_proportionallyResize: function() {
 
 		if (!this._proportionallyResizeElements.length) {
 			return;
 		}
 
-		var i, j, borders, paddings, prel,
+		var prel,
+			i = 0,
 			element = this.helper || this.element;
 
-		for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+		for ( ; i < this._proportionallyResizeElements.length; i++) {
 
 			prel = this._proportionallyResizeElements[i];
 
-			if (!this.borderDif) {
-				this.borderDif = [];
-				borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
-				paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
-
-				for ( j = 0; j < borders.length; j++ ) {
-					this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
-				}
+			// TODO: Seems like a bug to cache this.outerDimensions
+			// considering that we are in a loop.
+			if (!this.outerDimensions) {
+				this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
 			}
 
 			prel.css({
-				height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
-				width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+				height: (element.height() - this.outerDimensions.height) || 0,
+				width: (element.width() - this.outerDimensions.width) || 0
 			});
 
 		}
@@ -7337,7 +7614,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 		var el = this.element, o = this.options;
 		this.elementOffset = el.offset();
 
-		if(this._helper) {
+		if (this._helper) {
 
 			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
 
@@ -7345,8 +7622,8 @@ $.widget("ui.resizable", $.ui.mouse, {
 				width: this.element.outerWidth() - 1,
 				height: this.element.outerHeight() - 1,
 				position: "absolute",
-				left: this.elementOffset.left +"px",
-				top: this.elementOffset.top +"px",
+				left: this.elementOffset.left + "px",
+				top: this.elementOffset.top + "px",
 				zIndex: ++o.zIndex //TODO: Don't modify option
 			});
 
@@ -7376,21 +7653,25 @@ $.widget("ui.resizable", $.ui.mouse, {
 			return { height: this.originalSize.height + dy };
 		},
 		se: function(event, dx, dy) {
-			return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+			return $.extend(this._change.s.apply(this, arguments),
+				this._change.e.apply(this, [ event, dx, dy ]));
 		},
 		sw: function(event, dx, dy) {
-			return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+			return $.extend(this._change.s.apply(this, arguments),
+				this._change.w.apply(this, [ event, dx, dy ]));
 		},
 		ne: function(event, dx, dy) {
-			return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+			return $.extend(this._change.n.apply(this, arguments),
+				this._change.e.apply(this, [ event, dx, dy ]));
 		},
 		nw: function(event, dx, dy) {
-			return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+			return $.extend(this._change.n.apply(this, arguments),
+				this._change.w.apply(this, [ event, dx, dy ]));
 		}
 	},
 
 	_propagate: function(n, event) {
-		$.ui.plugin.call(this, n, [event, this.ui()]);
+		$.ui.plugin.call(this, n, [ event, this.ui() ]);
 		(n !== "resize" && this._trigger(n, event, this.ui()));
 	},
 
@@ -7404,9 +7685,7 @@ $.widget("ui.resizable", $.ui.mouse, {
 			position: this.position,
 			size: this.size,
 			originalSize: this.originalSize,
-			originalPosition: this.originalPosition,
-			prevSize: this.prevSize,
-			prevPosition: this.prevPosition
+			originalPosition: this.originalPosition
 		};
 	}
 
@@ -7423,11 +7702,13 @@ $.ui.plugin.add("resizable", "animate", {
 			o = that.options,
 			pr = that._proportionallyResizeElements,
 			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
-			soffseth = ista && that._hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+			soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
 			soffsetw = ista ? 0 : that.sizeDiff.width,
 			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
-			left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
-			top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+			left = (parseInt(that.element.css("left"), 10) +
+				(that.position.left - that.originalPosition.left)) || null,
+			top = (parseInt(that.element.css("top"), 10) +
+				(that.position.top - that.originalPosition.top)) || null;
 
 		that.element.animate(
 			$.extend(style, top && left ? { top: top, left: left } : {}), {
@@ -7520,7 +7801,7 @@ $.ui.plugin.add( "resizable", "containment", {
 		}
 	},
 
-	resize: function( event, ui ) {
+	resize: function( event ) {
 		var woset, hoset, isParent, isOffsetRelative,
 			that = $( this ).resizable( "instance" ),
 			o = that.options,
@@ -7539,7 +7820,11 @@ $.ui.plugin.add( "resizable", "containment", {
 		}
 
 		if ( cp.left < ( that._helper ? co.left : 0 ) ) {
-			that.size.width = that.size.width + ( that._helper ? ( that.position.left - co.left ) : ( that.position.left - cop.left ) );
+			that.size.width = that.size.width +
+				( that._helper ?
+					( that.position.left - co.left ) :
+					( that.position.left - cop.left ) );
+
 			if ( pRatio ) {
 				that.size.height = that.size.width / that.aspectRatio;
 				continueResize = false;
@@ -7548,7 +7833,11 @@ $.ui.plugin.add( "resizable", "containment", {
 		}
 
 		if ( cp.top < ( that._helper ? co.top : 0 ) ) {
-			that.size.height = that.size.height + ( that._helper ? ( that.position.top - co.top ) : that.position.top );
+			that.size.height = that.size.height +
+				( that._helper ?
+					( that.position.top - co.top ) :
+					that.position.top );
+
 			if ( pRatio ) {
 				that.size.width = that.size.height * that.aspectRatio;
 				continueResize = false;
@@ -7556,19 +7845,27 @@ $.ui.plugin.add( "resizable", "containment", {
 			that.position.top = that._helper ? co.top : 0;
 		}
 
-		that.offset.left = that.parentData.left + that.position.left;
-		that.offset.top = that.parentData.top + that.position.top;
-
-		woset = Math.abs( ( that._helper ? that.offset.left - cop.left : ( that.offset.left - co.left ) ) + that.sizeDiff.width );
-		hoset = Math.abs( ( that._helper ? that.offset.top - cop.top : ( that.offset.top - co.top ) ) + that.sizeDiff.height );
-
 		isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
 		isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
 
 		if ( isParent && isOffsetRelative ) {
-			woset -= Math.abs( that.parentData.left );
+			that.offset.left = that.parentData.left + that.position.left;
+			that.offset.top = that.parentData.top + that.position.top;
+		} else {
+			that.offset.left = that.element.offset().left;
+			that.offset.top = that.element.offset().top;
 		}
 
+		woset = Math.abs( that.sizeDiff.width +
+			(that._helper ?
+				that.offset.left - cop.left :
+				(that.offset.left - co.left)) );
+
+		hoset = Math.abs( that.sizeDiff.height +
+			(that._helper ?
+				that.offset.top - cop.top :
+				(that.offset.top - co.top)) );
+
 		if ( woset + that.size.width >= that.parentData.width ) {
 			that.size.width = that.parentData.width - woset;
 			if ( pRatio ) {
@@ -7585,15 +7882,15 @@ $.ui.plugin.add( "resizable", "containment", {
 			}
 		}
 
-		if ( !continueResize ){
-			that.position.left = ui.prevPosition.left;
-			that.position.top = ui.prevPosition.top;
-			that.size.width = ui.prevSize.width;
-			that.size.height = ui.prevSize.height;
+		if ( !continueResize ) {
+			that.position.left = that.prevPosition.left;
+			that.position.top = that.prevPosition.top;
+			that.size.width = that.prevSize.width;
+			that.size.height = that.prevSize.height;
 		}
 	},
 
-	stop: function(){
+	stop: function() {
 		var that = $( this ).resizable( "instance" ),
 			o = that.options,
 			co = that.containerOffset,
@@ -7624,61 +7921,49 @@ $.ui.plugin.add( "resizable", "containment", {
 
 $.ui.plugin.add("resizable", "alsoResize", {
 
-	start: function () {
+	start: function() {
 		var that = $(this).resizable( "instance" ),
-			o = that.options,
-			_store = function (exp) {
-				$(exp).each(function() {
-					var el = $(this);
-					el.data("ui-resizable-alsoresize", {
-						width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
-						left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
-					});
-				});
-			};
+			o = that.options;
 
-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
-			if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
-			else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
-		}else{
-			_store(o.alsoResize);
-		}
+		$(o.alsoResize).each(function() {
+			var el = $(this);
+			el.data("ui-resizable-alsoresize", {
+				width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+				left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+			});
+		});
 	},
 
-	resize: function (event, ui) {
+	resize: function(event, ui) {
 		var that = $(this).resizable( "instance" ),
 			o = that.options,
 			os = that.originalSize,
 			op = that.originalPosition,
 			delta = {
-				height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
-				top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
-			},
-
-			_alsoResize = function (exp, c) {
-				$(exp).each(function() {
-					var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
-						css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+				height: (that.size.height - os.height) || 0,
+				width: (that.size.width - os.width) || 0,
+				top: (that.position.top - op.top) || 0,
+				left: (that.position.left - op.left) || 0
+			};
 
-					$.each(css, function (i, prop) {
-						var sum = (start[prop]||0) + (delta[prop]||0);
-						if (sum && sum >= 0) {
-							style[prop] = sum || null;
-						}
-					});
+			$(o.alsoResize).each(function() {
+				var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+					css = el.parents(ui.originalElement[0]).length ?
+							[ "width", "height" ] :
+							[ "width", "height", "top", "left" ];
 
-					el.css(style);
+				$.each(css, function(i, prop) {
+					var sum = (start[prop] || 0) + (delta[prop] || 0);
+					if (sum && sum >= 0) {
+						style[prop] = sum || null;
+					}
 				});
-			};
 
-		if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
-			$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
-		}else{
-			_alsoResize(o.alsoResize);
-		}
+				el.css(style);
+			});
 	},
 
-	stop: function () {
+	stop: function() {
 		$(this).removeData("resizable-alsoresize");
 	}
 });
@@ -7691,7 +7976,16 @@ $.ui.plugin.add("resizable", "ghost", {
 
 		that.ghost = that.originalElement.clone();
 		that.ghost
-			.css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+			.css({
+				opacity: 0.25,
+				display: "block",
+				position: "relative",
+				height: cs.height,
+				width: cs.width,
+				margin: 0,
+				left: 0,
+				top: 0
+			})
 			.addClass("ui-resizable-ghost")
 			.addClass(typeof o.ghost === "string" ? o.ghost : "");
 
@@ -7699,10 +7993,14 @@ $.ui.plugin.add("resizable", "ghost", {
 
 	},
 
-	resize: function(){
+	resize: function() {
 		var that = $(this).resizable( "instance" );
 		if (that.ghost) {
-			that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+			that.ghost.css({
+				position: "relative",
+				height: that.size.height,
+				width: that.size.width
+			});
 		}
 	},
 
@@ -7718,15 +8016,16 @@ $.ui.plugin.add("resizable", "ghost", {
 $.ui.plugin.add("resizable", "grid", {
 
 	resize: function() {
-		var that = $(this).resizable( "instance" ),
+		var outerDimensions,
+			that = $(this).resizable( "instance" ),
 			o = that.options,
 			cs = that.size,
 			os = that.originalSize,
 			op = that.originalPosition,
 			a = that.axis,
-			grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
-			gridX = (grid[0]||1),
-			gridY = (grid[1]||1),
+			grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+			gridX = (grid[0] || 1),
+			gridY = (grid[1] || 1),
 			ox = Math.round((cs.width - os.width) / gridX) * gridX,
 			oy = Math.round((cs.height - os.height) / gridY) * gridY,
 			newWidth = os.width + ox,
@@ -7739,16 +8038,16 @@ $.ui.plugin.add("resizable", "grid", {
 		o.grid = grid;
 
 		if (isMinWidth) {
-			newWidth = newWidth + gridX;
+			newWidth += gridX;
 		}
 		if (isMinHeight) {
-			newHeight = newHeight + gridY;
+			newHeight += gridY;
 		}
 		if (isMaxWidth) {
-			newWidth = newWidth - gridX;
+			newWidth -= gridX;
 		}
 		if (isMaxHeight) {
-			newHeight = newHeight - gridY;
+			newHeight -= gridY;
 		}
 
 		if (/^(se|s|e)$/.test(a)) {
@@ -7763,19 +8062,25 @@ $.ui.plugin.add("resizable", "grid", {
 			that.size.height = newHeight;
 			that.position.left = op.left - ox;
 		} else {
+			if ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {
+				outerDimensions = that._getPaddingPlusBorderDimensions( this );
+			}
+
 			if ( newHeight - gridY > 0 ) {
 				that.size.height = newHeight;
 				that.position.top = op.top - oy;
 			} else {
-				that.size.height = gridY;
-				that.position.top = op.top + os.height - gridY;
+				newHeight = gridY - outerDimensions.height;
+				that.size.height = newHeight;
+				that.position.top = op.top + os.height - newHeight;
 			}
 			if ( newWidth - gridX > 0 ) {
 				that.size.width = newWidth;
 				that.position.left = op.left - ox;
 			} else {
-				that.size.width = gridX;
-				that.position.left = op.left + os.width - gridX;
+				newWidth = gridX - outerDimensions.width;
+				that.size.width = newWidth;
+				that.position.left = op.left + os.width - newWidth;
 			}
 		}
 	}
@@ -7786,10 +8091,10 @@ var resizable = $.ui.resizable;
 
 
 /*!
- * jQuery UI Dialog 1.11.0
+ * jQuery UI Dialog 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -7798,7 +8103,7 @@ var resizable = $.ui.resizable;
 
 
 var dialog = $.widget( "ui.dialog", {
-	version: "1.11.0",
+	version: "1.11.4",
 	options: {
 		appendTo: "body",
 		autoOpen: true,
@@ -7918,6 +8223,7 @@ var dialog = $.widget( "ui.dialog", {
 		var next,
 			originalPosition = this.originalPosition;
 
+		this._untrackInstance();
 		this._destroyOverlay();
 
 		this.element
@@ -7996,10 +8302,10 @@ var dialog = $.widget( "ui.dialog", {
 
 	_moveToTop: function( event, silent ) {
 		var moved = false,
-			zIndicies = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
+			zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
 				return +$( this ).css( "z-index" );
 			}).get(),
-			zIndexMax = Math.max.apply( null, zIndicies );
+			zIndexMax = Math.max.apply( null, zIndices );
 
 		if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
 			this.uiDialog.css( "z-index", zIndexMax + 1 );
@@ -8028,11 +8334,24 @@ var dialog = $.widget( "ui.dialog", {
 		this._position();
 		this._createOverlay();
 		this._moveToTop( null, true );
+
+		// Ensure the overlay is moved to the top with the dialog, but only when
+		// opening. The overlay shouldn't move after the dialog is open so that
+		// modeless dialogs opened after the modal dialog stack properly.
+		if ( this.overlay ) {
+			this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+		}
+
 		this._show( this.uiDialog, this.options.show, function() {
 			that._focusTabbable();
 			that._trigger( "focus" );
 		});
 
+		// Track the dialog immediately upon openening in case a focus event
+		// somehow occurs outside of the dialog before an element inside the
+		// dialog is focused (#10152)
+		this._makeFocusTarget();
+
 		this._trigger( "open" );
 	},
 
@@ -8344,14 +8663,18 @@ var dialog = $.widget( "ui.dialog", {
 
 	_trackFocus: function() {
 		this._on( this.widget(), {
-			"focusin": function( event ) {
-				this._untrackInstance();
-				this._trackingInstances().unshift( this );
+			focusin: function( event ) {
+				this._makeFocusTarget();
 				this._focusedElement = $( event.target );
 			}
 		});
 	},
 
+	_makeFocusTarget: function() {
+		this._untrackInstance();
+		this._trackingInstances().unshift( this );
+	},
+
 	_untrackInstance: function() {
 		var instances = this._trackingInstances(),
 			exists = $.inArray( this, instances );
@@ -8625,10 +8948,10 @@ var dialog = $.widget( "ui.dialog", {
 
 
 /*!
- * jQuery UI Droppable 1.11.0
+ * jQuery UI Droppable 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -8637,7 +8960,7 @@ var dialog = $.widget( "ui.dialog", {
 
 
 $.widget( "ui.droppable", {
-	version: "1.11.0",
+	version: "1.11.4",
 	widgetEventPrefix: "drop",
 	options: {
 		accept: "*",
@@ -8801,7 +9124,7 @@ $.widget( "ui.droppable", {
 				!inst.options.disabled &&
 				inst.options.scope === draggable.options.scope &&
 				inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&
-				$.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance )
+				$.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )
 			) { childrenIntersection = true; return false; }
 		});
 		if ( childrenIntersection ) {
@@ -8839,15 +9162,14 @@ $.ui.intersect = (function() {
 		return ( x >= reference ) && ( x < ( reference + size ) );
 	}
 
-	return function( draggable, droppable, toleranceMode ) {
+	return function( draggable, droppable, toleranceMode, event ) {
 
 		if ( !droppable.offset ) {
 			return false;
 		}
 
-		var draggableLeft, draggableTop,
-			x1 = ( draggable.positionAbs || draggable.position.absolute ).left,
-			y1 = ( draggable.positionAbs || draggable.position.absolute ).top,
+		var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
+			y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
 			x2 = x1 + draggable.helperProportions.width,
 			y2 = y1 + draggable.helperProportions.height,
 			l = droppable.offset.left,
@@ -8864,9 +9186,7 @@ $.ui.intersect = (function() {
 				t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
 				y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
 		case "pointer":
-			draggableLeft = ( ( draggable.positionAbs || draggable.position.absolute ).left + ( draggable.clickOffset || draggable.offset.click ).left );
-			draggableTop = ( ( draggable.positionAbs || draggable.position.absolute ).top + ( draggable.clickOffset || draggable.offset.click ).top );
-			return isOverAxis( draggableTop, t, droppable.proportions().height ) && isOverAxis( draggableLeft, l, droppable.proportions().width );
+			return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );
 		case "touch":
 			return (
 				( y1 >= t && y1 <= b ) || // Top edge touching
@@ -8936,7 +9256,7 @@ $.ui.ddmanager = {
 			if ( !this.options ) {
 				return;
 			}
-			if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance ) ) {
+			if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
 				dropped = this._drop.call( this, event ) || dropped;
 			}
 
@@ -8973,7 +9293,7 @@ $.ui.ddmanager = {
 			}
 
 			var parentInstance, scope, parent,
-				intersects = $.ui.intersect( draggable, this, this.options.tolerance ),
+				intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
 				c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null );
 			if ( !c ) {
 				return;
@@ -9025,10 +9345,10 @@ var droppable = $.ui.droppable;
 
 
 /*!
- * jQuery UI Effects 1.11.0
+ * jQuery UI Effects 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -9036,7 +9356,11 @@ var droppable = $.ui.droppable;
  */
 
 
-var dataSpace = "ui-effects-";
+var dataSpace = "ui-effects-",
+
+	// Create a local jQuery because jQuery Color relies on it and the
+	// global may not exist with AMD and a custom build (#10199)
+	jQuery = $;
 
 $.effects = {
 	effect: {}
@@ -9645,7 +9969,7 @@ color.hook = function( hook ) {
 				}
 				try {
 					elem.style[ hook ] = value;
-				} catch( e ) {
+				} catch ( e ) {
 					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
 				}
 			}
@@ -9916,7 +10240,7 @@ $.fn.extend({
 (function() {
 
 $.extend( $.effects, {
-	version: "1.11.0",
+	version: "1.11.4",
 
 	// Saves a set of properties in a data storage
 	save: function( element, set ) {
@@ -10010,7 +10334,7 @@ $.extend( $.effects, {
 		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
 		try {
 			active.id;
-		} catch( e ) {
+		} catch ( e ) {
 			active = document.body;
 		}
 
@@ -10312,10 +10636,10 @@ var effect = $.effects;
 
 
 /*!
- * jQuery UI Effects Blind 1.11.0
+ * jQuery UI Effects Blind 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -10389,10 +10713,10 @@ var effectBlind = $.effects.effect.blind = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Bounce 1.11.0
+ * jQuery UI Effects Bounce 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -10499,10 +10823,10 @@ var effectBounce = $.effects.effect.bounce = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Clip 1.11.0
+ * jQuery UI Effects Clip 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -10563,10 +10887,10 @@ var effectClip = $.effects.effect.clip = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Drop 1.11.0
+ * jQuery UI Effects Drop 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -10593,7 +10917,7 @@ var effectDrop = $.effects.effect.drop = function( o, done ) {
 	el.show();
 	$.effects.createWrapper( el );
 
-	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
 
 	if ( show ) {
 		el
@@ -10625,10 +10949,10 @@ var effectDrop = $.effects.effect.drop = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Explode 1.11.0
+ * jQuery UI Effects Explode 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -10719,10 +11043,10 @@ var effectExplode = $.effects.effect.explode = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Fade 1.11.0
+ * jQuery UI Effects Fade 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -10746,10 +11070,10 @@ var effectFade = $.effects.effect.fade = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Fold 1.11.0
+ * jQuery UI Effects Fold 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -10819,10 +11143,10 @@ var effectFold = $.effects.effect.fold = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Highlight 1.11.0
+ * jQuery UI Effects Highlight 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -10866,10 +11190,10 @@ var effectHighlight = $.effects.effect.highlight = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Size 1.11.0
+ * jQuery UI Effects Size 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11086,10 +11410,10 @@ var effectSize = $.effects.effect.size = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Scale 1.11.0
+ * jQuery UI Effects Scale 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11161,10 +11485,10 @@ var effectScale = $.effects.effect.scale = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Puff 1.11.0
+ * jQuery UI Effects Puff 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11207,10 +11531,10 @@ var effectPuff = $.effects.effect.puff = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Pulsate 1.11.0
+ * jQuery UI Effects Pulsate 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11267,10 +11591,10 @@ var effectPulsate = $.effects.effect.pulsate = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Shake 1.11.0
+ * jQuery UI Effects Shake 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11338,10 +11662,10 @@ var effectShake = $.effects.effect.shake = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Slide 1.11.0
+ * jQuery UI Effects Slide 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11399,10 +11723,10 @@ var effectSlide = $.effects.effect.slide = function( o, done ) {
 
 
 /*!
- * jQuery UI Effects Transfer 1.11.0
+ * jQuery UI Effects Transfer 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11443,10 +11767,10 @@ var effectTransfer = $.effects.effect.transfer = function( o, done ) {
 
 
 /*!
- * jQuery UI Progressbar 1.11.0
+ * jQuery UI Progressbar 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11455,7 +11779,7 @@ var effectTransfer = $.effects.effect.transfer = function( o, done ) {
 
 
 var progressbar = $.widget( "ui.progressbar", {
-	version: "1.11.0",
+	version: "1.11.4",
 	options: {
 		max: 100,
 		value: 0,
@@ -11588,10 +11912,10 @@ var progressbar = $.widget( "ui.progressbar", {
 
 
 /*!
- * jQuery UI Selectable 1.11.0
+ * jQuery UI Selectable 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11600,7 +11924,7 @@ var progressbar = $.widget( "ui.progressbar", {
 
 
 var selectable = $.widget("ui.selectable", $.ui.mouse, {
-	version: "1.11.0",
+	version: "1.11.4",
 	options: {
 		appendTo: "body",
 		autoRefresh: true,
@@ -11860,10 +12184,10 @@ var selectable = $.widget("ui.selectable", $.ui.mouse, {
 
 
 /*!
- * jQuery UI Selectmenu 1.11.0
+ * jQuery UI Selectmenu 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -11872,7 +12196,7 @@ var selectable = $.widget("ui.selectable", $.ui.mouse, {
 
 
 var selectmenu = $.widget( "ui.selectmenu", {
-	version: "1.11.0",
+	version: "1.11.4",
 	defaultElement: "<select>",
 	options: {
 		appendTo: null,
@@ -11912,8 +12236,7 @@ var selectmenu = $.widget( "ui.selectmenu", {
 	},
 
 	_drawButton: function() {
-		var that = this,
-			tabindex = this.element.attr( "tabindex" );
+		var that = this;
 
 		// Associate existing label with the new button
 		this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
@@ -11930,7 +12253,7 @@ var selectmenu = $.widget( "ui.selectmenu", {
 		// Create button
 		this.button = $( "<span>", {
 			"class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
-			tabindex: tabindex || this.options.disabled ? -1 : 0,
+			tabindex: this.options.disabled ? -1 : 0,
 			id: this.ids.button,
 			role: "combobox",
 			"aria-expanded": "false",
@@ -11951,7 +12274,7 @@ var selectmenu = $.widget( "ui.selectmenu", {
 			.appendTo( this.button );
 
 		this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
-		this._setOption( "width", this.options.width );
+		this._resizeButton();
 
 		this._on( this.button, this._buttonEvents );
 		this.button.one( "focusin", function() {
@@ -11989,6 +12312,12 @@ var selectmenu = $.widget( "ui.selectmenu", {
 				role: "listbox",
 				select: function( event, ui ) {
 					event.preventDefault();
+
+					// support: IE8
+					// If the item was selected via a click, the text selection
+					// will be destroyed in IE
+					that._setSelection();
+
 					that._select( ui.item.data( "ui-selectmenu-item" ), event );
 				},
 				focus: function( event, ui ) {
@@ -12031,7 +12360,9 @@ var selectmenu = $.widget( "ui.selectmenu", {
 	refresh: function() {
 		this._refreshMenu();
 		this._setText( this.buttonText, this._getSelectedItem().text() );
-		this._setOption( "width", this.options.width );
+		if ( !this.options.width ) {
+			this._resizeButton();
+		}
 	},
 
 	_refreshMenu: function() {
@@ -12097,6 +12428,7 @@ var selectmenu = $.widget( "ui.selectmenu", {
 		this.isOpen = false;
 		this._toggleAttr();
 
+		this.range = null;
 		this._off( this.document );
 
 		this._trigger( "close", event );
@@ -12185,6 +12517,29 @@ var selectmenu = $.widget( "ui.selectmenu", {
 		this[ this.isOpen ? "close" : "open" ]( event );
 	},
 
+	_setSelection: function() {
+		var selection;
+
+		if ( !this.range ) {
+			return;
+		}
+
+		if ( window.getSelection ) {
+			selection = window.getSelection();
+			selection.removeAllRanges();
+			selection.addRange( this.range );
+
+		// support: IE8
+		} else {
+			this.range.select();
+		}
+
+		// support: IE
+		// Setting the text selection kills the button focus in IE, but
+		// restoring the focus doesn't kill the selection.
+		this.button.focus();
+	},
+
 	_documentClick: {
 		mousedown: function( event ) {
 			if ( !this.isOpen ) {
@@ -12198,7 +12553,28 @@ var selectmenu = $.widget( "ui.selectmenu", {
 	},
 
 	_buttonEvents: {
-		click: "_toggle",
+
+		// Prevent text selection from being reset when interacting with the selectmenu (#10144)
+		mousedown: function() {
+			var selection;
+
+			if ( window.getSelection ) {
+				selection = window.getSelection();
+				if ( selection.rangeCount ) {
+					this.range = selection.getRangeAt( 0 );
+				}
+
+			// support: IE8
+			} else {
+				this.range = document.selection.createRange();
+			}
+		},
+
+		click: function( event ) {
+			this._setSelection();
+			this._toggle( event );
+		},
+
 		keydown: function( event ) {
 			var preventDefault = true;
 			switch ( event.keyCode ) {
@@ -12320,10 +12696,7 @@ var selectmenu = $.widget( "ui.selectmenu", {
 		}
 
 		if ( key === "width" ) {
-			if ( !value ) {
-				value = this.element.outerWidth();
-			}
-			this.button.outerWidth( value );
+			this._resizeButton();
 		}
 	},
 
@@ -12356,6 +12729,17 @@ var selectmenu = $.widget( "ui.selectmenu", {
 		this.menu.attr( "aria-hidden", !this.isOpen );
 	},
 
+	_resizeButton: function() {
+		var width = this.options.width;
+
+		if ( !width ) {
+			width = this.element.show().outerWidth();
+			this.element.hide();
+		}
+
+		this.button.outerWidth( width );
+	},
+
 	_resizeMenu: function() {
 		this.menu.outerWidth( Math.max(
 			this.button.outerWidth(),
@@ -12379,7 +12763,7 @@ var selectmenu = $.widget( "ui.selectmenu", {
 			data.push({
 				element: option,
 				index: index,
-				value: option.attr( "value" ),
+				value: option.val(),
 				label: option.text(),
 				optgroup: optgroup.attr( "label" ) || "",
 				disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
@@ -12399,10 +12783,10 @@ var selectmenu = $.widget( "ui.selectmenu", {
 
 
 /*!
- * jQuery UI Slider 1.11.0
+ * jQuery UI Slider 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -12411,7 +12795,7 @@ var selectmenu = $.widget( "ui.selectmenu", {
 
 
 var slider = $.widget( "ui.slider", $.ui.mouse, {
-	version: "1.11.0",
+	version: "1.11.4",
 	widgetEventPrefix: "slide",
 
 	options: {
@@ -12443,6 +12827,7 @@ var slider = $.widget( "ui.slider", $.ui.mouse, {
 		this._handleIndex = null;
 		this._detectOrientation();
 		this._mouseInit();
+		this._calculateNewMax();
 
 		this.element
 			.addClass( "ui-slider" +
@@ -12839,6 +13224,9 @@ var slider = $.widget( "ui.slider", $.ui.mouse, {
 					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
 					.addClass( "ui-slider-" + this.orientation );
 				this._refreshValue();
+
+				// Reset positioning from previous orientation
+				this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
 				break;
 			case "value":
 				this._animateOff = true;
@@ -12854,9 +13242,11 @@ var slider = $.widget( "ui.slider", $.ui.mouse, {
 				}
 				this._animateOff = false;
 				break;
+			case "step":
 			case "min":
 			case "max":
 				this._animateOff = true;
+				this._calculateNewMax();
 				this._refreshValue();
 				this._animateOff = false;
 				break;
@@ -12894,7 +13284,7 @@ var slider = $.widget( "ui.slider", $.ui.mouse, {
 			// .slice() creates a copy of the array
 			// this copy gets trimmed by min and max and then returned
 			vals = this.options.values.slice();
-			for ( i = 0; i < vals.length; i+= 1) {
+			for ( i = 0; i < vals.length; i += 1) {
 				vals[ i ] = this._trimAlignValue( vals[ i ] );
 			}
 
@@ -12925,12 +13315,35 @@ var slider = $.widget( "ui.slider", $.ui.mouse, {
 		return parseFloat( alignValue.toFixed(5) );
 	},
 
+	_calculateNewMax: function() {
+		var max = this.options.max,
+			min = this._valueMin(),
+			step = this.options.step,
+			aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step;
+		max = aboveMin + min;
+		this.max = parseFloat( max.toFixed( this._precision() ) );
+	},
+
+	_precision: function() {
+		var precision = this._precisionOf( this.options.step );
+		if ( this.options.min !== null ) {
+			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+		}
+		return precision;
+	},
+
+	_precisionOf: function( num ) {
+		var str = num.toString(),
+			decimal = str.indexOf( "." );
+		return decimal === -1 ? 0 : str.length - decimal - 1;
+	},
+
 	_valueMin: function() {
 		return this.options.min;
 	},
 
 	_valueMax: function() {
-		return this.options.max;
+		return this.max;
 	},
 
 	_refreshValue: function() {
@@ -13072,10 +13485,10 @@ var slider = $.widget( "ui.slider", $.ui.mouse, {
 
 
 /*!
- * jQuery UI Sortable 1.11.0
+ * jQuery UI Sortable 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -13084,7 +13497,7 @@ var slider = $.widget( "ui.slider", $.ui.mouse, {
 
 
 var sortable = $.widget("ui.sortable", $.ui.mouse, {
-	version: "1.11.0",
+	version: "1.11.4",
 	widgetEventPrefix: "sort",
 	ready: false,
 	options: {
@@ -13135,17 +13548,12 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 	},
 
 	_create: function() {
-
-		var o = this.options;
 		this.containerCache = {};
 		this.element.addClass("ui-sortable");
 
 		//Get the items
 		this.refresh();
 
-		//Let's determine if the items are being displayed horizontally
-		this.floating = this.items.length ? o.axis === "x" || this._isFloating(this.items[0].item) : false;
-
 		//Let's determine the parent's offset
 		this.offset = this.element.offset();
 
@@ -13334,7 +13742,7 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 		}
 
 		//Prepare scrolling
-		if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+		if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
 			this.overflowOffset = this.scrollParent.offset();
 		}
 
@@ -13386,7 +13794,7 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 
 		//Do scrolling
 		if(this.options.scroll) {
-			if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+			if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
 
 				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
 					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
@@ -13402,16 +13810,16 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 
 			} else {
 
-				if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
-				} else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+				if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+					scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+				} else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+					scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
 				}
 
-				if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
-				} else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+				if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+					scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+				} else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+					scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
 				}
 
 			}
@@ -13510,10 +13918,10 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 				animation = {};
 
 			if ( !axis || axis === "x" ) {
-				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
+				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
 			}
 			if ( !axis || axis === "y" ) {
-				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
+				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
 			}
 			this.reverting = true;
 			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
@@ -13706,7 +14114,7 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 
 		if(connectWith && connected) {
 			for (i = connectWith.length - 1; i >= 0; i--){
-				cur = $(connectWith[i]);
+				cur = $(connectWith[i], this.document[0]);
 				for ( j = cur.length - 1; j >= 0; j--){
 					inst = $.data(cur[j], this.widgetFullName);
 					if(inst && inst !== this && !inst.options.disabled) {
@@ -13756,7 +14164,7 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 
 		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
 			for (i = connectWith.length - 1; i >= 0; i--){
-				cur = $(connectWith[i]);
+				cur = $(connectWith[i], this.document[0]);
 				for (j = cur.length - 1; j >= 0; j--){
 					inst = $.data(cur[j], this.widgetFullName);
 					if(inst && inst !== this && !inst.options.disabled) {
@@ -13789,6 +14197,11 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 
 	refreshPositions: function(fast) {
 
+		// Determine whether items are being displayed horizontally
+		this.floating = this.items.length ?
+			this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
+			false;
+
 		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
 		if(this.offsetParent && this.helper) {
 			this.offset.parent = this._getParentOffset();
@@ -13846,12 +14259,13 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
 							.removeClass("ui-sortable-helper");
 
-					if ( nodeName === "tr" ) {
-						that.currentItem.children().each(function() {
-							$( "<td>&#160;</td>", that.document[0] )
-								.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
-								.appendTo( element );
-						});
+					if ( nodeName === "tbody" ) {
+						that._createTrPlaceholder(
+							that.currentItem.find( "tr" ).eq( 0 ),
+							$( "<tr>", that.document[ 0 ] ).appendTo( element )
+						);
+					} else if ( nodeName === "tr" ) {
+						that._createTrPlaceholder( that.currentItem, element );
 					} else if ( nodeName === "img" ) {
 						element.attr( "src", that.currentItem.attr( "src" ) );
 					}
@@ -13888,6 +14302,16 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 
 	},
 
+	_createTrPlaceholder: function( sourceTr, targetTr ) {
+		var that = this;
+
+		sourceTr.children().each(function() {
+			$( "<td>&#160;</td>", that.document[ 0 ] )
+				.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+				.appendTo( targetTr );
+		});
+	},
+
 	_contactContainers: function(event) {
 		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
 			innermostContainer = null,
@@ -13969,6 +14393,10 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 			}
 
 			if(this.currentContainer === this.containers[innermostIndex]) {
+				if ( !this.currentContainer.containerCache.over ) {
+					this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+					this.currentContainer.containerCache.over = 1;
+				}
 				return;
 			}
 
@@ -14044,14 +14472,14 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
 		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
 		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
-		if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+		if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
 			po.left += this.scrollParent.scrollLeft();
 			po.top += this.scrollParent.scrollTop();
 		}
 
 		// This needs to be actually done for all browsers, since pageX/pageY includes this information
 		// with an ugly IE fix
-		if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+		if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
 			po = { top: 0, left: 0 };
 		}
 
@@ -14101,8 +14529,8 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 			this.containment = [
 				0 - this.offset.relative.left - this.offset.parent.left,
 				0 - this.offset.relative.top - this.offset.parent.top,
-				$(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
-				($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+				o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+				(o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
 			];
 		}
 
@@ -14127,7 +14555,7 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 			pos = this.position;
 		}
 		var mod = d === "absolute" ? 1 : -1,
-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
 			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
 
 		return {
@@ -14153,13 +14581,13 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 			o = this.options,
 			pageX = event.pageX,
 			pageY = event.pageY,
-			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
 
 		// This is another very weird special case that only happens for relative elements:
 		// 1. If the css position is relative
 		// 2. and the scroll parent is the document or similar to the offset parent
 		// we have to refresh the relative offset during the scroll so there are no jumps
-		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
 			this.offset.relative = this._getRelativeOffset();
 		}
 
@@ -14307,18 +14735,6 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 		}
 
 		this.dragging = false;
-		if(this.cancelHelperRemoval) {
-			if(!noPropagation) {
-				this._trigger("beforeStop", event, this._uiHash());
-				for (i=0; i < delayedTriggers.length; i++) {
-					delayedTriggers[i].call(this, event);
-				} //Trigger all delayed events
-				this._trigger("stop", event, this._uiHash());
-			}
-
-			this.fromOutside = false;
-			return false;
-		}
 
 		if(!noPropagation) {
 			this._trigger("beforeStop", event, this._uiHash());
@@ -14327,10 +14743,12 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
 		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
 
-		if(this.helper[0] !== this.currentItem[0]) {
-			this.helper.remove();
+		if ( !this.cancelHelperRemoval ) {
+			if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+				this.helper.remove();
+			}
+			this.helper = null;
 		}
-		this.helper = null;
 
 		if(!noPropagation) {
 			for (i=0; i < delayedTriggers.length; i++) {
@@ -14340,7 +14758,7 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 		}
 
 		this.fromOutside = false;
-		return true;
+		return !this.cancelHelperRemoval;
 
 	},
 
@@ -14367,10 +14785,10 @@ var sortable = $.widget("ui.sortable", $.ui.mouse, {
 
 
 /*!
- * jQuery UI Spinner 1.11.0
+ * jQuery UI Spinner 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -14390,7 +14808,7 @@ function spinner_modifier( fn ) {
 }
 
 var spinner = $.widget( "ui.spinner", {
-	version: "1.11.0",
+	version: "1.11.4",
 	defaultElement: "<input>",
 	widgetEventPrefix: "spin",
 	options: {
@@ -14866,10 +15284,10 @@ var spinner = $.widget( "ui.spinner", {
 
 
 /*!
- * jQuery UI Tabs 1.11.0
+ * jQuery UI Tabs 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -14878,7 +15296,7 @@ var spinner = $.widget( "ui.spinner", {
 
 
 var tabs = $.widget( "ui.tabs", {
-	version: "1.11.0",
+	version: "1.11.4",
 	delay: 300,
 	options: {
 		active: null,
@@ -14928,24 +15346,7 @@ var tabs = $.widget( "ui.tabs", {
 
 		this.element
 			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
-			.toggleClass( "ui-tabs-collapsible", options.collapsible )
-			// Prevent users from focusing disabled tabs via click
-			.delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
-				if ( $( this ).is( ".ui-state-disabled" ) ) {
-					event.preventDefault();
-				}
-			})
-			// support: IE <9
-			// Preventing the default action in mousedown doesn't prevent IE
-			// from focusing the element, so if the anchor gets focused, blur.
-			// We don't have to worry about focusing the previously focused
-			// element since clicking on a non-focusable element should focus
-			// the body anyway.
-			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
-				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
-					this.blur();
-				}
-			});
+			.toggleClass( "ui-tabs-collapsible", options.collapsible );
 
 		this._processTabs();
 		options.active = this._initialActive();
@@ -15071,8 +15472,9 @@ var tabs = $.widget( "ui.tabs", {
 		clearTimeout( this.activating );
 		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
 
-		// Navigating with control key will prevent automatic activation
-		if ( !event.ctrlKey ) {
+		// Navigating with control/command key will prevent automatic activation
+		if ( !event.ctrlKey && !event.metaKey ) {
+
 			// Update aria-selected immediately so that AT think the tab is already selected.
 			// Otherwise AT may confuse the user by stating that they need to activate the tab,
 			// but the tab will already be activated by the time the announcement finishes.
@@ -15242,11 +15644,33 @@ var tabs = $.widget( "ui.tabs", {
 	},
 
 	_processTabs: function() {
-		var that = this;
+		var that = this,
+			prevTabs = this.tabs,
+			prevAnchors = this.anchors,
+			prevPanels = this.panels;
 
 		this.tablist = this._getList()
 			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
-			.attr( "role", "tablist" );
+			.attr( "role", "tablist" )
+
+			// Prevent users from focusing disabled tabs via click
+			.delegate( "> li", "mousedown" + this.eventNamespace, function( event ) {
+				if ( $( this ).is( ".ui-state-disabled" ) ) {
+					event.preventDefault();
+				}
+			})
+
+			// support: IE <9
+			// Preventing the default action in mousedown doesn't prevent IE
+			// from focusing the element, so if the anchor gets focused, blur.
+			// We don't have to worry about focusing the previously focused
+			// element since clicking on a non-focusable element should focus
+			// the body anyway.
+			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+					this.blur();
+				}
+			});
 
 		this.tabs = this.tablist.find( "> li:has(a[href])" )
 			.addClass( "ui-state-default ui-corner-top" )
@@ -15307,6 +15731,13 @@ var tabs = $.widget( "ui.tabs", {
 		this.panels
 			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
 			.attr( "role", "tabpanel" );
+
+		// Avoid memory leaks (#10056)
+		if ( prevTabs ) {
+			this._off( prevTabs.not( this.tabs ) );
+			this._off( prevAnchors.not( this.anchors ) );
+			this._off( prevPanels.not( this.panels ) );
+		}
 	},
 
 	// allow overriding how to find the list for rare usage scenarios (#7715)
@@ -15564,6 +15995,8 @@ var tabs = $.widget( "ui.tabs", {
 			.removeAttr( "tabIndex" )
 			.removeUniqueId();
 
+		this.tablist.unbind( this.eventNamespace );
+
 		this.tabs.add( this.panels ).each(function() {
 			if ( $.data( this, "ui-tabs-destroy" ) ) {
 				$( this ).remove();
@@ -15655,6 +16088,18 @@ var tabs = $.widget( "ui.tabs", {
 			eventData = {
 				tab: tab,
 				panel: panel
+			},
+			complete = function( jqXHR, status ) {
+				if ( status === "abort" ) {
+					that.panels.stop( false, true );
+				}
+
+				tab.removeClass( "ui-tabs-loading" );
+				panel.removeAttr( "aria-busy" );
+
+				if ( jqXHR === that.xhr ) {
+					delete that.xhr;
+				}
 			};
 
 		// not remote
@@ -15672,28 +16117,21 @@ var tabs = $.widget( "ui.tabs", {
 			panel.attr( "aria-busy", "true" );
 
 			this.xhr
-				.success(function( response ) {
+				.done(function( response, status, jqXHR ) {
 					// support: jQuery <1.8
 					// http://bugs.jquery.com/ticket/11778
 					setTimeout(function() {
 						panel.html( response );
 						that._trigger( "load", event, eventData );
+
+						complete( jqXHR, status );
 					}, 1 );
 				})
-				.complete(function( jqXHR, status ) {
+				.fail(function( jqXHR, status ) {
 					// support: jQuery <1.8
 					// http://bugs.jquery.com/ticket/11778
 					setTimeout(function() {
-						if ( status === "abort" ) {
-							that.panels.stop( false, true );
-						}
-
-						tab.removeClass( "ui-tabs-loading" );
-						panel.removeAttr( "aria-busy" );
-
-						if ( jqXHR === that.xhr ) {
-							delete that.xhr;
-						}
+						complete( jqXHR, status );
 					}, 1 );
 				});
 		}
@@ -15718,10 +16156,10 @@ var tabs = $.widget( "ui.tabs", {
 
 
 /*!
- * jQuery UI Tooltip 1.11.0
+ * jQuery UI Tooltip 1.11.4
  * http://jqueryui.com
  *
- * Copyright 2014 jQuery Foundation and other contributors
+ * Copyright jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -15730,7 +16168,7 @@ var tabs = $.widget( "ui.tabs", {
 
 
 var tooltip = $.widget( "ui.tooltip", {
-	version: "1.11.0",
+	version: "1.11.4",
 	options: {
 		content: function() {
 			// support: IE<9, Opera in jQuery <1.7
@@ -15790,6 +16228,7 @@ var tooltip = $.widget( "ui.tooltip", {
 
 		// IDs of generated tooltips, needed for destroy
 		this.tooltips = {};
+
 		// IDs of parent tooltips where we removed the title attribute
 		this.parents = {};
 
@@ -15821,8 +16260,8 @@ var tooltip = $.widget( "ui.tooltip", {
 		this._super( key, value );
 
 		if ( key === "content" ) {
-			$.each( this.tooltips, function( id, element ) {
-				that._updateContent( element );
+			$.each( this.tooltips, function( id, tooltipData ) {
+				that._updateContent( tooltipData.element );
 			});
 		}
 	},
@@ -15831,9 +16270,9 @@ var tooltip = $.widget( "ui.tooltip", {
 		var that = this;
 
 		// close open tooltips
-		$.each( this.tooltips, function( id, element ) {
+		$.each( this.tooltips, function( id, tooltipData ) {
 			var event = $.Event( "blur" );
-			event.target = event.currentTarget = element[0];
+			event.target = event.currentTarget = tooltipData.element[ 0 ];
 			that.close( event, true );
 		});
 
@@ -15897,6 +16336,7 @@ var tooltip = $.widget( "ui.tooltip", {
 			});
 		}
 
+		this._registerCloseHandlers( event, target );
 		this._updateContent( target, event );
 	},
 
@@ -15911,13 +16351,16 @@ var tooltip = $.widget( "ui.tooltip", {
 		}
 
 		content = contentOption.call( target[0], function( response ) {
-			// ignore async response if tooltip was closed already
-			if ( !target.data( "ui-tooltip-open" ) ) {
-				return;
-			}
+
 			// IE may instantly serve a cached response for ajax requests
 			// delay this call to _open so the other call to _open runs first
 			that._delay(function() {
+
+				// Ignore async response if tooltip was closed already
+				if ( !target.data( "ui-tooltip-open" ) ) {
+					return;
+				}
+
 				// jQuery creates a special event for focusin when it doesn't
 				// exist natively. To improve performance, the native event
 				// object is reused and the type is changed. Therefore, we can't
@@ -15935,7 +16378,7 @@ var tooltip = $.widget( "ui.tooltip", {
 	},
 
 	_open: function( event, target, content ) {
-		var tooltip, events, delayedShow, a11yContent,
+		var tooltipData, tooltip, delayedShow, a11yContent,
 			positionOption = $.extend( {}, this.options.position );
 
 		if ( !content ) {
@@ -15944,9 +16387,9 @@ var tooltip = $.widget( "ui.tooltip", {
 
 		// Content can be updated multiple times. If the tooltip already
 		// exists, then just update the content and bail.
-		tooltip = this._find( target );
-		if ( tooltip.length ) {
-			tooltip.find( ".ui-tooltip-content" ).html( content );
+		tooltipData = this._find( target );
+		if ( tooltipData ) {
+			tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
 			return;
 		}
 
@@ -15965,7 +16408,8 @@ var tooltip = $.widget( "ui.tooltip", {
 			}
 		}
 
-		tooltip = this._tooltip( target );
+		tooltipData = this._tooltip( target );
+		tooltip = tooltipData.tooltip;
 		this._addDescribedBy( target, tooltip.attr( "id" ) );
 		tooltip.find( ".ui-tooltip-content" ).html( content );
 
@@ -16016,8 +16460,10 @@ var tooltip = $.widget( "ui.tooltip", {
 		}
 
 		this._trigger( "open", event, { tooltip: tooltip } );
+	},
 
-		events = {
+	_registerCloseHandlers: function( event, target ) {
+		var events = {
 			keyup: function( event ) {
 				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
 					var fakeEvent = $.Event(event);
@@ -16031,7 +16477,7 @@ var tooltip = $.widget( "ui.tooltip", {
 		// tooltips will handle this in destroy.
 		if ( target[ 0 ] !== this.element[ 0 ] ) {
 			events.remove = function() {
-				this._removeTooltip( tooltip );
+				this._removeTooltip( this._find( target ).tooltip );
 			};
 		}
 
@@ -16045,13 +16491,27 @@ var tooltip = $.widget( "ui.tooltip", {
 	},
 
 	close: function( event ) {
-		var that = this,
+		var tooltip,
+			that = this,
 			target = $( event ? event.currentTarget : this.element ),
-			tooltip = this._find( target );
+			tooltipData = this._find( target );
+
+		// The tooltip may already be closed
+		if ( !tooltipData ) {
+
+			// We set ui-tooltip-open immediately upon open (in open()), but only set the
+			// additional data once there's actually content to show (in _open()). So even if the
+			// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
+			// the period between open() and _open().
+			target.removeData( "ui-tooltip-open" );
+			return;
+		}
+
+		tooltip = tooltipData.tooltip;
 
 		// disabling closes the tooltip, so we need to track when we're closing
 		// to avoid an infinite loop in case the tooltip becomes disabled on close
-		if ( this.closing ) {
+		if ( tooltipData.closing ) {
 			return;
 		}
 
@@ -16066,6 +16526,7 @@ var tooltip = $.widget( "ui.tooltip", {
 
 		this._removeDescribedBy( target );
 
+		tooltipData.hiding = true;
 		tooltip.stop( true );
 		this._hide( tooltip, this.options.hide, function() {
 			that._removeTooltip( $( this ) );
@@ -16087,9 +16548,11 @@ var tooltip = $.widget( "ui.tooltip", {
 			});
 		}
 
-		this.closing = true;
+		tooltipData.closing = true;
 		this._trigger( "close", event, { tooltip: tooltip } );
-		this.closing = false;
+		if ( !tooltipData.hiding ) {
+			tooltipData.closing = false;
+		}
 	},
 
 	_tooltip: function( element ) {
@@ -16104,13 +16567,16 @@ var tooltip = $.widget( "ui.tooltip", {
 			.appendTo( tooltip );
 
 		tooltip.appendTo( this.document[0].body );
-		this.tooltips[ id ] = element;
-		return tooltip;
+
+		return this.tooltips[ id ] = {
+			element: element,
+			tooltip: tooltip
+		};
 	},
 
 	_find: function( target ) {
 		var id = target.data( "ui-tooltip-id" );
-		return id ? $( "#" + id ) : $();
+		return id ? this.tooltips[ id ] : null;
 	},
 
 	_removeTooltip: function( tooltip ) {
@@ -16122,10 +16588,11 @@ var tooltip = $.widget( "ui.tooltip", {
 		var that = this;
 
 		// close open tooltips
-		$.each( this.tooltips, function( id, element ) {
+		$.each( this.tooltips, function( id, tooltipData ) {
 			// Delegate to close method to handle common cleanup
-			var event = $.Event( "blur" );
-			event.target = event.currentTarget = element[0];
+			var event = $.Event( "blur" ),
+				element = tooltipData.element;
+			event.target = event.currentTarget = element[ 0 ];
 			that.close( event, true );
 
 			// Remove immediately; destroying an open tooltip doesn't use the
diff --git a/lib/scripts/jquery/jquery-ui.min.js b/lib/scripts/jquery/jquery-ui.min.js
index b2fdf864ae214f18bd1bf566df3738843f04d654..5824d1292db4b99708fff6c950bf64861f083aa2 100644
--- a/lib/scripts/jquery/jquery-ui.min.js
+++ b/lib/scripts/jquery/jquery-ui.min.js
@@ -1,13 +1,13 @@
-/*! jQuery UI - v1.11.0 - 2014-06-26
+/*! jQuery UI - v1.11.4 - 2015-03-11
 * http://jqueryui.com
 * Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
 
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap=#"+a+"]")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){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},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){e.datepicker._isDisabledDatepicker(g.inline?t.parent()[0]:g.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))})}function o(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function r(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.0",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(){var t=this.css("position"),i="absolute"===t,s=this.parents().filter(function(){var t=e(this);return i&&"static"===t.css("position")?!1:/(auto|scroll)/.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==t&&s.length?s:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var h=0,l=Array.prototype.slice;e.cleanData=function(t){return function(i){for(var s,n=0;null!=(s=i[n]);n++)try{e(s).triggerHandler("remove")}catch(a){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=l.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=l.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var u=!1;e(document).mouseup(function(){u=!1}),e.widget("ui.mouse",{version:"1.11.0",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!u){this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),u=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):t.which?this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted):this._mouseUp(t)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),u=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),N=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=N[0],M.top+=N[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+N[0],p[1]+N[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.0",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=h&&l.down||l,d=function(){o._toggleComplete(i)};return"number"==typeof u&&(a=u),"string"==typeof u&&(n=u),n=n||u.easing||l.easing,a=a||u.duration||l.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:d,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?r+=i.now:"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,d):e.animate(this.showProps,a,n,d)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.0",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1
-}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function i(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,n,a,o,r,h=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:h=!1,n=this.previousFilter||"",a=String.fromCharCode(t.keyCode),o=!1,clearTimeout(this.filterTimer),a===n?o=!0:a=n+a,r=RegExp("^"+i(a),"i"),s=this.activeMenu.find(this.options.items).filter(function(){return r.test(e(this).text())}),s=o&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(a=String.fromCharCode(t.keyCode),r=RegExp("^"+i(a),"i"),s=this.activeMenu.find(this.options.items).filter(function(){return r.test(e(this).text())})),s.length?(this.focus(t,s),s.length>1?(this.previousFilter=a,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)}}),e.widget("ui.autocomplete",{version:"1.11.0",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&jQuery.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var d,c="ui-button ui-widget ui-state-default ui-corner-all",p="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",f=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},m=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.0",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,f),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(c).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===d&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];m(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),d=this,t.document.one("mouseup",function(){d=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(c+" ui-state-active "+p).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?m(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(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("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(p),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.0",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.0"}});var g;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return o(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var r,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),o(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,r,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),o(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))
-}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,r,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(o(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),r=!1,e(t).parents().each(function(){return r|="fixed"===e(this).css("position"),!r}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,r),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,g=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t),t.dpDiv.find("."+this._dayOverClass+" a");var i,s=this._getNumberOfMonths(t),n=s[1],a=17;t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n=RegExp("^\\d{1,"+s+"}"),a=i.substring(h).match(n);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},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:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,N,C,A,I,P,z,H,F,E,j,O,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",N=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)C=(x+u)%7,N+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[C]+"'>"+p[C]+"</span></th>";for(M+=N+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),I=(this._getFirstDayOfMonth(et,Z)-u+7)%7,P=Math.ceil((I+A)/7),z=Q?this.maxRows>P?this.maxRows:P:P,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-I)),F=0;z>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)j=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],O=H.getMonth()!==Z,W=O&&!y||!j[0]||X&&X>H||$&&H>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(O?" ui-datepicker-other-month":"")+(H.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===H.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(O&&!v?"":" "+j[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(O&&!v||!j[2]?"":" title='"+j[2].replace(/'/g,"&#39;")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(O&&!v?"&#xa0;":W?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(O?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":"&#xa0;")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":"&#xa0;")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.0",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.0",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,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?: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._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.document[0],s=this.options;try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(n){}return this.helper||s.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(s.iframeFix===!0?"iframe":s.iframeFix).each(function(){e("<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(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this._removeHandleClassName(),e(this.options.handle||this.element).addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.element.find(".ui-draggable-handle").addBack().removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_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 t,i,s,n=this.options,a=this.document[0];return this.relative_container=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}
-},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relative_container?(s=this.relative_container.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_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,this.destroyOnClear&&this.destroy()},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=s.options,a=e.extend({},i,{item:s.element});s.sortables=[],e(n.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,a))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});e.each(s.sortables,function(){this.instance.isOver?(this.instance.isOver=0,s.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===s.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,n))})},drag:function(t,i,s){var n=this;e.each(s.sortables,function(){var a=!1,o=this;this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(a=!0,e.each(s.sortables,function(){return this.instance.positionAbs=s.positionAbs,this.instance.helperProportions=s.helperProportions,this.instance.offset.click=s.offset.click,this!==o&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(o.instance.element[0],this.instance.element[0])&&(a=!1),a})),a?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(n).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=s.offset.click.top,this.instance.offset.click.left=s.offset.click.left,this.instance.offset.parent.left-=s.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=s.offset.parent.top-this.instance.offset.parent.top,s._trigger("toSortable",t),s.dropped=this.instance.element,s.currentItem=s.element,this.instance.fromOutside=s),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),s._trigger("fromSortable",t),s.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParent[0]!==i.document[0]&&"HTML"!==i.scrollParent[0].tagName&&(i.overflowOffset=i.scrollParent.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.document[0];s.scrollParent[0]!==o&&"HTML"!==s.scrollParent[0].tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+s.scrollParent[0].offsetHeight-t.pageY<n.scrollSensitivity?s.scrollParent[0].scrollTop=a=s.scrollParent[0].scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(s.scrollParent[0].scrollTop=a=s.scrollParent[0].scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+s.scrollParent[0].offsetWidth-t.pageX<n.scrollSensitivity?s.scrollParent[0].scrollLeft=a=s.scrollParent[0].scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(s.scrollParent[0].scrollLeft=a=s.scrollParent[0].scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(o).scrollTop()<n.scrollSensitivity?a=e(o).scrollTop(e(o).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(o).scrollTop())<n.scrollSensitivity&&(a=e(o).scrollTop(e(o).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(o).scrollLeft()<n.scrollSensitivity?a=e(o).scrollLeft(e(o).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(o).scrollLeft())<n.scrollSensitivity&&(a=e(o).scrollLeft(e(o).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left,l=h+s.snapElements[c].width,u=s.snapElements[c].top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top-s.margins.top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top-s.margins.top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left-s.margins.left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left-s.margins.left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top-s.margins.top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top-s.margins.top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left-s.margins.left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left-s.margins.left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.0",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:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<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("ui-resizable",this.element.resizable("instance")),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=r.handles||(e(".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"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.originalPosition={left:i,top:s},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=t.pageX-a.left||0,h=t.pageY-a.top||0,l=this._change[o];return this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height},l?(i=l.apply(this,[t,r,h]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==this.prevPosition.top&&(n.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(n.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(n.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,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,prevSize:this.prevSize,prevPosition:this.prevPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t,i){var s,n,a,o,r=e(this).resizable("instance"),h=r.options,l=r.containerOffset,u=r.position,d=r._aspectRatio||t.shiftKey,c={top:0,left:0},p=r.containerElement,f=!0;p[0]!==document&&/static/.test(p.css("position"))&&(c=l),u.left<(r._helper?l.left:0)&&(r.size.width=r.size.width+(r._helper?r.position.left-l.left:r.position.left-c.left),d&&(r.size.height=r.size.width/r.aspectRatio,f=!1),r.position.left=h.helper?l.left:0),u.top<(r._helper?l.top:0)&&(r.size.height=r.size.height+(r._helper?r.position.top-l.top:r.position.top),d&&(r.size.width=r.size.height*r.aspectRatio,f=!1),r.position.top=r._helper?l.top:0),r.offset.left=r.parentData.left+r.position.left,r.offset.top=r.parentData.top+r.position.top,s=Math.abs((r._helper?r.offset.left-c.left:r.offset.left-l.left)+r.sizeDiff.width),n=Math.abs((r._helper?r.offset.top-c.top:r.offset.top-l.top)+r.sizeDiff.height),a=r.containerElement.get(0)===r.element.parent().get(0),o=/relative|absolute/.test(r.containerElement.css("position")),a&&o&&(s-=Math.abs(r.parentData.left)),s+r.size.width>=r.parentData.width&&(r.size.width=r.parentData.width-s,d&&(r.size.height=r.size.width/r.aspectRatio,f=!1)),n+r.size.height>=r.parentData.height&&(r.size.height=r.parentData.height-n,d&&(r.size.width=r.size.height*r.aspectRatio,f=!1)),f||(r.position.left=i.prevPosition.left,r.position.top=i.prevPosition.top,r.size.width=i.prevSize.width,r.size.height=i.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,d=Math.round((s.height-n.height)/l)*l,c=n.width+u,p=n.height+d,f=i.maxWidth&&c>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>c,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(c+=h),v&&(p+=l),f&&(c-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=c,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=c,t.size.height=p,t.position.top=a.top-d):/^(sw)$/.test(o)?(t.size.width=c,t.size.height=p,t.position.left=a.left-u):(p-l>0?(t.size.height=p,t.position.top=a.top-d):(t.size.height=l,t.position.top=a.top+n.height-l),c-h>0?(t.size.width=c,t.position.left=a.left-u):(t.size.width=h,t.position.left=a.left+n.width-h))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.0",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()
-}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html("&#160;"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._untrackInstance(),this._trackingInstances().unshift(this),this._focusedElement=e(t.target)}})},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.0",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e(this).droppable("instance");return t.options.greedy&&!t.options.disabled&&t.options.scope===s.options.scope&&t.accept.call(t.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s){if(!i.offset)return!1;var n,a,o=(t.positionAbs||t.position.absolute).left,r=(t.positionAbs||t.position.absolute).top,h=o+t.helperProportions.width,l=r+t.helperProportions.height,u=i.offset.left,d=i.offset.top,c=u+i.proportions().width,p=d+i.proportions().height;switch(s){case"fit":return o>=u&&c>=h&&r>=d&&p>=l;case"intersect":return o+t.helperProportions.width/2>u&&c>h-t.helperProportions.width/2&&r+t.helperProportions.height/2>d&&p>l-t.helperProportions.height/2;case"pointer":return n=(t.positionAbs||t.position.absolute).left+(t.clickOffset||t.offset.click).left,a=(t.positionAbs||t.position.absolute).top+(t.clickOffset||t.offset.click).top,e(a,d,i.proportions().height)&&e(n,u,i.proportions().width);case"touch":return(r>=d&&p>=r||l>=d&&p>=l||d>r&&l>p)&&(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var v="ui-effects-";e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(jQuery.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.0",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(v+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(v+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
-f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.0",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),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()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.0",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(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,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.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),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.0",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._setOption("width",this.options.width),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this._setOption("width",this.options.width)},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html("&#160;")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{click:"_toggle",keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&(t||(t=this.element.outerWidth()),this.button.outerWidth(t))},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.0",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){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"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){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":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.0",widgetEventPrefix:"sort",ready:!1,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,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),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},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
-return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td>&#160;</td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[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")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.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 t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!t){for(this._trigger("beforeStop",e,this._uiHash()),s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!1}if(t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.0",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:r(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:r(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:r(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:r(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(r(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.0",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]
-}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.0",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,a.is(":hidden")||a.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i),a.length)return a.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):a.position(e.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:a}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(o.remove=function(){this._removeTooltip(a)}),t&&"mouseover"!==t.type||(o.mouseleave="close"),t&&"focusin"!==t.type||(o.focusout="close"),this._on(!0,i,o)}},close:function(t){var i=this,s=e(t?t.currentTarget:this.element),n=this._find(s);this.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),n.stop(!0),this._hide(n,this.options.hide,function(){i._removeTooltip(e(this))}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,s){e(s.element).attr("title",s.title),delete i.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:n}),this.closing=!1)},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]=t,i},_find:function(t){var i=t.data("ui-tooltip-id");return i?e("#"+i):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s[0],t.close(n,!0),e("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title")||s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
\ No newline at end of file
+(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){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},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):(o.length&&(n=e.widget.extend.apply(null,[n].concat(o))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css("box-sizing"),l=e.length&&(!t.length||e.index()<t.index()),u=this.options.animate||{},d=l&&u.down||u,c=function(){o._toggleComplete(i)};return"number"==typeof d&&(a=d),"string"==typeof d&&(n=d),n=n||d.easing||u.easing,a=a||d.duration||u.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:c,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,c):e.animate(this.showProps,a,n,c)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.4",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);
+i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.4",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="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",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.4",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(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("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.4",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.4"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);
+return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},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:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(z)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,""],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(z.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(z.getTime()===G.getTime()?" "+this._currentClass:"")+(z.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+z.getMonth()+"' data-year='"+z.getFullYear()+"'")+">"+(j&&!v?"&#xa0;":W?"<span class='ui-state-default'>"+z.getDate()+"</span>":"<a class='ui-state-default"+(z.getTime()===R.getTime()?" ui-state-highlight":"")+(z.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+z.getDate()+"</a>")+"</td>",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":"&#xa0;")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":"&#xa0;")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.4",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.4",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,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_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 t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
+},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_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,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.4",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:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e("<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("ui-resizable",this.element.resizable("instance")),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=r.handles||(e(".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"),this._handles=e(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,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}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data("ui-resizable-alsoresize"),n={},a=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;
+if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html("&#160;"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.4",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
+f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),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()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(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,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.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),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this;this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html("&#160;")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.val(),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=this.options.max,t=this._valueMin(),i=this.options.step,s=Math.floor(+(e-t).toFixed(this._precision())/i)*i;e=s+t,this.max=parseFloat(e.toFixed(this._precision()))},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"sort",ready:!1,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,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),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},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
+return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()<o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<o.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()<o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<o.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===s?t._createTrPlaceholder(t.currentItem.find("tr").eq(0),e("<tr>",t.document[0]).appendTo(n)):"tr"===s?t._createTrPlaceholder(t.currentItem,n):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e("<td>&#160;</td>",s.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[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")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.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 t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.4",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;
+this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data("ui-tooltip-open")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(":hidden")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&"mouseover"!==t.type||(s.mouseleave="close"),t&&"focusin"!==t.type||(s.focusout="close"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
\ No newline at end of file
diff --git a/lib/scripts/jquery/jquery.js b/lib/scripts/jquery/jquery.js
index d4b67f7e6c1a94df167f31657769717a71581066..6feb11086f45e266dd2334213479f0dc2276fb02 100644
--- a/lib/scripts/jquery/jquery.js
+++ b/lib/scripts/jquery/jquery.js
@@ -1,5 +1,5 @@
 /*!
- * jQuery JavaScript Library v1.11.1
+ * jQuery JavaScript Library v1.11.3
  * http://jquery.com/
  *
  * Includes Sizzle.js
@@ -9,7 +9,7 @@
  * Released under the MIT license
  * http://jquery.org/license
  *
- * Date: 2014-05-01T17:42Z
+ * Date: 2015-04-28T16:19Z
  */
 
 (function( global, factory ) {
@@ -64,7 +64,7 @@ var support = {};
 
 
 var
-	version = "1.11.1",
+	version = "1.11.3",
 
 	// Define a local copy of jQuery
 	jQuery = function( selector, context ) {
@@ -269,7 +269,8 @@ jQuery.extend({
 		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
 		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
 		// subtraction forces infinities to NaN
-		return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
+		// adding 1 corrects loss of precision from parseFloat (#15100)
+		return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
 	},
 
 	isEmptyObject: function( obj ) {
@@ -568,7 +569,12 @@ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".spli
 });
 
 function isArraylike( obj ) {
-	var length = obj.length,
+
+	// Support: iOS 8.2 (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 = "length" in obj && obj.length,
 		type = jQuery.type( obj );
 
 	if ( type === "function" || jQuery.isWindow( obj ) ) {
@@ -584,14 +590,14 @@ function isArraylike( obj ) {
 }
 var Sizzle =
 /*!
- * Sizzle CSS Selector Engine v1.10.19
+ * Sizzle CSS Selector Engine v2.2.0-pre
  * http://sizzlejs.com/
  *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
  * Released under the MIT license
  * http://jquery.org/license
  *
- * Date: 2014-04-18
+ * Date: 2014-12-16
  */
 (function( window ) {
 
@@ -618,7 +624,7 @@ var i,
 	contains,
 
 	// Instance-specific data
-	expando = "sizzle" + -(new Date()),
+	expando = "sizzle" + 1 * new Date(),
 	preferredDoc = window.document,
 	dirruns = 0,
 	done = 0,
@@ -633,7 +639,6 @@ var i,
 	},
 
 	// General-purpose constants
-	strundefined = typeof undefined,
 	MAX_NEGATIVE = 1 << 31,
 
 	// Instance methods
@@ -643,12 +648,13 @@ var i,
 	push_native = arr.push,
 	push = arr.push,
 	slice = arr.slice,
-	// Use a stripped-down indexOf if we can't use a native one
-	indexOf = arr.indexOf || function( elem ) {
+	// Use a stripped-down indexOf as it's faster than native
+	// http://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
 		var i = 0,
-			len = this.length;
+			len = list.length;
 		for ( ; i < len; i++ ) {
-			if ( this[i] === elem ) {
+			if ( list[i] === elem ) {
 				return i;
 			}
 		}
@@ -688,6 +694,7 @@ var i,
 		")\\)|)",
 
 	// 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 + "*" ),
@@ -739,6 +746,14 @@ var i,
 				String.fromCharCode( high + 0x10000 ) :
 				// Supplemental Plane codepoint (surrogate pair)
 				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
 	};
 
 // Optimize for push.apply( _, NodeList )
@@ -781,19 +796,18 @@ function Sizzle( selector, context, results, seed ) {
 
 	context = context || document;
 	results = results || [];
+	nodeType = context.nodeType;
 
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
 
-	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
-		return [];
+		return results;
 	}
 
-	if ( documentIsHTML && !seed ) {
+	if ( !seed && documentIsHTML ) {
 
-		// Shortcuts
-		if ( (match = rquickExpr.exec( selector )) ) {
+		// Try to shortcut find operations when possible (e.g., not under DocumentFragment)
+		if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
 			// Speed-up: Sizzle("#ID")
 			if ( (m = match[1]) ) {
 				if ( nodeType === 9 ) {
@@ -825,7 +839,7 @@ function Sizzle( selector, context, results, seed ) {
 				return results;
 
 			// Speed-up: Sizzle(".CLASS")
-			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+			} else if ( (m = match[3]) && support.getElementsByClassName ) {
 				push.apply( results, context.getElementsByClassName( m ) );
 				return results;
 			}
@@ -835,7 +849,7 @@ function Sizzle( selector, context, results, seed ) {
 		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
 			nid = old = expando;
 			newContext = context;
-			newSelector = nodeType === 9 && selector;
+			newSelector = nodeType !== 1 && selector;
 
 			// qSA works strangely on Element-rooted queries
 			// We can work around this by specifying an extra ID on the root
@@ -1022,7 +1036,7 @@ function createPositionalPseudo( fn ) {
  * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
  */
 function testContext( context ) {
-	return context && typeof context.getElementsByTagName !== strundefined && context;
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
 }
 
 // Expose support vars for convenience
@@ -1046,9 +1060,8 @@ isXML = Sizzle.isXML = function( elem ) {
  * @returns {Object} Returns the current document
  */
 setDocument = Sizzle.setDocument = function( node ) {
-	var hasCompare,
-		doc = node ? node.ownerDocument || node : preferredDoc,
-		parent = doc.defaultView;
+	var hasCompare, parent,
+		doc = node ? node.ownerDocument || node : preferredDoc;
 
 	// If no document and documentElement is available, return
 	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
@@ -1058,9 +1071,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 	// Set our document
 	document = doc;
 	docElem = doc.documentElement;
-
-	// Support tests
-	documentIsHTML = !isXML( doc );
+	parent = doc.defaultView;
 
 	// Support: IE>8
 	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
@@ -1069,21 +1080,22 @@ setDocument = Sizzle.setDocument = function( node ) {
 	if ( parent && parent !== parent.top ) {
 		// IE11 does not have attachEvent, so all must suffer
 		if ( parent.addEventListener ) {
-			parent.addEventListener( "unload", function() {
-				setDocument();
-			}, false );
+			parent.addEventListener( "unload", unloadHandler, false );
 		} else if ( parent.attachEvent ) {
-			parent.attachEvent( "onunload", function() {
-				setDocument();
-			});
+			parent.attachEvent( "onunload", unloadHandler );
 		}
 	}
 
+	/* Support tests
+	---------------------------------------------------------------------- */
+	documentIsHTML = !isXML( doc );
+
 	/* Attributes
 	---------------------------------------------------------------------- */
 
 	// Support: IE<8
-	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
 	support.attributes = assert(function( div ) {
 		div.className = "i";
 		return !div.getAttribute("className");
@@ -1098,17 +1110,8 @@ setDocument = Sizzle.setDocument = function( node ) {
 		return !div.getElementsByTagName("*").length;
 	});
 
-	// Check if getElementsByClassName can be trusted
-	support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
-		div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
-		// Support: Safari<4
-		// Catch class over-caching
-		div.firstChild.className = "i";
-		// Support: Opera<10
-		// Catch gEBCN failure to find non-leading classes
-		return div.getElementsByClassName("i").length === 2;
-	});
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
 
 	// Support: IE<10
 	// Check if getElementById returns elements by name
@@ -1122,7 +1125,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 	// ID find and filter
 	if ( support.getById ) {
 		Expr.find["ID"] = function( id, context ) {
-			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
 				var m = context.getElementById( id );
 				// Check parentNode to catch when Blackberry 4.6 returns
 				// nodes that are no longer in the document #6963
@@ -1143,7 +1146,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 		Expr.filter["ID"] =  function( id ) {
 			var attrId = id.replace( runescape, funescape );
 			return function( elem ) {
-				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
 				return node && node.value === attrId;
 			};
 		};
@@ -1152,14 +1155,20 @@ setDocument = Sizzle.setDocument = function( node ) {
 	// Tag
 	Expr.find["TAG"] = support.getElementsByTagName ?
 		function( tag, context ) {
-			if ( typeof context.getElementsByTagName !== strundefined ) {
+			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
@@ -1177,7 +1186,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 
 	// Class
 	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
-		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
+		if ( documentIsHTML ) {
 			return context.getElementsByClassName( className );
 		}
 	};
@@ -1206,13 +1215,15 @@ setDocument = Sizzle.setDocument = function( node ) {
 			// setting a boolean content attribute,
 			// since its presence should be enough
 			// http://bugs.jquery.com/ticket/12359
-			div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
+			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\f]' 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
 			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-			if ( div.querySelectorAll("[msallowclip^='']").length ) {
+			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
 				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
 			}
 
@@ -1222,12 +1233,24 @@ setDocument = Sizzle.setDocument = function( node ) {
 				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
 			}
 
+			// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
+			if ( !div.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 ( !div.querySelectorAll(":checked").length ) {
 				rbuggyQSA.push(":checked");
 			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibing-combinator selector` fails
+			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
 		});
 
 		assert(function( div ) {
@@ -1344,7 +1367,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 
 			// Maintain original order
 			return sortInput ?
-				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
 				0;
 		}
 
@@ -1371,7 +1394,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 				aup ? -1 :
 				bup ? 1 :
 				sortInput ?
-				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
 				0;
 
 		// If the nodes are siblings, we can do a quick check
@@ -1434,7 +1457,7 @@ Sizzle.matchesSelector = function( elem, expr ) {
 					elem.document && elem.document.nodeType !== 11 ) {
 				return ret;
 			}
-		} catch(e) {}
+		} catch (e) {}
 	}
 
 	return Sizzle( expr, document, null, [ elem ] ).length > 0;
@@ -1653,7 +1676,7 @@ Expr = Sizzle.selectors = {
 			return pattern ||
 				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
 				classCache( className, function( elem ) {
-					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
 				});
 		},
 
@@ -1675,7 +1698,7 @@ Expr = Sizzle.selectors = {
 					operator === "^=" ? check && result.indexOf( check ) === 0 :
 					operator === "*=" ? check && result.indexOf( check ) > -1 :
 					operator === "$=" ? check && result.slice( -check.length ) === check :
-					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
 					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
 					false;
 			};
@@ -1795,7 +1818,7 @@ Expr = Sizzle.selectors = {
 							matched = fn( seed, argument ),
 							i = matched.length;
 						while ( i-- ) {
-							idx = indexOf.call( seed, matched[i] );
+							idx = indexOf( seed, matched[i] );
 							seed[ idx ] = !( matches[ idx ] = matched[i] );
 						}
 					}) :
@@ -1834,6 +1857,8 @@ Expr = Sizzle.selectors = {
 				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();
 				};
 		}),
@@ -1845,6 +1870,7 @@ Expr = Sizzle.selectors = {
 		}),
 
 		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
 			return function( elem ) {
 				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
 			};
@@ -2266,7 +2292,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
 				i = matcherOut.length;
 				while ( i-- ) {
 					if ( (elem = matcherOut[i]) &&
-						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
 
 						seed[temp] = !(results[temp] = elem);
 					}
@@ -2301,13 +2327,16 @@ function matcherFromTokens( tokens ) {
 			return elem === checkContext;
 		}, implicitRelative, true ),
 		matchAnyContext = addCombinator( function( elem ) {
-			return indexOf.call( checkContext, elem ) > -1;
+			return indexOf( checkContext, elem ) > -1;
 		}, implicitRelative, true ),
 		matchers = [ function( elem, context, xml ) {
-			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+			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++ ) {
@@ -2557,7 +2586,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
 // Sort stability
 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
 
-// Support: Chrome<14
+// Support: Chrome 14-35+
 // Always assume duplicates if they aren't passed to the comparison function
 support.detectDuplicates = !!hasDuplicate;
 
@@ -6115,7 +6144,14 @@ var getStyles, curCSS,
 
 if ( window.getComputedStyle ) {
 	getStyles = function( elem ) {
-		return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		if ( elem.ownerDocument.defaultView.opener ) {
+			return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+		}
+
+		return window.getComputedStyle( elem, null );
 	};
 
 	curCSS = function( elem, name, computed ) {
@@ -6363,6 +6399,8 @@ function addGetHookIf( conditionFn, hookFn ) {
 
 			reliableMarginRightVal =
 				!parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
+
+			div.removeChild( contents );
 		}
 
 		// Support: IE8
@@ -9070,7 +9108,8 @@ jQuery.extend({
 		}
 
 		// We can fire global events as of now if asked to
-		fireGlobals = s.global;
+		// 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 ) {
@@ -9329,13 +9368,6 @@ jQuery.each( [ "get", "post" ], function( i, method ) {
 	};
 });
 
-// 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._evalUrl = function( url ) {
 	return jQuery.ajax({
@@ -9561,8 +9593,9 @@ var xhrId = 0,
 
 // Support: IE<10
 // Open requests must be manually aborted on unload (#5280)
-if ( window.ActiveXObject ) {
-	jQuery( window ).on( "unload", function() {
+// See https://support.microsoft.com/kb/2856746 for more info
+if ( window.attachEvent ) {
+	window.attachEvent( "onunload", function() {
 		for ( var key in xhrCallbacks ) {
 			xhrCallbacks[ key ]( undefined, true );
 		}
@@ -9996,6 +10029,16 @@ jQuery.fn.load = function( url, params, callback ) {
 
 
 
+// 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.filters.animated = function( elem ) {
 	return jQuery.grep(jQuery.timers, function( fn ) {
 		return elem === fn.elem;
diff --git a/lib/scripts/jquery/jquery.min.js b/lib/scripts/jquery/jquery.min.js
index ab28a24729b320bffd3d2f60302af949db39ab85..0f60b7bd0d9c395e1748cc962810d2dee9bb9fc2 100644
--- a/lib/scripts/jquery/jquery.min.js
+++ b/lib/scripts/jquery/jquery.min.js
@@ -1,4 +1,5 @@
-/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"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){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()||.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)||"")?.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.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});
+/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"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){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.3",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)+1>=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="length"in a&&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"+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=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=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)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.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,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(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 H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$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("div");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=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);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 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 pa(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:!1},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=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.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.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);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){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),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))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),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===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(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,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(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?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):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(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 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&&D.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.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: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(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===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 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(ca,da).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("(^|"+L+")"+a+"("+L+"|$)"))&&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(Q," ")+" ").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()]||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=J(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(R,"$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(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).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:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(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]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,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=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?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(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 ta(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 ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(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 wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(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?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(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}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(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 wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(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()||.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]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};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=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(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(ca,da),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(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(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("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0: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){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(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 aa(){return!0}function ba(){return!1}function ca(){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!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&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?aa:ba):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:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,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=ba;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=ba),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 da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={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>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(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,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(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 xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(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 Ba(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?(xa(b).text=a.text,ya(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)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(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=da(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(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.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(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.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=wa(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=wa(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(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(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(ua(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(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(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(ua(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&&na.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(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.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(qa,"")));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 Ca,Da={};function Ea(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 Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[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 Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.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&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.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 La(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.removeChild(i)),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 Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(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",Fa(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 Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(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 Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(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]=Ua(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=Qa.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]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[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?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(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 Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.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(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[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}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),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=Ia(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 Va(this,!0)},hide:function(){return Va(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 Za(a,b,c,d,e){
+return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,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=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.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):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.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}}},Za.propHooks.scrollTop=Za.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.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.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 fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(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 hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(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")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(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],ab.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?Fa(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=hb(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 jb(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 kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),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:$a||fb(),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(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,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(kb,{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],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.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=kb(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&&cb.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(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("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($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=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(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=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 lb=/\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(lb,""):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 mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=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)?nb:mb)),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)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?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}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&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=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={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}},ob.id=ob.name=ob.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:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.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 sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?: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):sb.test(a.nodeName)||tb.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 ub=/[\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(ub," "):" ")){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(ub," "):"")){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(ub," ").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 vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\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(xb,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 yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(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 Mb(a,b,c,d){var e={},f=a===Ib;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 Nb(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 Ob(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 Pb(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:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,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?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),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=Cb.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||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),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]?", "+Jb+"; 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=Mb(Ib,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=Ob(k,v,c)),u=Pb(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._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 Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(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)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},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")&&Ub.test(this.nodeName)&&!Tb.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(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;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 Xb[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=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){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 _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.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(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.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,_b.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 bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.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.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(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=dc(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||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),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=dc(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]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.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 ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/lib/scripts/jquery/update.sh b/lib/scripts/jquery/update.sh
index 741fcff1cf4d6789f7077f48d838f72f822275e1..ed9dcab7b3c1f24576f16a4b914937d87bc11556 100755
--- a/lib/scripts/jquery/update.sh
+++ b/lib/scripts/jquery/update.sh
@@ -9,13 +9,17 @@
 # @link   http://code.jquery.com/
 
 # Adjust version for jQuery-UI here - there's no good latest link
-JQUI_VERSION='1.11.0'
+JQUI_VERSION='1.11.4'
 JQUI_HOST="https://code.jquery.com/ui/$JQUI_VERSION"
 JQUI_GIT="https://raw.githubusercontent.com/jquery/jquery-ui/$JQUI_VERSION/ui"
 
+# Adjust version for jQueryhere - latest updates slowly
+JQ_VERSION='1.11.3'
+
+
 # load jQuery
-wget -nv http://code.jquery.com/jquery-latest.min.js      -O jquery.min.js
-wget -nv http://code.jquery.com/jquery-latest.js          -O jquery.js
+wget -nv http://code.jquery.com/jquery-${JQ_VERSION}.min.js      -O jquery.min.js
+wget -nv http://code.jquery.com/jquery-${JQ_VERSION}.js          -O jquery.js
 
 # load jQuery-UI
 wget -nv "$JQUI_HOST/jquery-ui.min.js" -O jquery-ui.min.js
diff --git a/lib/scripts/linkwiz.js b/lib/scripts/linkwiz.js
index e8191dbcb234754fefde79a3026b61b884c9bb0b..bc850226fbdfa2a67132a7f84ab777bd86ef60ea 100644
--- a/lib/scripts/linkwiz.js
+++ b/lib/scripts/linkwiz.js
@@ -244,9 +244,10 @@ var dw_linkwiz = {
                 so += dw_linkwiz.val.open.length;
                 link = dw_linkwiz.val.open+link;
             }
+            link += '|';
+            so += 1;
             if(stxt) {
-                link += '|'+stxt;
-                so += 1;
+                link += stxt;
             }
             if(dw_linkwiz.val.close) {
                 link += dw_linkwiz.val.close;
@@ -299,6 +300,11 @@ var dw_linkwiz = {
         dw_linkwiz.$wiz.show();
         dw_linkwiz.$entry.focus();
         dw_linkwiz.autocomplete();
+
+        // Move the cursor to the end of the input
+        var temp = dw_linkwiz.$entry.val();
+        dw_linkwiz.$entry.val('');
+        dw_linkwiz.$entry.val(temp);
     },
 
     /**
diff --git a/lib/scripts/locktimer.js b/lib/scripts/locktimer.js
index 96f963c083f82d72ffe38398559bf53da995f1f7..f83b6334ec57ecd5ba0ab2102ccfb5371abd4904 100644
--- a/lib/scripts/locktimer.js
+++ b/lib/scripts/locktimer.js
@@ -12,24 +12,13 @@ var dw_locktimer = {
     /**
      * Initialize the lock timer
      *
-     * @param int    timeout Length of timeout in seconds
-     * @param string msg     Deprecated; The expiry message
-     * @param bool   draft   Whether to save drafts
-     * @param string edid    Optional; ID of an edit object which has to be present
+     * @param {int}    timeout Length of timeout in seconds
+     * @param {bool}   draft   Whether to save drafts
+     * @param {string} edid    Optional; ID of an edit object which has to be present
      */
-    init: function(timeout,msg,draft,edid){
+    init: function(timeout,draft,edid){
         var $edit;
 
-        switch (arguments.length) {
-        case 4:
-            DEPRECATED('Setting the locktimer expiry message is deprecated');
-            dw_locktimer.msg = msg;
-            break;
-        case 3:
-            edid = draft;
-        case 2:
-            draft = msg;
-        }
         edid = edid || 'wiki__text';
 
         $edit = jQuery('#' + edid);
@@ -42,7 +31,7 @@ var dw_locktimer = {
         dw_locktimer.draft    = draft;
         dw_locktimer.lasttime = new Date();
 
-        dw_locktimer.pageid   = jQuery('#dw__editform input[name=id]').val();
+        dw_locktimer.pageid   = jQuery('#dw__editform').find('input[name=id]').val();
         if(!dw_locktimer.pageid) {
             return;
         }
@@ -94,7 +83,7 @@ var dw_locktimer = {
         }
 
         // POST everything necessary for draft saving
-        if(dw_locktimer.draft && jQuery('#dw__editform textarea[name=wikitext]').length > 0){
+        if(dw_locktimer.draft && jQuery('#dw__editform').find('textarea[name=wikitext]').length > 0){
             params += jQuery('#dw__editform').find('input[name=prefix], ' +
                                                    'textarea[name=wikitext], ' +
                                                    'input[name=suffix], ' +
diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index 8ca21ecabccfd26e2c88f6d3a4fe4e2aad123dac..2995addfd0f41d335d2831a9c775e9f7e91afa3b 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -119,7 +119,7 @@ var dw_mediamanager = {
         $both = $listType.add($sortBy);
 
         // Remove the submit button
-        $options.find('input[type=submit]').parent().hide();
+        $options.find('button[type=submit]').parent().hide();
 
         // Prepare HTML for jQuery UI buttonset
         $both.find('label').each(function () {
@@ -435,7 +435,7 @@ var dw_mediamanager = {
                 dw_mediamanager.$resizables().resizable('destroy');
 
                 if (update_list) {
-                    dw_mediamanager.list.call(jQuery('#mediamanager__page form.options input[type="submit"]')[0]);
+                    dw_mediamanager.list.call(jQuery('#mediamanager__page form.options button[type="submit"]')[0]);
                 }
 
                 $content.html(data);
diff --git a/lib/scripts/page.js b/lib/scripts/page.js
index 7b4958d8254f2706def95b368be7bb9fbc4074a7..a179ae2a8e45434f79a7eceea0cd87f87e937789 100644
--- a/lib/scripts/page.js
+++ b/lib/scripts/page.js
@@ -109,8 +109,14 @@ dw_page = {
      * as well. A state indicator is inserted into the handle and can be styled
      * by CSS.
      *
-     * @param selector handle What should be clicked to toggle
-     * @param selector content This element will be toggled
+     * To properly reserve space for the expanded element, the sliding animation is
+     * done on the children of the content. To make that look good and to make sure aria
+     * attributes are assigned correctly, it's recommended to make sure that the content
+     * element contains a single child element only.
+     *
+     * @param {selector} handle What should be clicked to toggle
+     * @param {selector} content This element will be toggled
+     * @param {int} state initial state (-1 = open, 1 = closed)
      */
     makeToggle: function(handle, content, state){
         var $handle, $content, $clicky, $child, setClicky;
@@ -160,8 +166,9 @@ dw_page = {
             // Start animation and assure that $toc is hidden/visible
             $child.dw_toggle(hidden, function () {
                 $content.toggle(hidden);
+                $content.attr('aria-expanded', hidden);
                 $content.css('min-height',''); // remove min-height again
-            });
+            }, true);
         };
 
         // the state indicator
diff --git a/lib/scripts/qsearch.js b/lib/scripts/qsearch.js
index 95c632e45de1e0ed1f2a12f7dd47fdb933e33931..56cf8df2580ea6608ba7b7d8897aee9481be8891 100644
--- a/lib/scripts/qsearch.js
+++ b/lib/scripts/qsearch.js
@@ -45,6 +45,7 @@ jQuery.fn.dw_qsearch = function (overrides) {
                     dw_qsearch.clear_results();
                     return;
                 }
+                dw_qsearch.$inObj.parents('form').addClass('searching');
                 dw_qsearch.curRequest = jQuery.post(
                     DOKU_BASE + 'lib/exe/ajax.php',
                     {
@@ -81,6 +82,7 @@ jQuery.fn.dw_qsearch = function (overrides) {
          * Empty and hide the output div
          */
         clear_results: function () {
+            dw_qsearch.$inObj.parents('form').removeClass('searching');
             dw_qsearch.$outObj.hide();
             dw_qsearch.$outObj.text('');
         },
@@ -95,6 +97,7 @@ jQuery.fn.dw_qsearch = function (overrides) {
          */
         onCompletion: function (data) {
             var max, $links, too_big;
+            dw_qsearch.$inObj.parents('form').removeClass('searching');
 
             dw_qsearch.curRequest = null;
 
diff --git a/lib/scripts/toolbar.js b/lib/scripts/toolbar.js
index 1bb02b406162a94b633a1a0be1ebf11f24fca97e..a5f831ade4251c3b49e18190dbb7527fd1968a04 100644
--- a/lib/scripts/toolbar.js
+++ b/lib/scripts/toolbar.js
@@ -243,7 +243,20 @@ function pickerToggle(pickerid,$btn){
     } else {
         $picker.addClass('a11y').attr('aria-hidden', 'true');
     }
-    $picker.offset({left: pos.left+3, top: pos.top+$btn[0].offsetHeight+3});
+    var picker_left = pos.left + 3,
+        picker_width = $picker.width(),
+        window_width = jQuery(window).width();
+    if (picker_width > 300) {
+        $picker.css("max-width", "300");
+        picker_width = 300;
+    }
+    if ((picker_left + picker_width + 40) > window_width) {
+        picker_left = window_width - picker_width - 40;
+    }
+    if (picker_left < 0) {
+        picker_left = 0;
+    }
+    $picker.offset({left: picker_left, top: pos.top+$btn[0].offsetHeight+3});
 }
 
 /**
diff --git a/lib/scripts/tw-sack.js b/lib/scripts/tw-sack.js
deleted file mode 100644
index b0e570151b60bfd8412a5f8a395986b8648b38c0..0000000000000000000000000000000000000000
--- a/lib/scripts/tw-sack.js
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Simple AJAX Code-Kit (SACK) */
-/* ©2005 Gregory Wild-Smith */
-/* www.twilightuniverse.com */
-/* Software licenced under a modified X11 licence, see documentation or authors website for more details */
-/* @deprecated */
-
-function sack(file){
-  this.AjaxFailedAlert = "Your browser does not support the enhanced functionality of this website, and therefore you will have an experience that differs from the intended one.\n";
-  this.requestFile = file;
-  this.method = "POST";
-  this.URLString = "";
-  this.encodeURIString = true;
-  this.execute = false;
-  this.asynchronous = true;
-
-  this.onLoading = function() { };
-  this.onLoaded = function() { };
-  this.onInteractive = function() { };
-  this.onCompletion = function() { };
-  this.afterCompletion = function() { };
-
-  this.createAJAX = function() {
-    try {
-      this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
-    } catch (e) {
-      try {
-        this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
-      } catch (err) {
-        this.xmlhttp = null;
-      }
-    }
-    if(!this.xmlhttp && typeof XMLHttpRequest != "undefined"){
-      this.xmlhttp = new XMLHttpRequest();
-    }
-    if (!this.xmlhttp){
-      this.failed = true;
-    }
-  };
-
-  this.setVar = function(name, value){
-    if (this.URLString.length < 3){
-      this.URLString = name + "=" + value;
-    } else {
-      this.URLString += "&" + name + "=" + value;
-    }
-  };
-
-  this.encVar = function(name, value){
-    var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);
-  return varString;
-  };
-
-  this.encodeURLString = function(string){
-    varArray = string.split('&');
-    for (i = 0; i < varArray.length; i++){
-      urlVars = varArray[i].split('=');
-      if (urlVars[0].indexOf('amp;') != -1){
-        urlVars[0] = urlVars[0].substring(4);
-      }
-      varArray[i] = this.encVar(urlVars[0],urlVars[1]);
-    }
-  return varArray.join('&');
-  };
-
-  this.runResponse = function(){
-    eval(this.response);
-  };
-
-  this.runAJAX = function(urlstring){
-    DEPRECATED('Please use jQuery.post() or any other of jQuery\'s AJAX methods.');
-
-    this.responseStatus = new Array(2);
-    if(this.failed && this.AjaxFailedAlert){
-      alert(this.AjaxFailedAlert);
-    } else {
-      if (urlstring){
-        if (this.URLString.length){
-          this.URLString = this.URLString + "&" + urlstring;
-        } else {
-          this.URLString = urlstring;
-        }
-      }
-      if (this.encodeURIString){
-        var timeval = new Date().getTime();
-        this.URLString = this.encodeURLString(this.URLString);
-        this.setVar("rndval", timeval);
-      }
-      if (this.element) { this.elementObj = document.getElementById(this.element); }
-      if (this.xmlhttp) {
-        var self = this;
-        if (this.method == "GET") {
-          var totalurlstring = this.requestFile + "?" + this.URLString;
-          this.xmlhttp.open(this.method, totalurlstring, this.asynchronous);
-        } else {
-          this.xmlhttp.open(this.method, this.requestFile, this.asynchronous);
-        }
-        if (this.method == "POST"){
-          try {
-             this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
-          } catch (e) {}
-        }
-
-        this.xmlhttp.onreadystatechange = function() {
-          switch (self.xmlhttp.readyState){
-            case 1:
-              self.onLoading();
-            break;
-            case 2:
-              self.onLoaded();
-            break;
-            case 3:
-              self.onInteractive();
-            break;
-            case 4:
-              self.response = self.xmlhttp.responseText;
-              self.responseXML = self.xmlhttp.responseXML;
-              self.responseStatus[0] = self.xmlhttp.status;
-              self.responseStatus[1] = self.xmlhttp.statusText;
-              self.onCompletion();
-              if(self.execute){ self.runResponse(); }
-              if (self.elementObj) {
-                var elemNodeName = self.elementObj.nodeName;
-                elemNodeName.toLowerCase();
-                if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
-                  self.elementObj.value = self.response;
-                } else {
-                  self.elementObj.innerHTML = self.response;
-                }
-              }
-              self.afterCompletion();
-              self.URLString = "";
-            break;
-          }
-        };
-        this.xmlhttp.send(this.URLString);
-      }
-    }
-  };
-this.createAJAX();
-}
diff --git a/lib/tpl/dokuwiki/css/_admin.css b/lib/tpl/dokuwiki/css/_admin.css
index a9518d0edad78816caabd780e9bff409796ef1ec..bdde006e0cbcea996cd9b2865d89a324c36c003d 100644
--- a/lib/tpl/dokuwiki/css/_admin.css
+++ b/lib/tpl/dokuwiki/css/_admin.css
@@ -39,6 +39,9 @@
 .dokuwiki ul.admin_tasks li.admin_config {
     background-image: url(../../images/admin/config.png);
 }
+.dokuwiki ul.admin_tasks li.admin_styling {
+    background-image: url(../../images/admin/styling.png);
+}
 .dokuwiki ul.admin_tasks li.admin_revert {
     background-image: url(../../images/admin/revert.png);
 }
diff --git a/lib/tpl/dokuwiki/css/_edit.css b/lib/tpl/dokuwiki/css/_edit.css
index f40aaa89199e383750a30872e97a8884e397743e..d6dcb93ab1152381ceb54f98e6ea19a198f82071 100644
--- a/lib/tpl/dokuwiki/css/_edit.css
+++ b/lib/tpl/dokuwiki/css/_edit.css
@@ -88,7 +88,7 @@ div.picker button.toolbutton {
     margin-right: 0;
     margin-left: 1em;
 }
-.dokuwiki .editBar .editButtons input {
+.dokuwiki .editBar .editButtons button {
 }
 
 /* summary input and minor changes checkbox */
@@ -130,7 +130,7 @@ div.picker button.toolbutton {
 [dir=rtl] .dokuwiki .secedit {
     float: left;
 }
-.dokuwiki .secedit input.button {
+.dokuwiki .secedit button {
     font-size: 75%;
 }
 
diff --git a/lib/tpl/dokuwiki/css/_forms.css b/lib/tpl/dokuwiki/css/_forms.css
index 522f9ed4d0596cca570b4e14036bd9f8ff16f677..bf70fa24b92392ecf7dac6f9c9e923a5c5d44d22 100644
--- a/lib/tpl/dokuwiki/css/_forms.css
+++ b/lib/tpl/dokuwiki/css/_forms.css
@@ -62,8 +62,7 @@
 }
 
 
-.dokuwiki input.button,
-.dokuwiki button.button {
+.dokuwiki button {
     vertical-align: middle;
 }
 /**
diff --git a/lib/tpl/dokuwiki/css/_links.css b/lib/tpl/dokuwiki/css/_links.css
index 7e5fb02cd5920872e7c797ee903ca057258b9f37..695f4b825e2b3762a89cf4eba58d84ffecc3ba26 100644
--- a/lib/tpl/dokuwiki/css/_links.css
+++ b/lib/tpl/dokuwiki/css/_links.css
@@ -66,5 +66,4 @@
 [dir=rtl] .dokuwiki a.mediafile {
     background-position: right center;
     padding: 0 18px 0 0;
-    display: inline-block; /* needed for IE7 */
 }
diff --git a/lib/tpl/dokuwiki/css/_media_fullscreen.css b/lib/tpl/dokuwiki/css/_media_fullscreen.css
index 31b71897bf138ba29d4fe28448c767cfd3fc8c41..92a9d07301e7b4f8f02b3f481dc73f7c516bcb82 100644
--- a/lib/tpl/dokuwiki/css/_media_fullscreen.css
+++ b/lib/tpl/dokuwiki/css/_media_fullscreen.css
@@ -394,7 +394,7 @@
     width: 50%;
 }
 
-#mediamanager__page form.meta input.button {
+#mediamanager__page form.meta button {
     width: auto;
 }
 
@@ -407,19 +407,19 @@
 
 /* file revisions form */
 
-#mediamanager__page #page__revisions ul {
+#mediamanager__page form.changes ul {
     margin-left: 10px;
     padding: 0;
     list-style-type: none;
 }
 
-#mediamanager__page #page__revisions ul li div.li div {
+#mediamanager__page form.changes ul li div.li div {
     font-size: 90%;
     color: @ini_text_neu;
     padding-left: 18px;
 }
 
-#mediamanager__page #page__revisions ul li div.li input {
+#mediamanager__page form.changes ul li div.li input {
     position: relative;
     top: 1px;
 }
diff --git a/lib/tpl/dokuwiki/css/_media_popup.css b/lib/tpl/dokuwiki/css/_media_popup.css
index 20d669c1484f87acab965f1ca659e726da9b67d2..af536489c6e4fcb11e55a9beaaf714471a732172 100644
--- a/lib/tpl/dokuwiki/css/_media_popup.css
+++ b/lib/tpl/dokuwiki/css/_media_popup.css
@@ -204,7 +204,7 @@ html.popup {
 }
 #dw__mediasearch input.edit {
 }
-#dw__mediasearch input.button {
+#dw__mediasearch button {
 }
 
 
diff --git a/lib/tpl/dokuwiki/css/_modal.css b/lib/tpl/dokuwiki/css/_modal.css
index a46dff30e0370555b919bcd3e696c15feeb51264..37f64830ff10c8c870076661004e402abc38844f 100644
--- a/lib/tpl/dokuwiki/css/_modal.css
+++ b/lib/tpl/dokuwiki/css/_modal.css
@@ -88,7 +88,7 @@
     cursor: default;
 }
 
-#media__popup_content .button {
+#media__popup_content button {
     margin-right: 1px;
     cursor: pointer;
 }
diff --git a/lib/tpl/dokuwiki/css/basic.less b/lib/tpl/dokuwiki/css/basic.less
index ac9f6803a2cbd3d1e5ffc899fc9cb8983a5c8a17..d10cac670d9e6f9766c102eb471655990f57a898 100644
--- a/lib/tpl/dokuwiki/css/basic.less
+++ b/lib/tpl/dokuwiki/css/basic.less
@@ -228,7 +228,6 @@ video,
 audio {
     max-width: 100%;
 }
-#IE7 img,
 #IE8 img,
 button img {
     max-width: none;
@@ -414,11 +413,6 @@ button,
     padding: .1em .5em;
     cursor: pointer;
 }
-#IE7 input.button,
-#IE7 button {
-    line-height: 1.4;
-    overflow: visible;
-}
 
 input[type=submit]:hover,
 input[type=submit]:active,
diff --git a/lib/tpl/dokuwiki/css/content.less b/lib/tpl/dokuwiki/css/content.less
index a2e343a33b200fa57d987393129a95c74994836a..23db33cfbdaf19b238a2048e28b8d33fbb75fc0b 100644
--- a/lib/tpl/dokuwiki/css/content.less
+++ b/lib/tpl/dokuwiki/css/content.less
@@ -140,7 +140,6 @@
     dd {
         margin: 0;
         clear: left;
-        min-height: 1px; /* for IE7 */
     }
 
     pre {
@@ -391,4 +390,4 @@
         margin-left: 0;
         margin-right: 9.5em;
     }
-}
\ No newline at end of file
+}
diff --git a/lib/tpl/dokuwiki/css/design.less b/lib/tpl/dokuwiki/css/design.less
index 66607b5e91521bc38ef44a51a4f24b370cfc21a3..e314bb5b3a828f59d7a6c89937b560c217947543 100644
--- a/lib/tpl/dokuwiki/css/design.less
+++ b/lib/tpl/dokuwiki/css/design.less
@@ -117,10 +117,6 @@
     padding-right: 20px;
 }
 
-[dir=rtl] #IE7 #dokuwiki__usertools a.action {
-    display: inline-block;
-}
-
 #dokuwiki__header .mobileTools {
     display: none; /* hide mobile tools dropdown to only show in mobile view */
 }
@@ -207,12 +203,12 @@ form.search {
     position: relative;
     margin-bottom: 0.5em;
 
-    input.edit {
+    input {
         width: 18em;
         padding: .35em 22px .35em .1em;
     }
 
-    input.button {
+    button {
         background: transparent url(images/search.png) no-repeat 0 0;
         border-width: 0;
         width: 19px;
@@ -225,11 +221,11 @@ form.search {
 }
 
 [dir=rtl] form.search {
-    input.edit {
+    input {
         padding: .35em .1em .35em 22px;
     }
 
-    input.button {
+    button {
         background-position: 5px 0;
         margin-left: 0;
         margin-right: -20px;
@@ -237,11 +233,6 @@ form.search {
     }
 }
 
-#IE7 form.search {
-    min-height: 1px;
-    z-index: 21;
-}
-
 /*____________ breadcrumbs ____________*/
 
 .dokuwiki div.breadcrumbs {
@@ -273,7 +264,6 @@ form.search {
     }
 }
 
-#IE7 .dokuwiki div.breadcrumbs div,
 #IE8 .dokuwiki div.breadcrumbs div {
     border-bottom: 1px solid @ini_border;
 }
@@ -349,11 +339,12 @@ form.search {
 ********************************************************************/
 
 .dokuwiki .pageId {
-    position: absolute;
-    top: -2.3em;
-    right: -1em;
+    float: right;
+    margin-right: -1em;
+    margin-bottom: -1px;
+    margin-top: -1.5em;
     overflow: hidden;
-    padding: 1em 1em 0;
+    padding: 0.5em 1em 0;
 
     span {
         font-size: 0.875em;
@@ -370,6 +361,7 @@ form.search {
 }
 
 .dokuwiki div.page {
+    clear: both;
     background: @ini_background;
     color: inherit;
     border: 1px solid @ini_background_alt;
@@ -396,8 +388,9 @@ form.search {
 }
 
 [dir=rtl] .dokuwiki .pageId {
-    right: auto;
-    left: -1em;
+    float: left;
+    margin-left: -1em;
+    margin-right: 0;
 }
 
 /* footer
diff --git a/lib/tpl/dokuwiki/css/mobile.less b/lib/tpl/dokuwiki/css/mobile.less
index c3e517795d500cd064ff4e6824909f891a767c59..a52c723ca993530f9bd89ac8a1c5d45506fc3cb0 100644
--- a/lib/tpl/dokuwiki/css/mobile.less
+++ b/lib/tpl/dokuwiki/css/mobile.less
@@ -23,6 +23,7 @@
 #dokuwiki__aside {
     width: 100%;
     float: none;
+    margin-bottom: 1.5em;
 }
 
 #dokuwiki__aside > .pad,
@@ -158,6 +159,11 @@ body {
         padding: 0 .5em;
     }
 }
+
+#dokuwiki__aside {
+    margin-bottom: 0;
+}
+
 #dokuwiki__header {
     padding: .5em 0;
 }
@@ -231,7 +237,7 @@ body {
     margin: 0 0 .2em .2em;
 }
 
-#dokuwiki__sitetools form.search input.edit {
+#dokuwiki__sitetools form.search input {
     width: 100% !important;
 }
 .dokuwiki form.search div.ajax_qsearch {
@@ -255,7 +261,7 @@ body {
 }
 
 /* force same height on search input and tools select */
-#dokuwiki__sitetools form.search input.edit,
+#dokuwiki__sitetools form.search input,
 #dokuwiki__header .mobileTools select {
     height: 2.1em;
     line-height: 2.1em;
diff --git a/lib/tpl/dokuwiki/css/pagetools.less b/lib/tpl/dokuwiki/css/pagetools.less
index 77d2670a647ef3debeeb54bde6cb138c5f1303e1..f441a13638d7db0383c7e0bf44994fcd25941f13 100644
--- a/lib/tpl/dokuwiki/css/pagetools.less
+++ b/lib/tpl/dokuwiki/css/pagetools.less
@@ -133,25 +133,6 @@
     padding: 5px 5px 5px 40px;
 }
 
-/* IE7 fixes, doesn't work without images */
-
-#IE7 #dokuwiki__pagetools ul li a {
-    background-image: url(images/pagetools-sprite.png?v=2);
-}
-
-#IE7 #dokuwiki__pagetools:hover ul li a span,
-#IE7 #dokuwiki__pagetools ul li a:focus span,
-#IE7 #dokuwiki__pagetools ul li a:active span {
-    clip: auto;
-    display: inline;
-    position: static;
-}
-
-#IE7 #dokuwiki__pagetools ul li a span {
-    clip: rect(0 0 0 0);
-    position: absolute;
-}
-
 #dokuwiki__pagetools ul li a:hover,
 #dokuwiki__pagetools ul li a:active,
 #dokuwiki__pagetools ul li a:focus {
diff --git a/lib/tpl/dokuwiki/css/print.css b/lib/tpl/dokuwiki/css/print.css
index 86e686b69422b81bbd9875615e5cf70317b21e37..7197ac1c1428fe75fc4fb3c69cb48efcd4036a48 100644
--- a/lib/tpl/dokuwiki/css/print.css
+++ b/lib/tpl/dokuwiki/css/print.css
@@ -111,6 +111,9 @@ blockquote {
 }
 
 /* tables */
+.dokuwiki div.table {
+    margin-bottom: 1.4em;
+}
 table {
     border-collapse: collapse;
     empty-cells: show;
diff --git a/lib/tpl/dokuwiki/detail.php b/lib/tpl/dokuwiki/detail.php
index d4f9c39d1270717a4fafeab12b29025ce2ec09d5..4d798e3af2e37ee782fe31bf303e8a7be2cd4625 100644
--- a/lib/tpl/dokuwiki/detail.php
+++ b/lib/tpl/dokuwiki/detail.php
@@ -27,7 +27,7 @@ header('X-UA-Compatible: IE=edge,chrome=1');
 </head>
 
 <body>
-    <!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
+    <!--[if lte IE 8 ]><div id="IE8"><![endif]-->
     <div id="dokuwiki__site"><div id="dokuwiki__top" class="site <?php echo tpl_classes(); ?>">
 
         <?php include('tpl_header.php') ?>
@@ -36,6 +36,7 @@ header('X-UA-Compatible: IE=edge,chrome=1');
 
             <!-- ********** CONTENT ********** -->
             <div id="dokuwiki__content"><div class="pad group">
+                <?php html_msgarea() ?>
 
                 <?php if(!$ERROR): ?>
                     <div class="pageId"><span><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG)); ?></span></div>
@@ -56,6 +57,20 @@ header('X-UA-Compatible: IE=edge,chrome=1');
 
                         <div class="img_detail">
                             <?php tpl_img_meta(); ?>
+                            <dl>
+                            <?php
+                            echo '<dt>'.$lang['reference'].':</dt>';
+                            $media_usage = ft_mediause($IMG,true);
+                            if(count($media_usage) > 0){
+                                foreach($media_usage as $path){
+                                    echo '<dd>'.html_wikilink($path).'</dd>';
+                                }
+                            }else{
+                                echo '<dd>'.$lang['nothingfound'].'</dd>';
+                            }
+                            ?>
+                            </dl>
+                            <p><?php echo $lang['media_acl_warning']; ?></p>
                         </div>
                         <?php //Comment in for Debug// dbg(tpl_img_getTag('Simple.Raw'));?>
                     <?php endif; ?>
@@ -105,6 +120,6 @@ header('X-UA-Compatible: IE=edge,chrome=1');
         <?php include('tpl_footer.php') ?>
     </div></div><!-- /site -->
 
-    <!--[if ( lte IE 7 | IE 8 ) ]></div><![endif]-->
+    <!--[if lte IE 8 ]></div><![endif]-->
 </body>
 </html>
diff --git a/lib/tpl/dokuwiki/images/apple-touch-icon.png b/lib/tpl/dokuwiki/images/apple-touch-icon.png
index fb5f108c06b9822b995e9658025456ddd41625a1..87c99a9194b847a00c6cf211fbf9dea06dc22d72 100644
Binary files a/lib/tpl/dokuwiki/images/apple-touch-icon.png and b/lib/tpl/dokuwiki/images/apple-touch-icon.png differ
diff --git a/lib/tpl/dokuwiki/images/button-css.png b/lib/tpl/dokuwiki/images/button-css.png
index 706325e1c1b6f7f666a2f655b6874be1d3ee7dd4..5c0f5a9936e2c0c52b150f138b9df462b58c5724 100644
Binary files a/lib/tpl/dokuwiki/images/button-css.png and b/lib/tpl/dokuwiki/images/button-css.png differ
diff --git a/lib/tpl/dokuwiki/images/button-html5.png b/lib/tpl/dokuwiki/images/button-html5.png
index 5885a331bb0a14ad1bfa14e5770d69eaa70e8428..f7b068811dd47da122d16ade76d538978227a71b 100644
Binary files a/lib/tpl/dokuwiki/images/button-html5.png and b/lib/tpl/dokuwiki/images/button-html5.png differ
diff --git a/lib/tpl/dokuwiki/images/button-rss.png b/lib/tpl/dokuwiki/images/button-rss.png
index b7cddadec707d93233e3f2c72db8bbdcd6c552ab..aa6b7fca86eaf238e0680a9a22f6ee947bd51381 100644
Binary files a/lib/tpl/dokuwiki/images/button-rss.png and b/lib/tpl/dokuwiki/images/button-rss.png differ
diff --git a/lib/tpl/dokuwiki/images/logo.png b/lib/tpl/dokuwiki/images/logo.png
index 35640279c228d702aefbc0932f6edb0eea292caa..a1f4995691b91ac58ad41c46f1279b2194000c5c 100644
Binary files a/lib/tpl/dokuwiki/images/logo.png and b/lib/tpl/dokuwiki/images/logo.png differ
diff --git a/lib/tpl/dokuwiki/images/page-gradient.png b/lib/tpl/dokuwiki/images/page-gradient.png
index 8e16a28052af469ecf10b0d513f4dc814e94a61d..38c74198a9d808cca2d9437903cf7584003d3cc5 100644
Binary files a/lib/tpl/dokuwiki/images/page-gradient.png and b/lib/tpl/dokuwiki/images/page-gradient.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools-build.php b/lib/tpl/dokuwiki/images/pagetools-build.php
index 3cf35b2eae2808ea776ec6d2371255bfe6c6fe8d..eaceeb25736c37f910315beec640a42fd63991dc 100644
--- a/lib/tpl/dokuwiki/images/pagetools-build.php
+++ b/lib/tpl/dokuwiki/images/pagetools-build.php
@@ -15,6 +15,8 @@
 $GAMMA = 0.8;
 $OPTIPNG = '/usr/bin/optipng';
 
+if('cli' != php_sapi_name()) die('please run from commandline');
+
 // load input images
 $input = glob('pagetools/*.png');
 sort($input);
diff --git a/lib/tpl/dokuwiki/images/pagetools-sprite.png b/lib/tpl/dokuwiki/images/pagetools-sprite.png
index b6e80871735026603e4af1459fb35c043c501b4e..8e7f7f876b60b531bf13a32bfc800eee88d53c07 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools-sprite.png and b/lib/tpl/dokuwiki/images/pagetools-sprite.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/00_default.png b/lib/tpl/dokuwiki/images/pagetools/00_default.png
index 95d122e17369affb871bf7e533251244aa2e1290..bcb2de0f8b6c775715495a66e023b5db0d612787 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/00_default.png and b/lib/tpl/dokuwiki/images/pagetools/00_default.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/01_edit.png b/lib/tpl/dokuwiki/images/pagetools/01_edit.png
index ad4a737d8038b3319dba66188a29f31d8dfc3093..99f3093ee143f5b46b98c3da9103ee05951fce41 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/01_edit.png and b/lib/tpl/dokuwiki/images/pagetools/01_edit.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/02_create.png b/lib/tpl/dokuwiki/images/pagetools/02_create.png
index e4fc5d3b1085be8d294148272a72fda422052202..57fa68d4250cc2890841ed493c1d46542b7f3136 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/02_create.png and b/lib/tpl/dokuwiki/images/pagetools/02_create.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/03_draft.png b/lib/tpl/dokuwiki/images/pagetools/03_draft.png
index a13d8c3b4c3557aceaa4113a4cb9476e5aaf0747..ce1c6cf14d5b2f3d96be90cba8e1c461f16f878c 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/03_draft.png and b/lib/tpl/dokuwiki/images/pagetools/03_draft.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/04_show.png b/lib/tpl/dokuwiki/images/pagetools/04_show.png
index 6f64b1bd1c7b338b819835f47cd248d821007e7c..1ced340dda0ac7dfb88666781033d3a1442c53bd 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/04_show.png and b/lib/tpl/dokuwiki/images/pagetools/04_show.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/05_source.png b/lib/tpl/dokuwiki/images/pagetools/05_source.png
index bcc4fa21fec3510550fae3c91ce92de67f4817f0..dffe1931a2839dcc9cd31f3c6655dcb0a2836384 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/05_source.png and b/lib/tpl/dokuwiki/images/pagetools/05_source.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/06_revert.png b/lib/tpl/dokuwiki/images/pagetools/06_revert.png
index 7b8457e5ee5f19d266ea875700ee1362c989d37a..18c6444744c7f03b1789b25c1be0182408caa6ed 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/06_revert.png and b/lib/tpl/dokuwiki/images/pagetools/06_revert.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/07_revisions.png b/lib/tpl/dokuwiki/images/pagetools/07_revisions.png
index d918bce0505a10f4662d6ce09d77fb5f281ab3cc..e599d016c4742800404b46eb8b18f2614a9402a1 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/07_revisions.png and b/lib/tpl/dokuwiki/images/pagetools/07_revisions.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/08_backlink.png b/lib/tpl/dokuwiki/images/pagetools/08_backlink.png
index 2c0823a72acf724b88a644570ba278c5361362f4..aa34e27750dd2034a32a17a86c85cecbc781c687 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/08_backlink.png and b/lib/tpl/dokuwiki/images/pagetools/08_backlink.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/09_subscribe.png b/lib/tpl/dokuwiki/images/pagetools/09_subscribe.png
index 30e039dbc42230ab1c6628dca272a91deec470f5..36254ff5347e2821d0ed829e54fe15be68ed2489 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/09_subscribe.png and b/lib/tpl/dokuwiki/images/pagetools/09_subscribe.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/10_top.png b/lib/tpl/dokuwiki/images/pagetools/10_top.png
index e4bf1d49d01a6f66272766e7e067a1118709bf71..b930fd25f1f0a1b5741100ca881444a6a261572b 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/10_top.png and b/lib/tpl/dokuwiki/images/pagetools/10_top.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/11_mediamanager.png b/lib/tpl/dokuwiki/images/pagetools/11_mediamanager.png
index 36116802f0b8a5e60d7f95439bb2a64e807772bd..71b5a3372321c7393120c1ab41e8b674e4dfb883 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/11_mediamanager.png and b/lib/tpl/dokuwiki/images/pagetools/11_mediamanager.png differ
diff --git a/lib/tpl/dokuwiki/images/pagetools/12_back.png b/lib/tpl/dokuwiki/images/pagetools/12_back.png
index d154651ec2c860794cf8862258b53b6b37dc3068..6d6093ed6bb84509e772b7b8584b33c8c2051a74 100644
Binary files a/lib/tpl/dokuwiki/images/pagetools/12_back.png and b/lib/tpl/dokuwiki/images/pagetools/12_back.png differ
diff --git a/lib/tpl/dokuwiki/images/search.png b/lib/tpl/dokuwiki/images/search.png
index 1ab7866fb0410158619d8a793c3a04ac186b4fdf..a07a721df97082deaa8365aeb7a346f8ac459d6c 100644
Binary files a/lib/tpl/dokuwiki/images/search.png and b/lib/tpl/dokuwiki/images/search.png differ
diff --git a/lib/tpl/dokuwiki/images/toc-bullet.png b/lib/tpl/dokuwiki/images/toc-bullet.png
index fc771b97e0dc8ecb788d5d345388a2e72e723155..a2dfa47e9d874b54a27cf5e1d7b5e0c47ab323ec 100644
Binary files a/lib/tpl/dokuwiki/images/toc-bullet.png and b/lib/tpl/dokuwiki/images/toc-bullet.png differ
diff --git a/lib/tpl/dokuwiki/images/usertools.png b/lib/tpl/dokuwiki/images/usertools.png
index e99b6596e81bc58e314ae996826efcfb3c925a8d..68102271f2131ca21e3a4a28c52db559f7963fbe 100644
Binary files a/lib/tpl/dokuwiki/images/usertools.png and b/lib/tpl/dokuwiki/images/usertools.png differ
diff --git a/lib/tpl/dokuwiki/lang/bg/lang.php b/lib/tpl/dokuwiki/lang/bg/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..7717607c06770d511bf35a8de11abad0a1b2a6a6
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/bg/lang.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Kiril <neohidra@gmail.com>
+ */
+$lang['__background_site__']   = 'Цвят за фона, под съдъжанието';
+$lang['__link__']              = 'Стандартен цвят за препратка';
+$lang['__existing__']          = 'Цвят за препратка към съществуващи станици';
+$lang['__missing__']           = 'Цвят за препратка към несъществуващи станици';
+$lang['__site_width__']        = 'Ширина на целия сайт (може да бъде всяка мерна единица:%, px, em, ...)';
+$lang['__sidebar_width__']     = 'Ширина на страничната лента (може да бъде всяка мерна единица:%, px, em, ...)';
diff --git a/lib/tpl/dokuwiki/lang/cs/lang.php b/lib/tpl/dokuwiki/lang/cs/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..6599c73cb8442d0c98b69bef5e6855a11851de3a
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/cs/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
+ */
+$lang['__background_site__']   = 'Barva hlavního pozadí (pod kontextovým boxem)';
+$lang['__link__']              = 'Hlavní barva odkazů';
+$lang['__existing__']          = 'Barva odkazů na existující stránky';
+$lang['__missing__']           = 'Barva odkazů na neexistující stránky';
+$lang['__site_width__']        = 'Šířka plné stránky (jakákoliv jednotka délky: %, px, em, ...)';
+$lang['__sidebar_width__']     = 'Šířka postranního panelu, pokud je použit (jakákoliv jednotka délky: %, px, em, ...)';
+$lang['__tablet_width__']      = 'Přepnout stránku do módu pro tablet pro velikost obrazovky menší než';
+$lang['__phone_width__']       = 'Přepnout stránku do módu pro telefon pro velikost obrazovky menší než';
diff --git a/lib/tpl/dokuwiki/lang/cs/style.txt b/lib/tpl/dokuwiki/lang/cs/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e2ebe22b371ce84f91eeb39532e376e25a18dd7b
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/cs/style.txt
@@ -0,0 +1,2 @@
+Pokud chcete upravit logo, jednoduše použijte Media Manager pro nahrání obrázku "logo.png" do kořenového jmenného prostoru "wiki" a ten bude poté použit jako logo. Můžete nahrát také ikonu "favicon.ico".
+Pokud používáte neveřejnou wiki, doporučujeme udělit plná práva pro čtení prostoru "wiki" (nebo root) v nastavení ACL, jinak nebude vlastní logo zobrazeno nepřihlášeným uživatelům.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/cy/lang.php b/lib/tpl/dokuwiki/lang/cy/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..860ce8f156bc535d42f332bf0b8afd9e961f2930
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/cy/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// style.ini values
+
+$lang['__background_site__'] = 'Lliw am y cefndir (tu ôl y blwch cynnwys)';
+$lang['__link__']     = 'Lliw dolenni cyffredinol';
+$lang['__existing__'] = 'Lliw dolenni i dudalennau sy\'n bodoli';
+$lang['__missing__']  = 'Lliw dolenni i dudalennau sy ddim yn bodoli';
+$lang['__site_width__']    = 'Lled y safle cyfan (unrhyw uned: %, px, em, ...)';
+$lang['__sidebar_width__'] = 'Lled y bar ochr, os oes un (unrhyw uned: %, px, em, ...)';
+$lang['__tablet_width__']  = 'O dan y lled sgrin hwn, bydd y safle yn newid i fodd tabled';
+$lang['__phone_width__']   = 'O dan y lled sgrin hwn, bydd y safle yn newid i fodd ffôn';
diff --git a/lib/tpl/dokuwiki/lang/cy/style.txt b/lib/tpl/dokuwiki/lang/cy/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ce87798a0e48c920f0c354e2b2536b8fd6d0be17
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/cy/style.txt
@@ -0,0 +1,4 @@
+Os ydych chi am newid y logo, defnyddiwch y Rheolwr Cyfrwng i lanlwytho ''logo.png'' i ''wici'' neu wraidd y namespace
+a chaiff ei ddefnyddio'n awtomatig. Gallwch chi hefyd lanlwytho ''favicon.ico'' yna. Os ydych chi'n defnyddio
+wici caeedig, awgrymwyd eich bod chi'n gwneud y ''wici'' (new wraidd) y namespace yn ddarllenadwy i bawb yn y
+gosodiadau ACL neu na chaiff eich logo chi ei weld gan ddefnyddwyr sydd heb fewngofnodi.
diff --git a/lib/tpl/dokuwiki/lang/de/lang.php b/lib/tpl/dokuwiki/lang/de/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..a17c945d97018c2aaf6daa2b9f761829ad17652a
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/de/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+$lang['__background_site__']   = 'Farbe für den Seitenhintergrund (hinter dem Inhaltsbereich)';
+$lang['__link__']              = 'Allgemeine Linkfarbe';
+$lang['__existing__']          = 'Farbe für Links zu existierenden Seiten';
+$lang['__missing__']           = 'Farbe für Links zu nicht-existierenden Seiten';
+$lang['__site_width__']        = 'Breite der ganzen Seite (kann eine beliebige Längeneinheit sein: %, px, em, ...)';
+$lang['__sidebar_width__']     = 'Breite der Seitenleiste, falls vorhanden (kann eine beliebige Längeneinheit sein: %, px, em, ...)';
+$lang['__tablet_width__']      = 'Unter dieser Fensterbreite wechselt die Seite in den Tabletmodus';
+$lang['__phone_width__']       = 'Unter dieser Fensterbreite wechselt die Seite in den Handymodus';
diff --git a/lib/tpl/dokuwiki/lang/de/style.txt b/lib/tpl/dokuwiki/lang/de/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1fd2f332bc2a16948f72a36e65ae5273b77a7773
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/de/style.txt
@@ -0,0 +1 @@
+Wenn Sie das Logo anpassen wollen, benutzen Sie einfach den Medien-Manager, um ein ''logo.png'' in den ''wiki''- oder Wurzel-Namensraum hochzuladen. Es wird dann automatisch als Logo verwendet. Sie können dort auch ein 'favicon.ico'' hochladen. Falls Sie ein geschlossenes Wiki haben, ist es empfehlenswert, den ''wiki''- (oder Wurzel-)Namensraum für alle Nutzer in den ACL-Einstellungen zu öffnen. Ansonsten wird das Logo nur für eingeloggte Nutzer angezeigt.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/en/lang.php b/lib/tpl/dokuwiki/lang/en/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..b7b3e7fa114604a0bb9c32749884e4a25ba0d0ed
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/en/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// style.ini values
+
+$lang['__background_site__'] = 'Color for the very background (behind the content box)';
+$lang['__link__']     = 'The general link color';
+$lang['__existing__'] = 'The color for links to existing pages';
+$lang['__missing__']  = 'The color for links to non-existing pages';
+$lang['__site_width__']    = 'The width of the full site (can be any length unit: %, px, em, ...)';
+$lang['__sidebar_width__'] = 'The width of the sidebar, if any (can be any length unit: %, px, em, ...)';
+$lang['__tablet_width__']  = 'Below screensizes of this width, the site switches to tablet mode';
+$lang['__phone_width__']   = 'Below screensizes of this width, the site switches to phone mode';
diff --git a/lib/tpl/dokuwiki/lang/en/style.txt b/lib/tpl/dokuwiki/lang/en/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7bf3e1a829247329bdb816a2aef093474ac19aac
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/en/style.txt
@@ -0,0 +1,4 @@
+If you want to adjust the logo, simply use the Media Manager to upload a ''logo.png'' into the ''wiki'' or the root namespace and it
+will be automatically used. You can also upload a ''favicon.ico'' there. If you use a closed
+wiki it is recommended to make the ''wiki'' (or root) namespace world readable in the ACL settings or
+your logo is not shown to not logged in users.
diff --git a/lib/tpl/dokuwiki/lang/es/lang.php b/lib/tpl/dokuwiki/lang/es/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..b63d0dc7d0ac8172fac467f1fae81511d2187805
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/es/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Domingo Redal <docxml@gmail.com>
+ */
+$lang['__background_site__']   = 'Color para el fondo (detrás de la caja de contenido)';
+$lang['__link__']              = 'El color de los enlaces en general';
+$lang['__existing__']          = 'El color de los enlaces a páginas existentes';
+$lang['__missing__']           = 'El color de los enlaces a páginas no existentes';
+$lang['__site_width__']        = 'El ancho de la página completa (puede ser cualquier unidad de longitud: %, px, em, ...)';
+$lang['__sidebar_width__']     = 'El ancho de la barra lateral (puede ser cualquier unidad de longitud: %, px, em, ...)';
+$lang['__tablet_width__']      = 'Para tamaños de pantalla por debajo de esta anchura, el sitio cambia al modo tableta';
+$lang['__phone_width__']       = 'Para tamaños de pantalla por debajo de esta anchura, el sitio cambia al modo teléfono';
diff --git a/lib/tpl/dokuwiki/lang/es/style.txt b/lib/tpl/dokuwiki/lang/es/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..60ce308ffce220a5ccbbc7bbabf1f23d4cc00d00
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/es/style.txt
@@ -0,0 +1 @@
+Si desea ajustar el logotipo, sólo tiene que utilizar el Administrador de Medios para cargar un ''logo.png'' dentro de "wiki'' o en el espacio de nombres de la raíz y se utilizará automáticamente. También puede cargar un ''favicon.ico'' allí. Si utiliza un wiki cerrado se recomienda hacer el ''wiki'' (o raíz) espacio de nombres legible por todo el mundo en la configuración de ACL o su logotipo no se mostrará para que los usuarios no registrados.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/fa/lang.php b/lib/tpl/dokuwiki/lang/fa/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb2e95ee4adab7653442bb5721ad885d56eff24a
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/fa/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Masoud Sadrnezhaad <masoud@sadrnezhaad.ir>
+ */
+$lang['__background_site__']   = 'رنگ پس‌زمینه (پشت جعبهٔ متن)';
+$lang['__link__']              = 'رنگ لینک معمول';
+$lang['__existing__']          = 'رنگ برای لینک به صفحات موجود';
+$lang['__missing__']           = 'رنگ برای لینک به صفحات ناموجود';
+$lang['__site_width__']        = 'عرض کل سایت (از واحدهای طول شامل % یا px یا em و ... می‌شود استفاده کرد)';
+$lang['__sidebar_width__']     = 'عرض نوار کناری درصورت وجود (از واحدهای طول شامل % یا px یا em و ... می‌شود استفاده کرد)';
+$lang['__tablet_width__']      = 'در پایین اندازه‌های صفحه با این عرض وقتی که در تبلت باز می‌شود';
+$lang['__phone_width__']       = 'در پایین اندازه‌های صفحه با این عرض وقتی که در تلفن موبایل باز می‌شود';
diff --git a/lib/tpl/dokuwiki/lang/fa/style.txt b/lib/tpl/dokuwiki/lang/fa/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f9009fd0866f5709cfdda231f03fc854f4f6f850
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/fa/style.txt
@@ -0,0 +1 @@
+اگر می‌خواهید یک لوگو تنظیم کنید، به راحتی مدیریت رسانه‌ها را باز کنید و یک تصویر با نام ''logo.png'' در فضای نام اصلی یا ''wiki'' آپلود کنید. سپس لوگو به صورت اتوماتیک مورد استفاده قرار می‌گیرد. همچنین می‌توانید یک ''favicon.ico'' در آن‌جا آپلود کنید. اگر از ویکی بسته استفاده می‌کنید پیشنهاد می‌شود که فضای نام ویکی (یا اصلی) در تنظیمات خواندنی به همه باشد یا درغیر اینصورت لوگو به کاربرانی که وارد نشده باشند نمایش داده نمی‌شود.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/fr/lang.php b/lib/tpl/dokuwiki/lang/fr/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ae74ca83e7da619ff10d2cd68f5135e0f2e399f3
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/fr/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Nicolas Friedli <nicolas@theologique.ch>
+ */
+$lang['__background_site__']   = 'Couleur du fond (derrière la boîte de contenu)';
+$lang['__link__']              = 'Couleur générale des liens';
+$lang['__existing__']          = 'Couleur des liens pour les pages existantes';
+$lang['__missing__']           = 'Couleur des liens pour les pages inexistantes';
+$lang['__site_width__']        = 'Largeur du site complet (dans une unité de longueur valide: %, px, em,...)';
+$lang['__sidebar_width__']     = 'Largeur de la barre latérale, si existante (dans une unité de longueur valide: %, px, em,...)';
+$lang['__tablet_width__']      = 'En dessous de cette largeur, le site passe en mode tablette.';
+$lang['__phone_width__']       = 'En dessous de cette largeur, le site passe en mode smartphone.';
diff --git a/lib/tpl/dokuwiki/lang/fr/style.txt b/lib/tpl/dokuwiki/lang/fr/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..876f116c9ac0177e81ccf8949342c8254e1933d3
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/fr/style.txt
@@ -0,0 +1 @@
+Si vous souhaitez modifier le logo, utilisez simplement le gestionnaire de médias et envoyez un fichier nommé "logo.png" dans l'espace de nom "wiki" ou à la racine. Il sera automatiquement utilisé. Il en est de même pour le "favicon.ico". Si vous utilisez un wiki fermé, il est recommandé de régler les ACL de la racine ou de l'espace de nom "wiki" pour rendre ces images visibles aux utilisateurs non connectés.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/hu/lang.php b/lib/tpl/dokuwiki/lang/hu/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..083736623406440c8fc51cecd59d4d5bc75137bd
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/hu/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Marton Sebok <sebokmarton@gmail.com>
+ */
+$lang['__background_site__']   = 'Lap színe (a tartalom mögött)';
+$lang['__link__']              = 'Hivatkozás általános színe';
+$lang['__existing__']          = 'Hivatkozása színe létező lapoknál';
+$lang['__missing__']           = 'Hivatkozása színe nem létező lapoknál';
+$lang['__site_width__']        = 'Az oldal teljes szélessége (tetszőleges mértékegységgel: %, px, em, ...)';
+$lang['__sidebar_width__']     = 'Az oldalsáv szélessége (tetszőleges mértékegységgel: %, px, em, ...)';
+$lang['__tablet_width__']      = 'Váltás tablet-módra ezen szélesség alatt';
+$lang['__phone_width__']       = 'Váltás mobiltelefon-módra ezen szélesség alatt';
diff --git a/lib/tpl/dokuwiki/lang/hu/style.txt b/lib/tpl/dokuwiki/lang/hu/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1cdf517b32738ec60f5ddab3082c75f4ed4bb292
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/hu/style.txt
@@ -0,0 +1 @@
+A logó megváltoztatásához tölts fel egy képet "logo.png" néven a "wiki" névtérbe vagy a kiindulási névtérbe. Ugyanígy feltöltheted ide az oldalhoz tartozó ikont is, "favicon.ico" néven. Ha zárt wikit használsz, javasoljuk, hogy állítsd be a "wiki" (vagy a kiindulási) névteret mindenki számára olvashatónak, különben a logót csak a bejelentkezett felhasználók fogják látni.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/it/lang.php b/lib/tpl/dokuwiki/lang/it/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..954f0f753bfdaf565851f58b4e17ce4ee6f1848b
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/it/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Torpedo <dgtorpedo@gmail.com>
+ */
+$lang['__background_site__']   = 'Colore per lo sfondo di livello più basso (dietro il riquadro del contenuto)';
+$lang['__link__']              = 'Colore generale per i link';
+$lang['__existing__']          = 'Colore per i collegamenti alle pagine esistenti';
+$lang['__missing__']           = 'Colore per i collegamenti alle pagine non esistenti';
+$lang['__site_width__']        = 'Larghezza dell\'intero sito (può essere una qualunque unità di lunghezza: %, px, em, ...)';
+$lang['__sidebar_width__']     = 'Larghezza della barra laterale, se presente (può essere una qualunque unità di lunghezza: %, px, em, ...)';
+$lang['__tablet_width__']      = 'Per dimensioni dello schermo al di sotto di questa larghezza, il sito passa in modalità tablet';
+$lang['__phone_width__']       = 'Per dimensioni dello schermo al di sotto di questa larghezza, il sito passa in modalità telefono';
diff --git a/lib/tpl/dokuwiki/lang/it/style.txt b/lib/tpl/dokuwiki/lang/it/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1179f086a2148b0d4cd696dfb2026bd914aa29f2
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/it/style.txt
@@ -0,0 +1 @@
+Se vuoi modificare il logo, semplicemente usa Media Manager per caricare un ''logo.png'' in ''wiki'' o nella directory root e questo verrà automaticamente usato. Qui puoi anche caricare una ''favicon.ico''. Se utilizzi un wiki chiuso si raccomanda di rendere la directory ''wiki'' (o root) leggibile a tutti, nelle impostazioni ACL, altrimenti il tuo logo non sarà visibile agli utenti che non hanno effettuato l'accesso.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/ja/lang.php b/lib/tpl/dokuwiki/lang/ja/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..1800e2aaa235535365cefe701d9d23d922de4d79
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/ja/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Hideaki SAWADA <chuno@live.jp>
+ */
+$lang['__background_site__']   = 'サイト全体の背景色(content box の背後)';
+$lang['__link__']              = '通常のリンク色';
+$lang['__existing__']          = '既存ページへのリンク色';
+$lang['__missing__']           = '存在しないページへのリンク色';
+$lang['__site_width__']        = 'サイトの全体幅(任意の長さの単位を使用可能: % px em 他)';
+$lang['__sidebar_width__']     = 'サイドバーがある場合、サイドバーの幅(任意の長さの単位を使用可能: % px em 他)';
+$lang['__tablet_width__']      = 'タブレットモードにサイトを切替える、画面幅';
+$lang['__phone_width__']       = '携帯電話モードにサイトを切替える、画面幅';
diff --git a/lib/tpl/dokuwiki/lang/ja/style.txt b/lib/tpl/dokuwiki/lang/ja/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ab032e7ec48010c57b0606c4c611749fe719a8d8
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/ja/style.txt
@@ -0,0 +1,5 @@
+ロゴを変更したい場合、メディア管理を利用して「wiki」またはルート名前空間に「logo.png」をアップロードして下さい。
+自動的にその画像を使用します。
+同じ場所に「favicon.ico」をアップロードして使用することもできます。
+アクセス制限のある wiki を使用している場合、アクセスコントロール管理で「wiki」またはルート名前空間を全員読取可に設定して下さい。
+そうでないとログインしていないユーザーにロゴが表示されません。
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/ko/lang.php b/lib/tpl/dokuwiki/lang/ko/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..efcb44a7fa62f3d868fbc7eb8b006ff747826c1e
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/ko/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['__background_site__']   = '(내용 상자 뒤의) 매우 배경 색';
+$lang['__link__']              = '일반 링크 색';
+$lang['__existing__']          = '문서가 존재하는 링크의 색';
+$lang['__missing__']           = '문서가 존재하지 않는 링크의 색';
+$lang['__site_width__']        = '전체 사이트의 너비 (아무 길이 단위나 될 수 있음: %, px, em, ...)';
+$lang['__sidebar_width__']     = '사이드바가 있다면, 그것의 너비 (아무 길이 단위나 될 수 있음: %, px, em, ...)';
+$lang['__tablet_width__']      = '사이트를 태블릿 모드로 전환할 화면 너비';
+$lang['__phone_width__']       = '사이트를 폰 모드로 전환할 화면 너비';
diff --git a/lib/tpl/dokuwiki/lang/ko/style.txt b/lib/tpl/dokuwiki/lang/ko/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..306f40edbebbd7507fa04e88ca0d7496e1980093
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/ko/style.txt
@@ -0,0 +1,4 @@
+로고를 조정하려면, 간단히 미디어 관리자를 사용하여 ''wiki''나 루트 이름공간 안에 ''logo.png''를 올리면
+자동으로 사용됩니다. 또한 여기에 ''favicon.ico''를 올릴 수 있습니다. 만약 닫힌 위키를 사용한다면
+ACL 설정에서 ''wiki'' (또는 루트) 이름공간을 전역으로 읽을 수 있도록 설정하거나 로고를 사용자가
+로그인하지 않으면 보여주지 않도록 설정하는 것을 권장합니다.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/nl/lang.php b/lib/tpl/dokuwiki/lang/nl/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb84fd82a4dc983aba1e85f3d3d42ccfe0bd2ebc
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/nl/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author hugo smet <hugo.smet@scarlet.be>
+ */
+$lang['__background_site__']   = 'Kleur voor de onderste ondergrond (achter de inhoud kader)';
+$lang['__link__']              = 'Kleur voor algemene link';
+$lang['__existing__']          = 'Kleur voor link naar bestaande pagina\'s.';
+$lang['__missing__']           = 'Kleur voor link naar onbestaande pagina\'s';
+$lang['__site_width__']        = 'Breedte van de max site (in gelijk welke eenheid: %, px, em,...)';
+$lang['__sidebar_width__']     = 'Breedte van de zijbalk,  indien aanwezig  (in gelijk welke eenheid: %, px, em,...)';
+$lang['__tablet_width__']      = 'Beneden de breedte van deze schermafmetingen schakelt de site over naar tablet modus.';
+$lang['__phone_width__']       = 'Beneden de breedte van deze schermafmetingen schakelt de site over naar telefoon modus.';
diff --git a/lib/tpl/dokuwiki/lang/nl/style.txt b/lib/tpl/dokuwiki/lang/nl/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..55de5c7c0a58aface61dca3b63bd261d8744b25a
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/nl/style.txt
@@ -0,0 +1 @@
+Wil je het logo aanpassen, gebruik dan de Media Manager om een "logo.png" in "wiki" of root naamruimte te uploaden. Dit logo zal dan automatisch gebruikt worden. Je kunt zo ook een "favicon.ico" uploaden. Indien je een gesloten wiki gebruikt is het aan te raden om de "wiki" (of root) naamruimte leesbaar te maken voor iedereen via de ACL instellingen, want anders wordt je logo niet getoond aan niet-ingelogde gebruikers.
diff --git a/lib/tpl/dokuwiki/lang/pt-br/lang.php b/lib/tpl/dokuwiki/lang/pt-br/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..0392652747dcd4577cd07d5d14d77de21c35687c
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/pt-br/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ */
+$lang['__background_site__']   = 'Cor para o fundo da tela (atrás da caixa de conteúdo)';
+$lang['__link__']              = 'Cor dos links gerais';
+$lang['__existing__']          = 'Cor dos links para páginas existentes';
+$lang['__missing__']           = 'Cor dos links para páginas não existentes';
+$lang['__site_width__']        = 'Largura do site inteiro (pode ser qualquer unidade: %, px, em, ...)';
+$lang['__sidebar_width__']     = 'Largura da barra lateral, caso exista (pode ser qualquer unidade: %, px, em, ...)';
+$lang['__tablet_width__']      = 'Em larguras abaixo dessa medida, o site mudará para o modo tablet';
+$lang['__phone_width__']       = 'Em larguras abaixo dessa medida, o site mudará para o modo telefone';
diff --git a/lib/tpl/dokuwiki/lang/pt-br/style.txt b/lib/tpl/dokuwiki/lang/pt-br/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..52475d8cf9569442f198333d96efbbb49621d2b2
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/pt-br/style.txt
@@ -0,0 +1 @@
+Caso queira ajustar a logo, use o Gerenciador de Mídias para enviar um "logo.png" para o espaço de nomes "wiki" ou para a raiz e ele será automaticamente usado. Você também pode enviar um "favicon.ico". Caso o seu wiki seja fechado, é recomendável que o espaço de nomes "wiki" (ou a raiz) tenha permissão de leitura nas configurações de ACL, caso contrário a sua logo não será exibida para usuários não autenticados.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/ru/lang.php b/lib/tpl/dokuwiki/lang/ru/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..66066b13c43745b7a062ffe63fddcf77adf8054a
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/ru/lang.php
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author RainbowSpike <1@2.ru>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ */
+$lang['__background_site__']   = 'Цвет для дальнего фона (за окном содержимого)';
+$lang['__link__']              = 'Основной цвет ссылок';
+$lang['__existing__']          = 'Цвет ссылок на существующие страницы';
+$lang['__missing__']           = 'Цвет ссылок на несуществующие страницы';
+$lang['__site_width__']        = 'Ширина всего сайта (любые CSS-единицы)';
+$lang['__sidebar_width__']     = 'Ширина боковой панели, если есть (любые CSS-единицы)';
+$lang['__tablet_width__']      = 'Переключать сайт в планшетный вид ниже ширины';
+$lang['__phone_width__']       = 'Переключать сайт в мобильный вид ниже ширины';
diff --git a/lib/tpl/dokuwiki/lang/ru/style.txt b/lib/tpl/dokuwiki/lang/ru/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..43bdcd162afbb47c03b2f1c6d3e53b8eda27b170
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/ru/style.txt
@@ -0,0 +1 @@
+Если вы хотите изменить логотип, просто используйте «Управление медиафайлами» для загрузки файла ''logo.png'' в корневое пространство имён или ''wiki'', и тогда он будет использоваться автоматически. Туда же вы можете загрузить ''favicon.ico''. Если у вас «закрытая» вики, рекомендуется указать права на «чтение» в списках контроля доступа для пространства имён ''wiki'' (или корневое), иначе логотип не будет показываться незалогинившимся пользователям.
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/lang/sk/lang.php b/lib/tpl/dokuwiki/lang/sk/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..ca611f838dd8aba9dee14b189c84699519a8e93a
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/sk/lang.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['__background_site__']   = 'Farba základného pozadia (za oknom s obsahom)';
+$lang['__link__']              = 'Všeobecná farba odkazu';
+$lang['__existing__']          = 'Farba odkazov na existujúce stránky';
+$lang['__missing__']           = 'Farba odkazov na neexistujúce stránky';
diff --git a/lib/tpl/dokuwiki/lang/zh/lang.php b/lib/tpl/dokuwiki/lang/zh/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..768114757d53c4212b1c25bc255be517b03f568b
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/zh/lang.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * 
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['__background_site__']   = '特别背景的颜色 (内容框后面)';
+$lang['__link__']              = '一般链接的颜色';
+$lang['__existing__']          = '指向存在的页面的链接颜色';
+$lang['__missing__']           = '指向不存在的页面的链接颜色';
+$lang['__site_width__']        = '全站的宽度 (可以是任何长度单位:%,px,em,...)';
+$lang['__sidebar_width__']     = '侧边栏的宽度 (如有,可以是任何长度单位:%,px,em,...)';
+$lang['__tablet_width__']      = '当屏幕尺寸小于这个宽度,站点切换到平板模式';
+$lang['__phone_width__']       = '当屏幕尺寸小于这个宽度,站点切换到手机模式';
diff --git a/lib/tpl/dokuwiki/lang/zh/style.txt b/lib/tpl/dokuwiki/lang/zh/style.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3f69212010b79c8ba8f365244c40a2bda47d0ba7
--- /dev/null
+++ b/lib/tpl/dokuwiki/lang/zh/style.txt
@@ -0,0 +1 @@
+如果您想调整logo,只需使用媒体管理器将“logo.png”上传到“wiki”或者根命名空间下。您也可以同样上传一个“favicon.ico”。如果您采用的是封闭维基,建议在ACL设置中将“wiki” (或者根) 命名空间设置为全局可读,否则未登录用户无法看到您的logo。
\ No newline at end of file
diff --git a/lib/tpl/dokuwiki/main.php b/lib/tpl/dokuwiki/main.php
index 10c0bf91e5249f16ba6e4c7bde9d68e85cf7f4ee..9fea1b133f27e9be830462334a861d572a6ff576 100644
--- a/lib/tpl/dokuwiki/main.php
+++ b/lib/tpl/dokuwiki/main.php
@@ -26,7 +26,7 @@ $showSidebar = $hasSidebar && ($ACT=='show');
 </head>
 
 <body>
-    <!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
+    <!--[if lte IE 8 ]><div id="IE8"><![endif]-->
     <div id="dokuwiki__site"><div id="dokuwiki__top" class="site <?php echo tpl_classes(); ?> <?php
         echo ($showSidebar) ? 'showSidebar' : ''; ?> <?php echo ($hasSidebar) ? 'hasSidebar' : ''; ?>">
 
@@ -38,17 +38,18 @@ $showSidebar = $hasSidebar && ($ACT=='show');
                 <!-- ********** ASIDE ********** -->
                 <div id="dokuwiki__aside"><div class="pad aside include group">
                     <h3 class="toggle"><?php echo $lang['sidebar'] ?></h3>
-                    <div class="content">
+                    <div class="content"><div class="group">
                         <?php tpl_flush() ?>
                         <?php tpl_includeFile('sidebarheader.html') ?>
                         <?php tpl_include_page($conf['sidebar'], true, true) ?>
                         <?php tpl_includeFile('sidebarfooter.html') ?>
-                    </div>
+                    </div></div>
                 </div></div><!-- /aside -->
             <?php endif; ?>
 
             <!-- ********** CONTENT ********** -->
             <div id="dokuwiki__content"><div class="pad group">
+                <?php html_msgarea() ?>
 
                 <div class="pageId"><span><?php echo hsc($ID) ?></span></div>
 
@@ -105,6 +106,6 @@ $showSidebar = $hasSidebar && ($ACT=='show');
 
     <div class="no"><?php tpl_indexerWebBug() /* provide DokuWiki housekeeping, required in all templates */ ?></div>
     <div id="screen__mode" class="no"></div><?php /* helper to detect CSS media query in script.js */ ?>
-    <!--[if ( lte IE 7 | IE 8 ) ]></div><![endif]-->
+    <!--[if lte IE 8 ]></div><![endif]-->
 </body>
 </html>
diff --git a/lib/tpl/dokuwiki/mediamanager.php b/lib/tpl/dokuwiki/mediamanager.php
index dadf2b10f87d802de1c19a6a4277bf9d1379084f..b3127176611f0288f0cfb7a01c50d80544eb7c39 100644
--- a/lib/tpl/dokuwiki/mediamanager.php
+++ b/lib/tpl/dokuwiki/mediamanager.php
@@ -25,7 +25,7 @@ header('X-UA-Compatible: IE=edge,chrome=1');
 </head>
 
 <body>
-    <!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
+    <!--[if lte IE 8 ]><div id="IE8"><![endif]-->
     <div id="media__manager" class="dokuwiki">
         <?php html_msgarea() ?>
         <div id="mediamgr__aside"><div class="pad">
@@ -41,6 +41,6 @@ header('X-UA-Compatible: IE=edge,chrome=1');
             <?php tpl_mediaContent() ?>
         </div></div>
     </div>
-    <!--[if ( lte IE 7 | IE 8 ) ]></div><![endif]-->
+    <!--[if lte IE 8 ]></div><![endif]-->
 </body>
 </html>
diff --git a/lib/tpl/dokuwiki/template.info.txt b/lib/tpl/dokuwiki/template.info.txt
index 804d595ae39f357b3fe071bc6837790d662b6007..73ad93927aad48e03392c66ace112f7780dfd525 100644
--- a/lib/tpl/dokuwiki/template.info.txt
+++ b/lib/tpl/dokuwiki/template.info.txt
@@ -1,7 +1,7 @@
 base     dokuwiki
 author   Anika Henke
 email    anika@selfthinker.org
-date     2014-06-04
+date     2015-07-26
 name     DokuWiki Template
 desc     DokuWiki's default template since 2012
 url      http://www.dokuwiki.org/template:dokuwiki
diff --git a/lib/tpl/dokuwiki/tpl_header.php b/lib/tpl/dokuwiki/tpl_header.php
index 7d9c8834747a6f643847022cdddacfa214e925ee..5b092c5644819d164223f08289379f4e7f7779e0 100644
--- a/lib/tpl/dokuwiki/tpl_header.php
+++ b/lib/tpl/dokuwiki/tpl_header.php
@@ -46,10 +46,12 @@ if (!defined('DOKU_INC')) die();
                             tpl_userinfo(); /* 'Logged in as ...' */
                             echo '</li>';
                         }
-                        tpl_action('admin', true, 'li');
-                        tpl_action('profile', true, 'li');
-                        tpl_action('register', true, 'li');
-                        tpl_action('login', true, 'li');
+                        tpl_toolsevent('usertools', array(
+                            tpl_action('admin', true, 'li', true),
+                            tpl_action('profile', true, 'li', true),
+                            tpl_action('register', true, 'li', true),
+                            tpl_action('login', true, 'li', true)
+                        ));
                     ?>
                 </ul>
             </div>
@@ -64,9 +66,11 @@ if (!defined('DOKU_INC')) die();
             </div>
             <ul>
                 <?php
-                    tpl_action('recent', true, 'li');
-                    tpl_action('media', true, 'li');
-                    tpl_action('index', true, 'li');
+                    tpl_toolsevent('sitetools', array(
+                        tpl_action('recent', true, 'li', true),
+                        tpl_action('media', true, 'li', true),
+                        tpl_action('index', true, 'li', true)
+                    ));
                 ?>
             </ul>
         </div>
@@ -85,7 +89,7 @@ if (!defined('DOKU_INC')) die();
         </div>
     <?php endif ?>
 
-    <?php html_msgarea() ?>
+
 
     <hr class="a11y" />
 </div></div><!-- /header -->
diff --git a/vendor/README b/vendor/README
new file mode 100644
index 0000000000000000000000000000000000000000..e4027f419560c19f98684c6b2a52ed8a1289f905
--- /dev/null
+++ b/vendor/README
@@ -0,0 +1,6 @@
+====== composer managed libraries ======
+
+All file within here are manged through composer and should not be
+edited directly. Instead provide upstream patches.
+
+Learn more about Composer at http://getcomposer.org
diff --git a/vendor/autoload.php b/vendor/autoload.php
new file mode 100644
index 0000000000000000000000000000000000000000..88c7fd93b4f81107eb73d97d9ab635e3e3db33d4
--- /dev/null
+++ b/vendor/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer' . '/autoload_real.php';
+
+return ComposerAutoloaderInita19a915ee98347a0c787119619d2ff9b::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
new file mode 100644
index 0000000000000000000000000000000000000000..5e1469e8307d9c644831f694ed8eccdd4afccc28
--- /dev/null
+++ b/vendor/composer/ClassLoader.php
@@ -0,0 +1,413 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0 class loader
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class ClassLoader
+{
+    // PSR-4
+    private $prefixLengthsPsr4 = array();
+    private $prefixDirsPsr4 = array();
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    private $prefixesPsr0 = array();
+    private $fallbackDirsPsr0 = array();
+
+    private $useIncludePath = false;
+    private $classMap = array();
+
+    private $classMapAuthoritative = false;
+
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
+    }
+
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param array $classMap Class to filename map
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string       $prefix  The prefix
+     * @param array|string $paths   The PSR-0 root directories
+     * @param bool         $prepend Whether to prepend the directories
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
+     * @param array|string $paths   The PSR-0 base directories
+     * @param bool         $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    (array) $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string       $prefix The prefix
+     * @param array|string $paths  The PSR-0 base directories
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return bool|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            includeFile($file);
+
+            return true;
+        }
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+        if ('\\' == $class[0]) {
+            $class = substr($class, 1);
+        }
+
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative) {
+            return false;
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if ($file === null && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if ($file === null) {
+            // Remember that this class does not exist.
+            return $this->classMap[$class] = false;
+        }
+
+        return $file;
+    }
+
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+    }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
+}
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000000000000000000000000000000000000..63b550c324fd93a756ab232540213b8ad94777d3
--- /dev/null
+++ b/vendor/composer/autoload_classmap.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'GeSHi' => $vendorDir . '/easybook/geshi/geshi.php',
+);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000000000000000000000000000000000000..b7fc0125dbca56fd7565ad62097672a59473e64e
--- /dev/null
+++ b/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4d7132708607447bfb335873639567047650451
--- /dev/null
+++ b/vendor/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'splitbrain\\PHPArchive\\' => array($vendorDir . '/splitbrain/php-archive/src'),
+);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
new file mode 100644
index 0000000000000000000000000000000000000000..fee79daed35482810260f06b10635f3ab8cc0ed5
--- /dev/null
+++ b/vendor/composer/autoload_real.php
@@ -0,0 +1,50 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInita19a915ee98347a0c787119619d2ff9b
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        spl_autoload_register(array('ComposerAutoloaderInita19a915ee98347a0c787119619d2ff9b', 'loadClassLoader'), true, true);
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+        spl_autoload_unregister(array('ComposerAutoloaderInita19a915ee98347a0c787119619d2ff9b', 'loadClassLoader'));
+
+        $map = require __DIR__ . '/autoload_namespaces.php';
+        foreach ($map as $namespace => $path) {
+            $loader->set($namespace, $path);
+        }
+
+        $map = require __DIR__ . '/autoload_psr4.php';
+        foreach ($map as $namespace => $path) {
+            $loader->setPsr4($namespace, $path);
+        }
+
+        $classMap = require __DIR__ . '/autoload_classmap.php';
+        if ($classMap) {
+            $loader->addClassMap($classMap);
+        }
+
+        $loader->register(true);
+
+        return $loader;
+    }
+}
+
+function composerRequirea19a915ee98347a0c787119619d2ff9b($file)
+{
+    require $file;
+}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
new file mode 100644
index 0000000000000000000000000000000000000000..0510ac9940a729e4ca07622286973da7fc35a9af
--- /dev/null
+++ b/vendor/composer/installed.json
@@ -0,0 +1,99 @@
+[
+    {
+        "name": "easybook/geshi",
+        "version": "v1.0.8.15",
+        "version_normalized": "1.0.8.15",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/easybook/geshi.git",
+            "reference": "54387de80bc7ee50397ffae39234626a48d2d45f"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/easybook/geshi/zipball/54387de80bc7ee50397ffae39234626a48d2d45f",
+            "reference": "54387de80bc7ee50397ffae39234626a48d2d45f",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">4.3.0"
+        },
+        "time": "2015-06-18 14:56:28",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "./"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "GPL-2.0"
+        ],
+        "authors": [
+            {
+                "name": "Nigel McNie",
+                "email": "nigel@geshi.org"
+            },
+            {
+                "name": "Benny Baumann",
+                "email": "BenBE@geshi.org"
+            }
+        ],
+        "description": "GeSHi - Generic Syntax Highlighter. This is an unmodified port of GeSHi project code found on SourceForge.",
+        "homepage": "http://qbnz.com/highlighter",
+        "keywords": [
+            "highlight",
+            "highlighter",
+            "syntax"
+        ]
+    },
+    {
+        "name": "splitbrain/php-archive",
+        "version": "1.0.7",
+        "version_normalized": "1.0.7.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/splitbrain/php-archive.git",
+            "reference": "c075304b44c4aadff0718af445e86bf730f331ff"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/splitbrain/php-archive/zipball/c075304b44c4aadff0718af445e86bf730f331ff",
+            "reference": "c075304b44c4aadff0718af445e86bf730f331ff",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "4.5.*"
+        },
+        "time": "2015-08-12 13:24:34",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "splitbrain\\PHPArchive\\": "src"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Andreas Gohr",
+                "email": "andi@splitbrain.org"
+            }
+        ],
+        "description": "Pure-PHP implementation to read and write TAR and ZIP archives",
+        "keywords": [
+            "archive",
+            "extract",
+            "tar",
+            "unpack",
+            "unzip",
+            "zip"
+        ]
+    }
+]
diff --git a/vendor/easybook/geshi/README.md b/vendor/easybook/geshi/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0a12d08bbb43574eef288e0442b59b7a77c3d4e8
--- /dev/null
+++ b/vendor/easybook/geshi/README.md
@@ -0,0 +1,10 @@
+# GeSHi - Generic Syntax Highlighter #
+
+This repository has been created just to be able to install GeSHi as a Composer
+package. Technically it's a port of the GeSHi project code found on SourceForge:
+http://sourceforge.net/projects/geshi/
+
+Differences from the official SourceForge repository:
+
+  * 11/may/2014: added `sass.php` file to highlight Sass stylesheets.
+  * 28/sep/2012: added `twig.php` file to highlight Twig templates.
diff --git a/vendor/easybook/geshi/composer.json b/vendor/easybook/geshi/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..33494664cb5c8d23eb2c04d34587694999aa8606
--- /dev/null
+++ b/vendor/easybook/geshi/composer.json
@@ -0,0 +1,24 @@
+{
+    "name": "easybook/geshi",
+    "type": "library",
+    "description": "GeSHi - Generic Syntax Highlighter. This is an unmodified port of GeSHi project code found on SourceForge.",
+    "homepage": "http://qbnz.com/highlighter",
+    "keywords": ["highlighter", "highlight", "syntax"],
+    "license": "GPL-2.0",
+    "authors": [
+        {
+            "name": "Benny Baumann",
+            "email": "BenBE@geshi.org"
+        },
+        {
+            "name": "Nigel McNie",
+            "email": "nigel@geshi.org"
+        }
+    ],
+    "require": {
+        "php": ">4.3.0"
+    }, 
+    "autoload": {
+        "classmap": ["./"]
+    }
+}
\ No newline at end of file
diff --git a/inc/geshi.php b/vendor/easybook/geshi/geshi.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi.php
rename to vendor/easybook/geshi/geshi.php
index c6ff9ef7773b95a40c2d6171a38abeb2f165af54..bd265af97925a12d8e132cf4d631b45577415324
--- a/inc/geshi.php
+++ b/vendor/easybook/geshi/geshi.php
@@ -41,7 +41,7 @@
 //
 
 /** The version of this GeSHi file */
-define('GESHI_VERSION', '1.0.8.11');
+define('GESHI_VERSION', '1.0.8.12');
 
 // Define the root directory for the GeSHi code tree
 if (!defined('GESHI_ROOT')) {
diff --git a/inc/geshi/4cs.php b/vendor/easybook/geshi/geshi/4cs.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/4cs.php
rename to vendor/easybook/geshi/geshi/4cs.php
index 5209c51e8026ea3b0ef107a1f50e92e19cbd9228..e5a00645c1e4934c05c6cb004f84df11e6c34f91
--- a/inc/geshi/4cs.php
+++ b/vendor/easybook/geshi/geshi/4cs.php
@@ -135,5 +135,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
\ No newline at end of file
diff --git a/inc/geshi/6502acme.php b/vendor/easybook/geshi/geshi/6502acme.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/6502acme.php
rename to vendor/easybook/geshi/geshi/6502acme.php
diff --git a/inc/geshi/6502kickass.php b/vendor/easybook/geshi/geshi/6502kickass.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/6502kickass.php
rename to vendor/easybook/geshi/geshi/6502kickass.php
diff --git a/inc/geshi/6502tasm.php b/vendor/easybook/geshi/geshi/6502tasm.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/6502tasm.php
rename to vendor/easybook/geshi/geshi/6502tasm.php
diff --git a/inc/geshi/68000devpac.php b/vendor/easybook/geshi/geshi/68000devpac.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/68000devpac.php
rename to vendor/easybook/geshi/geshi/68000devpac.php
diff --git a/inc/geshi/abap.php b/vendor/easybook/geshi/geshi/abap.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/abap.php
rename to vendor/easybook/geshi/geshi/abap.php
diff --git a/inc/geshi/actionscript.php b/vendor/easybook/geshi/geshi/actionscript.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/actionscript.php
rename to vendor/easybook/geshi/geshi/actionscript.php
diff --git a/inc/geshi/actionscript3.php b/vendor/easybook/geshi/geshi/actionscript3.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/actionscript3.php
rename to vendor/easybook/geshi/geshi/actionscript3.php
diff --git a/inc/geshi/ada.php b/vendor/easybook/geshi/geshi/ada.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/ada.php
rename to vendor/easybook/geshi/geshi/ada.php
diff --git a/vendor/easybook/geshi/geshi/aimms.php b/vendor/easybook/geshi/geshi/aimms.php
new file mode 100644
index 0000000000000000000000000000000000000000..f46bdd0bcd7a3ab71a538bcf49570fa6aed0dde1
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/aimms.php
@@ -0,0 +1,316 @@
+<?php
+/*************************************************************************************
+ * aimms.php
+ * --------
+ * Author: Guido Diepen (guido.diepen@aimms.com)
+ * Copyright: (c) 2011 Guido Diepen (http://www.aimms.com)
+ * Release Version: 1.0.8.12
+ * Date Started: 2011/05/05
+ *
+ * AIMMS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/07/14 (1.0.0)
+ *  -  First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * * Make sure the last few function I may have missed
+ *   (like eval()) are included for highlighting
+ * * Split to several files - php4, php5 etc
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+    'LANG_NAME' => 'AIMMS3',
+    'COMMENT_SINGLE' => array(1 => '!'),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'HARDQUOTE' => array("'", "'"),
+    'HARDESCAPE' => array("'", "\\"),
+    'HARDCHAR' => "\\",
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array('"'),
+    'OBJECT_SPLITTERS' => array(),
+    'REGEXPS' => array(),
+    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+    'SCRIPT_DELIMITERS' => array(),
+    'HIGHLIGHT_STRICT_BLOCK' => array(),
+    'ESCAPE_CHAR' => '',
+    'KEYWORDS' => array(
+        1 => array(
+            'if', 'then', 'else', 'endif', 'elseif', 'for', 'do', 'while' , 'endfor' , 'endwhile', 'break', 'switch', 'endswitch',
+            'display', 'return', 'in', 'apply'
+
+            ),
+        2 => array(
+            'main model' , 'declaration section', 'procedure', 'endprocedure', 'endmodel', 'endsection' , 'set', 'parameter',
+            'string parameter', 'element parameter', 'quantity'
+            ),
+        3 => array(
+            'identifier', 'index', 'index domain', 'body'
+            ),
+        4 => array(
+            'ActiveCard','Card','ConvertUnit','DistributionCumulative','DistributionDensity','DistributionDeviation',
+            'DistributionInverseCumulative','DistributionInverseDensity','DistributionKurtosis','DistributionMean',
+            'DistributionSkewness','DistributionVariance','Element','EvaluateUnit','First','FormatString','Last',
+            'Ord','Unit','Val','Aggregate','AttributeToString','CaseCompareIdentifier','CaseCreateDifferenceFile',
+            'CloseDataSource','CreateTimeTable','ConstraintVariables','ConvertReferenceDate','CloneElement',
+            'FindNthString','FindReplaceNthString','FindReplaceStrings','FindString','StringOccurrences',
+            'CurrentToMoment','CurrentToString','CurrentToTimeSlot','DaylightsavingEndDate','DaylightsavingStartDate',
+            'DeclaredSubset','DomainIndex','IndexRange','IsRunningAsViewer','ListingFileCopy','ListingFileDelete',
+            'DirectoryGetFiles','DirectoryGetSubdirectories','DirectSQL','Disaggregate','ElementCast','ElementRange',
+            'EnvironmentGetString','EnvironmentSetString','errh::Adapt','errh::Attribute','errh::Category',
+            'errh::Code','errh::Column','errh::CreationTime','errh::Filename','errh::InsideCategory',
+            'errh::IsMarkedAsHandled','errh::Line','errh::MarkAsHandled','errh::Message','errh::Multiplicity',
+            'errh::Node','errh::NumberOfLocations','errh::Severity','ExcelAddNewSheet','ExcelAssignParameter',
+            'ExcelAssignSet','ExcelAssignTable','ExcelAssignValue','ExcelClearRange','ExcelCloseWorkbook',
+            'ExcelColumnName','ExcelColumnNumber','ExcelCopyRange','ExcelCreateWorkbook','ExcelDeleteSheet',
+            'ExcelPrint','ExcelRetrieveParameter','ExcelRetrieveSet','ExcelRetrieveTable','ExcelRetrieveValue',
+            'ExcelRunMacro','ExcelSaveWorkbook','ExcelSetActiveSheet','ExcelSetUpdateLinksBehavior',
+            'ExcelSetVisibility','FindUsedElements','GenerateCUT','GMP::Coefficient::Get',
+            'GMP::Coefficient::GetQuadratic','GMP::Coefficient::Set','GMP::Coefficient::SetQuadratic',
+            'GMP::Column::Add','GMP::Column::Delete','GMP::Column::Freeze','GMP::Column::GetLowerbound',
+            'GMP::Column::GetScale','GMP::Column::GetStatus','GMP::Column::GetType','GMP::Column::GetUpperbound',
+            'GMP::Column::SetAsObjective','GMP::Column::SetLowerbound','GMP::Column::SetType',
+            'GMP::Column::SetUpperbound','GMP::Column::Unfreeze','GMP::Instance::AddIntegerEliminationRows',
+            'GMP::Instance::CalculateSubGradient','GMP::Instance::Copy','GMP::Instance::CreateDual',
+            'GMP::Instance::CreateMasterMip','GMP::Instance::CreatePresolved',
+            'GMP::SolverSession::CreateProgressCategory','GMP::Instance::CreateProgressCategory',
+            'GMP::Instance::CreateSolverSession','GMP::Stochastic::CreateBendersRootproblem',
+            'GMP::Instance::Delete','GMP::Instance::DeleteIntegerEliminationRows',
+            'GMP::Instance::DeleteSolverSession','GMP::Instance::FindApproximatelyFeasibleSolution',
+            'GMP::Instance::FixColumns','GMP::Instance::Generate','GMP::Instance::GenerateRobustCounterpart',
+            'GMP::Instance::GenerateStochasticProgram','GMP::SolverSession::GetCallbackInterruptStatus',
+            'GMP::SolverSession::WaitForCompletion','GMP::SolverSession::WaitForSingleCompletion',
+            'GMP::SolverSession::ExecutionStatus','GMP::Instance::GetDirection','GMP::Instance::GetLinearObjective',
+            'GMP::Instance::GetMathematicalProgrammingType','GMP::Instance::GetMemoryUsed',
+            'GMP::Instance::GetNumberOfColumns','GMP::Instance::GetNumberOfIndicatorRows',
+            'GMP::Instance::GetNumberOfIntegerColumns','GMP::Instance::GetNumberOfNonlinearColumns',
+            'GMP::Instance::GetNumberOfNonlinearNonzeros','GMP::Instance::GetNumberOfNonlinearRows',
+            'GMP::Instance::GetNumberOfNonzeros','GMP::Instance::GetNumberOfRows',
+            'GMP::Instance::GetNumberOfSOS1Rows','GMP::Instance::GetNumberOfSOS2Rows',
+            'GMP::Instance::GetObjective','GMP::Instance::GetOptionValue','GMP::Instance::GetSolver',
+            'GMP::Instance::GetSymbolicMathematicalProgram','GMP::Instance::MemoryStatistics',
+            'GMP::Instance::Rename','GMP::Instance::SetCallbackAddCut','GMP::Instance::SetCallbackBranch',
+            'GMP::Instance::SetCallbackHeuristic','GMP::Instance::SetCallbackIncumbent',
+            'GMP::Instance::SetCallbackIterations','GMP::Instance::SetCallbackNewIncumbent',
+            'GMP::Instance::SetCallbackStatusChange','GMP::Instance::SetCutoff','GMP::Instance::SetDirection',
+            'GMP::Instance::SetMathematicalProgrammingType','GMP::Instance::SetSolver','GMP::Instance::Solve',
+            'GMP::Stochastic::GetObjectiveBound','GMP::Stochastic::GetRelativeWeight',
+            'GMP::Stochastic::GetRepresentativeScenario','GMP::Stochastic::UpdateBendersSubproblem',
+            'GMP::Linearization::Add','GMP::Linearization::AddSingle','GMP::Linearization::Delete',
+            'GMP::Linearization::GetDeviation','GMP::Linearization::GetDeviationBound',
+            'GMP::Linearization::GetLagrangeMultiplier','GMP::Linearization::GetType',
+            'GMP::Linearization::GetWeight','GMP::Linearization::RemoveDeviation',
+            'GMP::Linearization::SetDeviationBound','GMP::Linearization::SetType',
+            'GMP::Linearization::SetWeight','GMP::ProgressWindow::DeleteCategory',
+            'GMP::ProgressWindow::DisplayLine','GMP::ProgressWindow::DisplayProgramStatus',
+            'GMP::ProgressWindow::DisplaySolver','GMP::ProgressWindow::DisplaySolverStatus',
+            'GMP::ProgressWindow::FreezeLine','GMP::ProgressWindow::UnfreezeLine',
+            'GMP::QuadraticCoefficient::Get','GMP::QuadraticCoefficient::Set','GMP::Row::Activate',
+            'GMP::Stochastic::AddBendersFeasibilityCut','GMP::Stochastic::AddBendersOptimalityCut',
+            'GMP::Stochastic::BendersFindFeasibilityReference','GMP::Stochastic::MergeSolution',
+            'GMP::Row::Add','GMP::Row::Deactivate','GMP::Row::Delete','GMP::Row::DeleteIndicatorCondition',
+            'GMP::Row::Generate','GMP::Row::GetConvex','GMP::Row::GetIndicatorColumn',
+            'GMP::Row::GetIndicatorCondition','GMP::Row::GetLeftHandSide','GMP::Row::GetRelaxationOnly',
+            'GMP::Row::GetRightHandSide','GMP::Row::GetScale','GMP::Row::GetStatus','GMP::Row::GetType',
+            'GMP::Row::SetConvex','GMP::Row::SetIndicatorCondition','GMP::Row::SetLeftHandSide',
+            'GMP::Row::SetRelaxationOnly','GMP::Row::SetRightHandSide','GMP::Row::SetType',
+            'GMP::Solution::Check','GMP::Solution::Copy','GMP::Solution::Count','GMP::Solution::Delete',
+            'GMP::Solution::DeleteAll','GMP::Solution::GetColumnValue','GMP::Solution::GetCPUSecondsUsed',
+            'GMP::Solution::GetDistance','GMP::Solution::GetFirstOrderDerivative',
+            'GMP::Solution::GetIterationsUsed','GMP::Solution::GetNodesUsed','GMP::Solution::GetLinearObjective',
+            'GMP::Solution::GetMemoryUsed','GMP::Solution::GetObjective','GMP::Solution::GetPenalizedObjective',
+            'GMP::Solution::GetProgramStatus','GMP::Solution::GetRowValue','GMP::Solution::GetSolutionsSet',
+            'GMP::Solution::GetSolverStatus','GMP::Solution::IsDualDegenerated','GMP::Solution::IsInteger',
+            'GMP::Solution::IsPrimalDegenerated','GMP::Solution::SetMIPStartFlag','GMP::Solution::Move',
+            'GMP::Solution::RandomlyGenerate','GMP::Solution::RetrieveFromModel',
+            'GMP::Solution::RetrieveFromSolverSession','GMP::Solution::SendToModel',
+            'GMP::Solution::SendToModelSelection','GMP::Solution::SendToSolverSession',
+            'GMP::Solution::SetIterationCount','GMP::Solution::SetProgramStatus','GMP::Solution::SetSolverStatus',
+            'GMP::Solution::UpdatePenaltyWeights','GMP::Solution::ConstructMean',
+            'GMP::SolverSession::AsynchronousExecute','GMP::SolverSession::Execute',
+            'GMP::SolverSession::Interrupt','GMP::SolverSession::AddLinearization',
+            'GMP::SolverSession::GenerateBranchLowerBound','GMP::SolverSession::GenerateBranchUpperBound',
+            'GMP::SolverSession::GenerateBranchRow','GMP::SolverSession::GenerateCut',
+            'GMP::SolverSession::GenerateBinaryEliminationRow','GMP::SolverSession::GetCPUSecondsUsed',
+            'GMP::SolverSession::GetHost','GMP::SolverSession::GetInstance',
+            'GMP::SolverSession::GetIterationsUsed','GMP::SolverSession::GetNodesLeft',
+            'GMP::SolverSession::GetNodesUsed','GMP::SolverSession::GetNodeNumber',
+            'GMP::SolverSession::GetNodeObjective','GMP::SolverSession::GetNumberOfBranchNodes',
+            'GMP::SolverSession::GetLinearObjective','GMP::SolverSession::GetMemoryUsed',
+            'GMP::SolverSession::GetObjective','GMP::SolverSession::GetOptionValue',
+            'GMP::SolverSession::GetProgramStatus','GMP::SolverSession::GetSolver',
+            'GMP::SolverSession::GetSolverStatus','GMP::SolverSession::RejectIncumbent',
+            'GMP::Event::Create','GMP::Event::Delete','GMP::Event::Reset','GMP::Event::Set',
+            'GMP::SolverSession::SetObjective','GMP::SolverSession::SetOptionValue',
+            'GMP::Instance::SetCPUSecondsLimit','GMP::Instance::SetIterationLimit',
+            'GMP::Instance::SetMemoryLimit','GMP::Instance::SetOptionValue','GMP::Tuning::SolveSingleMPS',
+            'GMP::Tuning::TuneMultipleMPS','GMP::Tuning::TuneSingleGMP',
+            'GMP::Solver::GetAsynchronousSessionsLimit','GMP::Robust::EvaluateAdjustableVariables',
+            'GenerateXML','GetDatasourceProperty','ReadGeneratedXML','ReadXML','ReferencedIdentifiers',
+            'WriteXML','IdentifierAttributes','IdentifierDimension','IsRuntimeIdentifier','IdentifierMemory',
+            'IdentifierMemoryStatistics','IdentifierText','IdentifierType','IdentifierUnit','ScalarValue',
+            'SectionIdentifiers','SubRange','MemoryInUse','CommitTransaction','RollbackTransaction',
+            'MemoryStatistics','me::AllowedAttribute','me::ChangeType','me::ChangeTypeAllowed','me::Children',
+            'me::ChildTypeAllowed','me::Compile','me::Create','me::CreateLibrary','me::Delete','me::ExportNode',
+            'me::GetAttribute','me::ImportLibrary','me::ImportNode','me::IsRunnable','me::Move','me::Parent',
+            'me::Rename','me::SetAttribute','MomentToString','MomentToTimeSlot','OptionGetValue',
+            'OptionGetKeywords','OptionGetString','OptionSetString','OptionSetValue','PeriodToString',
+            'ProfilerContinue','ProfilerPause','ProfilerRestart','RestoreInactiveElements',
+            'RetrieveCurrentVariableValues','SetAddRecursive','SetElementAdd','SetElementRename',
+            'SQLColumnData','SQLCreateConnectionString','SQLDriverName','SQLNumberOfColumns',
+            'SQLNumberOfDrivers','SQLNumberOfTables','SQLNumberOfViews','SQLTableName','SQLViewName',
+            'StartTransaction','StringToElement','StringToMoment','StringToTimeSlot','TestDatabaseColumn',
+            'TestDatabaseTable','TestDataSource','TestDate','TimeslotCharacteristic','TimeslotToMoment',
+            'TimeslotToString','TimeZoneOffset','VariableConstraints','PageOpen','PageOpenSingle','PageClose',
+            'PageGetActive','PageSetFocus','PageGetFocus','PageSetCursor','PageRefreshAll','PageGetChild',
+            'PageGetParent','PageGetNext','PageGetPrevious','PageGetNextInTreeWalk','PageGetUsedIdentifiers',
+            'PageGetTitle','PageGetAll','PageCopyTableToClipboard','PageCopyTableToExcel','PrintPage',
+            'PrintPageCount','PrintStartReport','PrintEndReport','PivotTableReloadState','PivotTableSaveState',
+            'PivotTableDeleteState','FileSelect','FileSelectNew','FileDelete','FileExists','FileCopy',
+            'FileMove','FileView','FileEdit','FilePrint','FileTime','FileTouch','FileAppend','FileGetSize',
+            'DirectorySelect','DirectoryCreate','DirectoryDelete','DirectoryExists','DirectoryCopy',
+            'DirectoryMove','DirectoryGetCurrent','DialogProgress','DialogMessage','DialogError',
+            'StatusMessage','DialogAsk','DialogGetString','DialogGetDate','DialogGetNumber','DialogGetElement',
+            'DialogGetElementByText','DialogGetElementByData','DialogGetPassword','DialogGetColor','CaseNew',
+            'CaseFind','CaseCreate','CaseLoadCurrent','CaseMerge','CaseLoadIntoCurrent','CaseSelect',
+            'CaseSelectNew','CaseSetCurrent','CaseSave','CaseSaveAll','CaseSaveAs','CaseSelectMultiple',
+            'CaseGetChangedStatus','CaseSetChangedStatus','CaseDelete','CaseGetType','CaseGetDatasetReference',
+            'CaseWriteToSingleFile','CaseReadFromSingleFile','DatasetNew','DatasetFind','DatasetCreate',
+            'DatasetLoadCurrent','DatasetMerge','DatasetLoadIntoCurrent','DatasetSelect','DatasetSelectNew',
+            'DatasetSetCurrent','DatasetSave','DatasetSaveAll','DatasetSaveAs','DatasetGetChangedStatus',
+            'DatasetSetChangedStatus','DatasetDelete','DatasetGetCategory','DataFileGetName',
+            'DataFileGetAcronym','DataFileSetAcronym','DataFileGetComment','DataFileSetComment',
+            'DataFileGetPath','DataFileGetTime','DataFileGetOwner','DataFileGetGroup','DataFileReadPermitted',
+            'DataFileWritePermitted','DataFileExists','DataFileCopy','DataCategoryContents','CaseTypeContents',
+            'CaseTypeCategories','Execute','OpenDocument','TestInternetConnection','GeoFindCoordinates',
+            'ShowHelpTopic','Delay','ScheduleAt','ExitAimms','SessionArgument','SessionHasVisibleGUI',
+            'ProjectDeveloperMode','DebuggerBreakpoint','ShowProgressWindow','ShowMessageWindow',
+            'SolverGetControl','SolverReleaseControl','ProfilerStart','DataManagerImport','DataManagerExport',
+            'DataManagerFileNew','DataManagerFileOpen','DataManagerFileGetCurrent','DataImport220',
+            'SecurityGetUsers','SecurityGetGroups','UserColorAdd','UserColorDelete','UserColorGetRGB',
+            'UserColorModify','LicenseNumber','LicenseType','LicenseStartDate','LicenseExpirationDate',
+            'LicenseMaintenanceExpirationDate','VARLicenseExpirationDate','AimmsRevisionString',
+            'VARLicenseCreate','HistogramCreate','HistogramDelete','HistogramSetDomain',
+            'HistogramAddObservation','HistogramGetFrequencies','HistogramGetBounds',
+            'HistogramGetObservationCount','HistogramGetAverage','HistogramGetDeviation',
+            'HistogramGetSkewness','HistogramGetKurtosis','DateDifferenceDays','DateDifferenceYearFraction',
+            'PriceFractional','PriceDecimal','RateEffective','RateNominal','DepreciationLinearLife',
+            'DepreciationLinearRate','DepreciationNonLinearSumOfYear','DepreciationNonLinearLife',
+            'DepreciationNonLinearFactor','DepreciationNonLinearRate','DepreciationSum',
+            'InvestmentConstantPresentValue','InvestmentConstantFutureValue',
+            'InvestmentConstantPeriodicPayment','InvestmentConstantInterestPayment',
+            'InvestmentConstantPrincipalPayment','InvestmentConstantCumulativePrincipalPayment',
+            'InvestmentConstantCumulativeInterestPayment','InvestmentConstantNumberPeriods',
+            'InvestmentConstantRateAll','InvestmentConstantRate','InvestmentVariablePresentValue',
+            'InvestmentVariablePresentValueInperiodic','InvestmentSingleFutureValue',
+            'InvestmentVariableInternalRateReturnAll','InvestmentVariableInternalRateReturn',
+            'InvestmentVariableInternalRateReturnInperiodicAll','InvestmentVariableInternalRateReturnInperiodic',
+            'InvestmentVariableInternalRateReturnModified','SecurityDiscountedPrice',
+            'SecurityDiscountedRedemption','SecurityDiscountedYield','SecurityDiscountedRate',
+            'TreasuryBillPrice','TreasuryBillYield','TreasuryBillBondEquivalent','SecurityMaturityPrice',
+            'SecurityMaturityCouponRate','SecurityMaturityYield','SecurityMaturityAccruedInterest',
+            'SecurityCouponNumber','SecurityCouponPreviousDate','SecurityCouponNextDate','SecurityCouponDays',
+            'SecurityCouponDaysPreSettlement','SecurityCouponDaysPostSettlement','SecurityPeriodicPrice',
+            'SecurityPeriodicRedemption','SecurityPeriodicCouponRate','SecurityPeriodicYieldAll',
+            'SecurityPeriodicYield','SecurityPeriodicAccruedInterest','SecurityPeriodicDuration',
+            'SecurityPeriodicDurationModified','Abs','AtomicUnit','Ceil','Character','CharacterNumber','Cube',
+            'Degrees','Div','Exp','FileRead','Floor','Log','Log10','Mapval','Max','Min','Mod','Power',
+            'Radians','Round','Sign','Sqr','Sqrt','StringCapitalize','StringLength','StringToLower',
+            'StringToUnit','StringToUpper','SubString','Trunc','Binomial','NegativeBinomial','Poisson',
+            'Geometric','HyperGeometric','Uniform','Normal','LogNormal','Triangular','Exponential','Weibull',
+            'Beta','Gamma','Logistic','Pareto','ExtremeValue','Precision','Factorial','Combination',
+            'Permutation','Errorf','Cos','Sin','Tan','ArcCos','ArcSin','ArcTan','Cosh','Sinh','Tanh',
+            'ArcCosh','ArcSinh','ArcTanh'
+            )
+        ),
+    'SYMBOLS' => array(
+        0 => array(
+            '(', ')', '[', ']', '{', '}',
+            '%', '&', '|', '/',
+            '<', '>', '>=' , '<=', ':=',
+            '=', '-', '+', '*',
+            '.', ','
+            )
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #0000FF;',
+            2 => 'color: #000000; font-weight: bold;',
+            3 => 'color: #404040;',
+            4 => 'color: #990000; font-weight: bold;'
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #009900;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #808080; font-style: italic ',
+            'HARD' => 'color: #808080; font-style: italic'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #cc66cc;',
+            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #008000; font-style: italic;',
+            'MULTI' => 'color: #008000; font-style: italic;'
+            ),
+
+        'METHODS' => array(
+            1 => 'color: #004000;',
+            2 => 'color: #004000;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #339933;',
+            1 => 'color: #000000; font-weight: bold;'
+            ),
+        'REGEXPS' => array(
+            ),
+        'SCRIPT' => array(
+            0 => '',
+            1 => '',
+            2 => '',
+            3 => '',
+            4 => '',
+            5 => ''
+            ),
+        'ESCAPE_CHAR' => array()
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => ''
+        ),
+    'OOLANG' => false,
+    'TAB_WIDTH' => 4
+);
diff --git a/inc/geshi/algol68.php b/vendor/easybook/geshi/geshi/algol68.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/algol68.php
rename to vendor/easybook/geshi/geshi/algol68.php
diff --git a/inc/geshi/apache.php b/vendor/easybook/geshi/geshi/apache.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/apache.php
rename to vendor/easybook/geshi/geshi/apache.php
diff --git a/inc/geshi/applescript.php b/vendor/easybook/geshi/geshi/applescript.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/applescript.php
rename to vendor/easybook/geshi/geshi/applescript.php
diff --git a/inc/geshi/apt_sources.php b/vendor/easybook/geshi/geshi/apt_sources.php
old mode 100644
new mode 100755
similarity index 86%
rename from inc/geshi/apt_sources.php
rename to vendor/easybook/geshi/geshi/apt_sources.php
index 9f1ed045e15a54ebf8fc2a79b03c8b81d8b4322a..979d10ce9ccb8b66502d094ae464820564e09520
--- a/inc/geshi/apt_sources.php
+++ b/vendor/easybook/geshi/geshi/apt_sources.php
@@ -55,7 +55,7 @@ $language_data = array (
             'stable/updates',
             //Debian
             'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato', 'woody', 'sarge',
-            'etch', 'lenny', 'wheezy', 'sid',
+            'etch', 'lenny', 'wheezy', 'jessie', 'sid',
             //Ubuntu
             'warty', 'warty-updates', 'warty-security', 'warty-proposed', 'warty-backports',
             'hoary', 'hoary-updates', 'hoary-security', 'hoary-proposed', 'hoary-backports',
@@ -69,7 +69,14 @@ $language_data = array (
             'jaunty', 'jaunty-updates', 'jaunty-security', 'jaunty-proposed', 'jaunty-backports',
             'karmic', 'karmic-updates', 'karmic-security', 'karmic-proposed', 'karmic-backports',
             'lucid', 'lucid-updates', 'lucid-security', 'lucid-proposed', 'lucid-backports',
-            'maverick', 'maverick-updates', 'maverick-security', 'maverick-proposed', 'maverick-backports'
+            'maverick', 'maverick-updates', 'maverick-security', 'maverick-proposed', 'maverick-backports',
+            'natty', 'natty-updates', 'natty-security', 'natty-proposed', 'natty-backports',
+            'oneiric', 'oneiric-updates', 'oneiric-security', 'oneiric-proposed', 'oneiric-backports',
+            'precise', 'precise-updates', 'precise-security', 'precise-proposed', 'precise-backports',
+            'quantal', 'quantal-updates', 'quantal-security', 'quantal-proposed', 'quantal-backports',
+            'raring', 'raring-updates', 'raring-security', 'raring-proposed', 'raring-backports',
+            'saucy', 'saucy-updates', 'saucy-security', 'saucy-proposed', 'saucy-backports',
+            'trusty', 'trusty-updates', 'trusty-security', 'trusty-proposed', 'trusty-backports'
             ),
         3 => array(
             'main', 'restricted', 'preview', 'contrib', 'non-free',
diff --git a/inc/geshi/arm.php b/vendor/easybook/geshi/geshi/arm.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/arm.php
rename to vendor/easybook/geshi/geshi/arm.php
diff --git a/inc/geshi/asm.php b/vendor/easybook/geshi/geshi/asm.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/asm.php
rename to vendor/easybook/geshi/geshi/asm.php
diff --git a/inc/geshi/asp.php b/vendor/easybook/geshi/geshi/asp.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/asp.php
rename to vendor/easybook/geshi/geshi/asp.php
diff --git a/inc/geshi/asymptote.php b/vendor/easybook/geshi/geshi/asymptote.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/asymptote.php
rename to vendor/easybook/geshi/geshi/asymptote.php
index 8683588e5f22949b8057245a20cded70510fea81..295cb0a568ec18a17c605d00349388e404dd2269
--- a/inc/geshi/asymptote.php
+++ b/vendor/easybook/geshi/geshi/asymptote.php
@@ -190,5 +190,3 @@ $language_data = array(
             )
         )
 );
-
-?>
diff --git a/inc/geshi/autoconf.php b/vendor/easybook/geshi/geshi/autoconf.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/autoconf.php
rename to vendor/easybook/geshi/geshi/autoconf.php
diff --git a/inc/geshi/autohotkey.php b/vendor/easybook/geshi/geshi/autohotkey.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/autohotkey.php
rename to vendor/easybook/geshi/geshi/autohotkey.php
diff --git a/inc/geshi/autoit.php b/vendor/easybook/geshi/geshi/autoit.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/autoit.php
rename to vendor/easybook/geshi/geshi/autoit.php
diff --git a/inc/geshi/avisynth.php b/vendor/easybook/geshi/geshi/avisynth.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/avisynth.php
rename to vendor/easybook/geshi/geshi/avisynth.php
diff --git a/inc/geshi/awk.php b/vendor/easybook/geshi/geshi/awk.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/awk.php
rename to vendor/easybook/geshi/geshi/awk.php
index 1ec239b70c853e991cbfe30801a728f64b46dbd9..46fe49f8780f4b18c0b4b7357d660fad7edae714
--- a/inc/geshi/awk.php
+++ b/vendor/easybook/geshi/geshi/awk.php
@@ -154,5 +154,3 @@ $language_data = array (
     'SCRIPT_DELIMITERS' => array (),
     'HIGHLIGHT_STRICT_BLOCK' => array()
 );
-
-?>
diff --git a/inc/geshi/bascomavr.php b/vendor/easybook/geshi/geshi/bascomavr.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/bascomavr.php
rename to vendor/easybook/geshi/geshi/bascomavr.php
diff --git a/inc/geshi/bash.php b/vendor/easybook/geshi/geshi/bash.php
old mode 100644
new mode 100755
similarity index 88%
rename from inc/geshi/bash.php
rename to vendor/easybook/geshi/geshi/bash.php
index c69f0054fc6e7991be83bba5b0ea788ab0bef780..eba70028b0bc025511a0d50c6f2d7027151857ab
--- a/inc/geshi/bash.php
+++ b/vendor/easybook/geshi/geshi/bash.php
@@ -132,7 +132,16 @@ $language_data = array (
             'apt-src remove', 'apt-src update', 'apt-src upgrade',
             'apt-src version',
 
-            'basename', 'bash', 'bc', 'bison', 'bunzip2', 'bzcat',
+            'aptitude autoclean', 'aptitude build-dep', 'aptitude changelog',
+            'aptitude clean', 'aptitude download', 'aptitude forbid-version',
+            'aptitude forget-new', 'aptitude full-upgrade', 'aptitude hold',
+            'aptitude install', 'aptitude markauto', 'aptitude purge',
+            'aptitude reinstall', 'aptitude remove', 'aptitude safe-upgrade',
+            'aptitude search', 'aptitude show', 'aptitude unhold',
+            'aptitude unmarkauto', 'aptitude update', 'aptitude versions',
+            'aptitude why', 'aptitude why-not',
+
+            'basename', 'bash', 'batctl', 'bc', 'bison', 'bunzip2', 'bzcat',
             'bzcmp', 'bzdiff', 'bzegrep', 'bzfgrep', 'bzgrep',
             'bzip2', 'bzip2recover', 'bzless', 'bzmore',
 
@@ -247,14 +256,14 @@ $language_data = array (
             'git-web--browse', 'git-whatchanged', 'gitwhich', 'gitwipe',
             'git-write-tree', 'gitxgrep',
 
-            'head', 'hexdump', 'hostname',
+            'head', 'hexdump', 'hostname', 'htop',
 
             'id', 'ifconfig', 'ifdown', 'ifup', 'igawk', 'install',
 
             'ip', 'ip addr', 'ip addrlabel', 'ip link', 'ip maddr', 'ip mroute',
             'ip neigh', 'ip route', 'ip rule', 'ip tunnel', 'ip xfrm',
 
-            'join',
+            'jar', 'java', 'javac', 'join',
 
             'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall',
 
@@ -271,10 +280,11 @@ $language_data = array (
 
             'od', 'openvt',
 
-            'passwd', 'patch', 'pcregrep', 'pcretest', 'perl', 'perror',
-            'pgawk', 'pidof', 'ping', 'pr', 'procmail', 'prune', 'ps', 'pstree',
-            'ps2ascii', 'ps2epsi', 'ps2frag', 'ps2pdf', 'ps2ps', 'psbook',
-            'psmerge', 'psnup', 'psresize', 'psselect', 'pstops',
+            'passwd', 'patch', 'pbzip2', 'pcregrep', 'pcretest', 'perl',
+            'perror', 'pgawk', 'pidof', 'pigz', 'ping', 'pr', 'procmail',
+            'prune', 'ps', 'pstree', 'ps2ascii', 'ps2epsi', 'ps2frag',
+            'ps2pdf', 'ps2ps', 'psbook', 'psmerge', 'psnup', 'psresize',
+            'psselect', 'pstops',
 
             'rbash', 'rcs', 'rcs2log', 'read', 'readlink', 'red', 'resizecons',
             'rev', 'rm', 'rmdir', 'rsh', 'run-parts',
@@ -283,7 +293,7 @@ $language_data = array (
             'setkeycodes', 'setleds', 'setmetamode', 'setserial', 'setterm',
             'sh', 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep',
             'slogin', 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add',
-            'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'stat', 'strace',
+            'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'sshfs', 'stat', 'strace',
             'strings', 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'svn',
             'svnadmin', 'svndumpfilter', 'svnlook', 'svnmerge', 'svnmucc',
             'svnserve', 'svnshell', 'svnsync', 'svnversion', 'svnwrap', 'sync',
@@ -291,16 +301,40 @@ $language_data = array (
             'svn add', 'svn ann', 'svn annotate', 'svn blame', 'svn cat',
             'svn changelist', 'svn checkout', 'svn ci', 'svn cl', 'svn cleanup',
             'svn co', 'svn commit', 'svn copy', 'svn cp', 'svn del',
-            'svn delete', 'svn di', 'svn diff', 'svn export', 'svn h',
-            'svn help', 'svn import', 'svn info', 'svn list', 'svn lock',
-            'svn log', 'svn ls', 'svn merge', 'svn mergeinfo', 'svn mkdir',
-            'svn move', 'svn mv', 'svn pd', 'svn pdel', 'svn pe', 'svn pedit',
+            'svn delete', 'svn di', 'svn diff', 'svn export', 'svn help',
+            'svn import', 'svn info', 'svn list', 'svn lock', 'svn log',
+            'svn ls', 'svn merge', 'svn mergeinfo', 'svn mkdir', 'svn move',
+            'svn mv', 'svn patch', 'svn pd', 'svn pdel', 'svn pe', 'svn pedit',
             'svn pg', 'svn pget', 'svn pl', 'svn plist', 'svn praise',
             'svn propdel', 'svn propedit', 'svn propget', 'svn proplist',
-            'svn propset', 'svn ps', 'svn pset', 'svn remove', 'svn ren',
+            'svn propset', 'svn ps', 'svn pset', 'svn relocate', 'svn remove',
             'svn rename', 'svn resolve', 'svn resolved', 'svn revert', 'svn rm',
             'svn st', 'svn stat', 'svn status', 'svn sw', 'svn switch',
-            'svn unlock', 'svn up', 'svn update',
+            'svn unlock', 'svn up', 'svn update', 'svn upgrade',
+
+            'svnadmin crashtest', 'svnadmin create', 'svnadmin deltify',
+            'svnadmin dump', 'svnadmin help', 'svnadmin hotcopy',
+            'svnadmin list-dblogs', 'svnadmin list-unused-dblogs',
+            'svnadmin load', 'svnadmin lslocks', 'svnadmin lstxns',
+            'svnadmin pack', 'svnadmin recover', 'svnadmin rmlocks',
+            'svnadmin rmtxns', 'svnadmin setlog', 'svnadmin setrevprop',
+            'svnadmin setuuid', 'svnadmin upgrade', 'svnadmin verify',
+
+            'svndumpfilter exclude', 'svndumpfilter help',
+            'svndumpfilter include',
+
+            'svnlook author', 'svnlook cat', 'svnlook changed', 'svnlook date',
+            'svnlook diff', 'svnlook dirs-changed', 'svnlook filesize',
+            'svnlook help', 'svnlook history', 'svnlook info', 'svnlook lock',
+            'svnlook log', 'svnlook pg', 'svnlook pget', 'svnlook pl',
+            'svnlook plist', 'svnlook propget', 'svnlook proplist',
+            'svnlook tree', 'svnlook uuid', 'svnlook youngest',
+
+            'svnrdump dump', 'svnrdump help', 'svnrdump load',
+
+            'svnsync copy-revprops', 'svnsync help', 'svnsync info',
+            'svnsync init', 'svnsync initialize', 'svnsync sync',
+            'svnsync synchronize',
 
             'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'tree',
             'true',
diff --git a/inc/geshi/basic4gl.php b/vendor/easybook/geshi/geshi/basic4gl.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/basic4gl.php
rename to vendor/easybook/geshi/geshi/basic4gl.php
index 35c927406de0339c18d36742444c337883c3ff24..112fb6967ca61a24e83511825a497a6da14ec4e8
--- a/inc/geshi/basic4gl.php
+++ b/vendor/easybook/geshi/geshi/basic4gl.php
@@ -337,5 +337,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/vendor/easybook/geshi/geshi/batch.php b/vendor/easybook/geshi/geshi/batch.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d1ca635ba7d744bdaaa161bde4f3c7b195a118c
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/batch.php
@@ -0,0 +1,138 @@
+<?php
+/*************************************************************************************
+ * batch.php
+ * ------------
+ * Author: FraidZZ ( fraidzz [@] bk.ru )
+ * Copyright: (c) 2015 FraidZZ ( http://vk.com/fraidzz , http://www.cyberforum.ru/members/340557.html )
+ * Release Version: 1.0.8.11
+ * Date Started: 2015/03/28
+ *
+ * Windows batch file language file for GeSHi.
+ *
+ *************************************************************************************
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'Windows Batch file',
+    'COMMENT_SINGLE' => array(),
+    'COMMENT_MULTI' => array(),
+	'COMMENT_REGEXP' => array(
+		100 => '/(?:^|[&|])\\s*(?:rem|::)[^\\n]*/msi',
+		101 => '/[\\/-]\\S*/si',
+		102 => '/^\s*:[^:]\\S*/msi',
+		103 => '/(?:([%!])[^"\'~ ][^"\' ]*\\1|%%?(?:~[dpnxsatz]*)?[^"\'])/si'
+	),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+	'ESCAPE_REGEXP' => array(
+		100 => '/(?:([%!])\\S+\\1|%%(?:~[dpnxsatz]*)?[^"\'])/si'
+	),
+    'KEYWORDS' => array(
+        1 => array(
+            'echo', 'set', 'for', 'if', 'exit', 'else', 'do', 'not', 'defined', 'exist'
+            ),
+        2 => array(
+            "ASSOC", "ATTRIB", "BREAK", "BCDEDIT", "CACLS", "CD",
+			"CHCP", "CHDIR", "CHKDSK", "CHKNTFS", "CLS", "CMD", "COLOR",
+			"COMP", "COMPACT", "CONVERT", "COPY", "DATE", "DEL", "DIR",
+			"DISKCOMP", "DISKCOPY", "DISKPART", "DOSKEY", "DRIVERQUERY", "ECHO", "ENDLOCAL",
+			"ERASE", "EXIT", "FC", "FIND", "FINDSTR", "FOR", "FORMAT",
+			"FSUTIL", "FTYPE", "GPRESULT", "GRAFTABL", "HELP", "ICACLS",
+			"IF", "LABEL", "MD", "MKDIR", "MKLINK", "MODE", "MORE",
+			"MOVE", "OPENFILES", "PATH", "PAUSE", "POPD", "PRINT", "PROMPT",
+			"PUSHD", "RD", "RECOVER", "REN", "RENAME", "REPLACE", "RMDIR",
+			"ROBOCOPY", "SET", "SETLOCAL", "SC", "SCHTASKS", "SHIFT", "SHUTDOWN",
+			"SORT", "START", "SUBST", "SYSTEMINFO", "TASKLIST", "TASKKILL", "TIME",
+			"TITLE", "TREE", "TYPE", "VER", "VERIFY", "VOL", "XCOPY",
+			"WMIC", "CSCRIPT"
+            ),
+        3 => array(
+            "enabledelayedexpansion", "enableextensions"
+            )
+        ),
+    'SYMBOLS' => array(
+        '(', ')', '+', '-', '~', '^', '@', '&', '*', '|', '/', '<', '>'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false,
+        5 => false
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #800080; font-weight: bold;',
+            2 => 'color: #0080FF; font-weight: bold;',
+            3 => 'color: #0000FF; font-weight: bold;'
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #888888;',
+            2 => 'color: #FF1010; font-weight: bold;',
+			101 => 'color: #44aa44; font-weight: bold;',
+			100 => 'color: #888888;',
+			102 => 'color: #990000; font-weight: bold;',
+			103 => 'color: #000099; font-weight: bold;',
+            'MULTI' => 'color: #808080; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            100 => 'color: #000099; font-weight: bold;'
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #66cc66; font-weight: bold;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #ff0000;', 
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #cc66cc;'
+            ),
+        'METHODS' => array(
+            0 => 'color: #006600;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #44aa44; font-weight: bold;'
+            ),
+        'REGEXPS' => array(
+            0 => 'color: #990000; font-weight: bold',
+			1 => 'color: #800080; font-weight: bold;'
+            ),
+        'SCRIPT' => array(
+            )
+        ),
+    'URLS' => array(),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(),
+    'REGEXPS' => array(
+        0 => array(
+				GESHI_SEARCH => "((?:goto|call)\\s*)(\\S+)",
+				GESHI_REPLACE => "\\2",
+				GESHI_BEFORE => "\\1",
+				GESHI_MODIFIERS => "si",
+				GESHI_AFTER => ""
+			) ,
+		1 => "goto|call"
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        )
+);
diff --git a/inc/geshi/bf.php b/vendor/easybook/geshi/geshi/bf.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/bf.php
rename to vendor/easybook/geshi/geshi/bf.php
diff --git a/inc/geshi/bibtex.php b/vendor/easybook/geshi/geshi/bibtex.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/bibtex.php
rename to vendor/easybook/geshi/geshi/bibtex.php
diff --git a/inc/geshi/blitzbasic.php b/vendor/easybook/geshi/geshi/blitzbasic.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/blitzbasic.php
rename to vendor/easybook/geshi/geshi/blitzbasic.php
index 1d3c08d05e8d44d362173cd338ef31e533656927..c90f45bfa958ac5fc92fde27cd532098a013cc7b
--- a/inc/geshi/blitzbasic.php
+++ b/vendor/easybook/geshi/geshi/blitzbasic.php
@@ -181,5 +181,3 @@ $language_data = array (
         1 => false
         )
 );
-
-?>
diff --git a/inc/geshi/bnf.php b/vendor/easybook/geshi/geshi/bnf.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/bnf.php
rename to vendor/easybook/geshi/geshi/bnf.php
diff --git a/inc/geshi/boo.php b/vendor/easybook/geshi/geshi/boo.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/boo.php
rename to vendor/easybook/geshi/geshi/boo.php
index b68d442f7bed6935a96f279089ee2c107f5b4b97..15944f42a0a3faa153856922d27596400fb92d83
--- a/inc/geshi/boo.php
+++ b/vendor/easybook/geshi/geshi/boo.php
@@ -213,5 +213,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/c.php b/vendor/easybook/geshi/geshi/c.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/c.php
rename to vendor/easybook/geshi/geshi/c.php
diff --git a/inc/geshi/c_loadrunner.php b/vendor/easybook/geshi/geshi/c_loadrunner.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/c_loadrunner.php
rename to vendor/easybook/geshi/geshi/c_loadrunner.php
diff --git a/inc/geshi/c_mac.php b/vendor/easybook/geshi/geshi/c_mac.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/c_mac.php
rename to vendor/easybook/geshi/geshi/c_mac.php
diff --git a/vendor/easybook/geshi/geshi/c_winapi.php b/vendor/easybook/geshi/geshi/c_winapi.php
new file mode 100644
index 0000000000000000000000000000000000000000..1252e7b92bbaff2272325967133ff8f9ed9f613a
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/c_winapi.php
@@ -0,0 +1,870 @@
+<?php
+/*************************************************************************************
+ * c_winapi.php
+ * -----
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Contributors:
+ *  - Jack Lloyd (lloyd@randombit.net)
+ *  - Michael Mol (mikemol@gmail.com)
+ * Copyright: (c) 2012 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.11
+ * Date Started: 2012/08/12
+ *
+ * C (WinAPI) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2009/01/22 (1.0.8.3)
+ *   -  Made keywords case-sensitive.
+ * 2008/05/23 (1.0.7.22)
+ *   -  Added description of extra language features (SF#1970248)
+ * 2004/XX/XX (1.0.4)
+ *   -  Added a couple of new keywords (Jack Lloyd)
+ * 2004/11/27 (1.0.3)
+ *   -  Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ *   -  Added support for URLs
+ * 2004/08/05 (1.0.1)
+ *   -  Added support for symbols
+ * 2004/07/14 (1.0.0)
+ *   -  First Release
+ *
+ * TODO (updated 2009/02/08)
+ * -------------------------
+ *  -  Get a list of inbuilt functions to add (and explore C more
+ *     to complete this rather bare language file
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'C (WinAPI)',
+    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'COMMENT_REGEXP' => array(
+        //Multiline-continued single-line comments
+        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+        //Multiline-continued preprocessor define
+        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+        ),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'ESCAPE_REGEXP' => array(
+        //Simple Single Char Escapes
+        1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+        //Hexadecimal Char Specs
+        2 => "#\\\\x[\da-fA-F]{2}#",
+        //Hexadecimal Char Specs
+        3 => "#\\\\u[\da-fA-F]{4}#",
+        //Hexadecimal Char Specs
+        4 => "#\\\\U[\da-fA-F]{8}#",
+        //Octal Char Specs
+        5 => "#\\\\[0-7]{1,3}#"
+        ),
+    'NUMBERS' =>
+        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+    'KEYWORDS' => array(
+        1 => array(
+            'if', 'return', 'while', 'case', 'continue', 'default',
+            'do', 'else', 'for', 'switch', 'goto'
+            ),
+        2 => array(
+            'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline'
+            ),
+        3 => array(
+            // assert.h
+            'assert',
+
+            //complex.h
+            'cabs', 'cacos', 'cacosh', 'carg', 'casin', 'casinh', 'catan',
+            'catanh', 'ccos', 'ccosh', 'cexp', 'cimag', 'cis', 'clog', 'conj',
+            'cpow', 'cproj', 'creal', 'csin', 'csinh', 'csqrt', 'ctan', 'ctanh',
+
+            //ctype.h
+            'digittoint', 'isalnum', 'isalpha', 'isascii', 'isblank', 'iscntrl',
+            'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
+            'isupper', 'isxdigit', 'toascii', 'tolower', 'toupper',
+
+            //inttypes.h
+            'imaxabs', 'imaxdiv', 'strtoimax', 'strtoumax', 'wcstoimax',
+            'wcstoumax',
+
+            //locale.h
+            'localeconv', 'setlocale',
+
+            //math.h
+            'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'exp',
+            'fabs', 'floor', 'frexp', 'ldexp', 'log', 'log10', 'modf', 'pow',
+            'sin', 'sinh', 'sqrt', 'tan', 'tanh',
+
+            //setjmp.h
+            'longjmp', 'setjmp',
+
+            //signal.h
+            'raise',
+
+            //stdarg.h
+            'va_arg', 'va_copy', 'va_end', 'va_start',
+
+            //stddef.h
+            'offsetof',
+
+            //stdio.h
+            'clearerr', 'fclose', 'fdopen', 'feof', 'ferror', 'fflush', 'fgetc',
+            'fgetpos', 'fgets', 'fopen', 'fprintf', 'fputc', 'fputchar',
+            'fputs', 'fread', 'freopen', 'fscanf', 'fseek', 'fsetpos', 'ftell',
+            'fwrite', 'getc', 'getch', 'getchar', 'gets', 'perror', 'printf',
+            'putc', 'putchar', 'puts', 'remove', 'rename', 'rewind', 'scanf',
+            'setbuf', 'setvbuf', 'snprintf', 'sprintf', 'sscanf', 'tmpfile',
+            'tmpnam', 'ungetc', 'vfprintf', 'vfscanf', 'vprintf', 'vscanf',
+            'vsprintf', 'vsscanf',
+
+            //stdlib.h
+            'abort', 'abs', 'atexit', 'atof', 'atoi', 'atol', 'bsearch',
+            'calloc', 'div', 'exit', 'free', 'getenv', 'itoa', 'labs', 'ldiv',
+            'ltoa', 'malloc', 'qsort', 'rand', 'realloc', 'srand', 'strtod',
+            'strtol', 'strtoul', 'system',
+
+            //string.h
+            'memchr', 'memcmp', 'memcpy', 'memmove', 'memset', 'strcat',
+            'strchr', 'strcmp', 'strcoll', 'strcpy', 'strcspn', 'strerror',
+            'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk', 'strrchr',
+            'strspn', 'strstr', 'strtok', 'strxfrm',
+
+            //time.h
+            'asctime', 'clock', 'ctime', 'difftime', 'gmtime', 'localtime',
+            'mktime', 'strftime', 'time',
+
+            //wchar.h
+            'btowc', 'fgetwc', 'fgetws', 'fputwc', 'fputws', 'fwide',
+            'fwprintf', 'fwscanf', 'getwc', 'getwchar', 'mbrlen', 'mbrtowc',
+            'mbsinit', 'mbsrtowcs', 'putwc', 'putwchar', 'swprintf', 'swscanf',
+            'ungetwc', 'vfwprintf', 'vswprintf', 'vwprintf', 'wcrtomb',
+            'wcscat', 'wcschr', 'wcscmp', 'wcscoll', 'wcscpy', 'wcscspn',
+            'wcsftime', 'wcslen', 'wcsncat', 'wcsncmp', 'wcsncpy', 'wcspbrk',
+            'wcsrchr', 'wcsrtombs', 'wcsspn', 'wcsstr', 'wcstod', 'wcstok',
+            'wcstol', 'wcstoul', 'wcsxfrm', 'wctob', 'wmemchr', 'wmemcmp',
+            'wmemcpy', 'wmemmove', 'wmemset', 'wprintf', 'wscanf',
+
+            //wctype.h
+            'iswalnum', 'iswalpha', 'iswcntrl', 'iswctype', 'iswdigit',
+            'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace',
+            'iswupper', 'iswxdigit', 'towctrans', 'towlower', 'towupper',
+            'wctrans', 'wctype'
+            ),
+        4 => array(
+            'auto', 'char', 'const', 'double',  'float', 'int', 'long',
+            'register', 'short', 'signed', 'sizeof', 'static', 'struct',
+            'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t',
+
+            'int8', 'int16', 'int32', 'int64',
+            'uint8', 'uint16', 'uint32', 'uint64',
+
+            'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
+            'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
+
+            'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
+            'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
+
+            'int8_t', 'int16_t', 'int32_t', 'int64_t',
+            'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
+
+            'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t',
+            'size_t', 'off_t'
+            ),
+        // Public API
+        5 => array(
+            'AssignProcessToJobObject', 'CommandLineToArgvW', 'ConvertThreadToFiber',
+            'CreateFiber', 'CreateJobObjectA', 'CreateJobObjectW', 'CreateProcessA',
+            'CreateProcessAsUserA', 'CreateProcessAsUserW', 'CreateProcessW',
+            'CreateRemoteThread', 'CreateThread', 'DeleteFiber', 'ExitProcess',
+            'ExitThread', 'FreeEnvironmentStringsA', 'FreeEnvironmentStringsW',
+            'GetCommandLineA', 'GetCommandLineW', 'GetCurrentProcess',
+            'GetCurrentProcessId', 'GetCurrentThread', 'GetCurrentThreadId',
+            'GetEnvironmentStringsA', 'GetEnvironmentStringsW',
+            'GetEnvironmentVariableA', 'GetEnvironmentVariableW', 'GetExitCodeProcess',
+            'GetExitCodeThread', 'GetGuiResources', 'GetPriorityClass',
+            'GetProcessAffinityMask', 'GetProcessPriorityBoost',
+            'GetProcessShutdownParameters', 'GetProcessTimes', 'GetProcessVersion',
+            'GetProcessWorkingSetSize', 'GetStartupInfoA', 'GetStartupInfoW',
+            'GetThreadPriority', 'GetThreadPriorityBoost', 'GetThreadTimes',
+            'OpenJobObjectA', 'OpenJobObjectW', 'OpenProcess',
+            'QueryInformationJobObject', 'ResumeThread', 'SetEnvironmentVariableA',
+            'SetEnvironmentVariableW', 'SetInformationJobObject', 'SetPriorityClass',
+            'SetProcessAffinityMask', 'SetProcessPriorityBoost',
+            'SetProcessShutdownParameters', 'SetProcessWorkingSetSize',
+            'SetThreadAffinityMask', 'SetThreadIdealProcessor', 'SetThreadPriority',
+            'SetThreadPriorityBoost', 'Sleep', 'SleepEx', 'SuspendThread',
+            'SwitchToFiber', 'SwitchToThread', 'TerminateJobObject', 'TerminateProcess',
+            'TerminateThread', 'WaitForInputIdle', 'WinExec',
+
+            '_hread', '_hwrite', '_lclose', '_lcreat', '_llseek', '_lopen', '_lread',
+            '_lwrite', 'AreFileApisANSI', 'CancelIo', 'CopyFileA', 'CopyFileW',
+            'CreateDirectoryA', 'CreateDirectoryExA', 'CreateDirectoryExW',
+            'CreateDirectoryW', 'CreateFileA', 'CreateFileW', 'DeleteFileA',
+            'DeleteFileW', 'FindClose', 'FindCloseChangeNotification',
+            'FindFirstChangeNotificationA', 'FindFirstChangeNotificationW',
+            'FindFirstFileA', 'FindFirstFileW', 'FindNextFileA', 'FindNextFileW',
+            'FlushFileBuffers', 'GetCurrentDirectoryA', 'GetCurrentDirectoryW',
+            'GetDiskFreeSpaceA', 'GetDiskFreeSpaceExA', 'GetDiskFreeSpaceExW',
+            'GetDiskFreeSpaceW', 'GetDriveTypeA', 'GetDriveTypeW', 'GetFileAttributesA',
+            'GetFileAttributesExA', 'GetFileAttributesExW', 'GetFileAttributesW',
+            'GetFileInformationByHandle', 'GetFileSize', 'GetFileType',
+            'GetFullPathNameA', 'GetFullPathNameW', 'GetLogicalDrives',
+            'GetLogicalDriveStringsA', 'GetLogicalDriveStringsW', 'GetLongPathNameA',
+            'GetLongPathNameW', 'GetShortPathNameA', 'GetShortPathNameW',
+            'GetTempFileNameA', 'GetTempFileNameW', 'GetTempPathA', 'GetTempPathW',
+            'LockFile', 'MoveFileA', 'MoveFileW', 'MulDiv', 'OpenFile',
+            'QueryDosDeviceA', 'QueryDosDeviceW', 'ReadFile', 'ReadFileEx',
+            'RemoveDirectoryA', 'RemoveDirectoryW', 'SearchPathA', 'SearchPathW',
+            'SetCurrentDirectoryA', 'SetCurrentDirectoryW', 'SetEndOfFile',
+            'SetFileApisToANSI', 'SetFileApisToOEM', 'SetFileAttributesA',
+            'SetFileAttributesW', 'SetFilePointer', 'SetHandleCount',
+            'SetVolumeLabelA', 'SetVolumeLabelW', 'UnlockFile', 'WriteFile',
+            'WriteFileEx',
+
+            'DeviceIoControl',
+
+            'GetModuleFileNameA', 'GetModuleFileNameW', 'GetProcAddress',
+            'LoadLibraryA', 'LoadLibraryExA', 'LoadLibraryExW', 'LoadLibraryW',
+            'LoadModule',
+
+            'GetPrivateProfileIntA', 'GetPrivateProfileIntW',
+            'GetPrivateProfileSectionA', 'GetPrivateProfileSectionNamesA',
+            'GetPrivateProfileSectionNamesW', 'GetPrivateProfileSectionW',
+            'GetPrivateProfileStringA', 'GetPrivateProfileStringW',
+            'GetPrivateProfileStructA', 'GetPrivateProfileStructW',
+            'GetProfileIntA', 'GetProfileIntW', 'GetProfileSectionA',
+            'GetProfileSectionW', 'GetProfileStringA', 'GetProfileStringW',
+            'RegCloseKey', 'RegConnectRegistryA', 'RegConnectRegistryW',
+            'RegCreateKeyA', 'RegCreateKeyExA', 'RegCreateKeyExW',
+            'RegCreateKeyW', 'RegDeleteKeyA', 'RegDeleteKeyW', 'RegDeleteValueA',
+            'RegDeleteValueW', 'RegEnumKeyA', 'RegEnumKeyExA', 'RegEnumKeyExW',
+            'RegEnumKeyW', 'RegEnumValueA', 'RegEnumValueW', 'RegFlushKey',
+            'RegGetKeySecurity', 'RegLoadKeyA', 'RegLoadKeyW',
+            'RegNotifyChangeKeyValue', 'RegOpenKeyA', 'RegOpenKeyExA', 'RegOpenKeyExW',
+            'RegOpenKeyW', 'RegOverridePredefKey', 'RegQueryInfoKeyA',
+            'RegQueryInfoKeyW', 'RegQueryMultipleValuesA', 'RegQueryMultipleValuesW',
+            'RegQueryValueA', 'RegQueryValueExA', 'RegQueryValueExW', 'RegQueryValueW',
+            'RegReplaceKeyA', 'RegReplaceKeyW', 'RegRestoreKeyA', 'RegRestoreKeyW',
+            'RegSaveKeyA', 'RegSaveKeyW', 'RegSetKeySecurity', 'RegSetValueA',
+            'RegSetValueExA', 'RegSetValueExW', 'RegSetValueW', 'RegUnLoadKeyA',
+            'RegUnLoadKeyW', 'WritePrivateProfileSectionA', 'WritePrivateProfileSectionW',
+            'WritePrivateProfileStringA', 'WritePrivateProfileStringW',
+            'WritePrivateProfileStructA', 'WritePrivateProfileStructW',
+            'WriteProfileSectionA', 'WriteProfileSectionW', 'WriteProfileStringA',
+            'WriteProfileStringW',
+
+            'AccessCheck', 'AccessCheckAndAuditAlarmA', 'AccessCheckAndAuditAlarmW',
+            'AccessCheckByType', 'AccessCheckByTypeAndAuditAlarmA',
+            'AccessCheckByTypeAndAuditAlarmW', 'AccessCheckByTypeResultList',
+            'AccessCheckByTypeResultListAndAuditAlarmA', 'AccessCheckByTypeResultListAndAuditAlarmW',
+            'AddAccessAllowedAce', 'AddAccessAllowedAceEx', 'AddAccessAllowedObjectAce',
+            'AddAccessDeniedAce', 'AddAccessDeniedAceEx', 'AddAccessDeniedObjectAce',
+            'AddAce', 'AddAuditAccessAce', 'AddAuditAccessAceEx', 'AddAuditAccessObjectAce',
+            'AdjustTokenGroups', 'AdjustTokenPrivileges', 'AllocateAndInitializeSid',
+            'AllocateLocallyUniqueId', 'AreAllAccessesGranted', 'AreAnyAccessesGranted',
+            'BuildExplicitAccessWithNameA', 'BuildExplicitAccessWithNameW',
+            'BuildImpersonateExplicitAccessWithNameA', 'BuildImpersonateExplicitAccessWithNameW',
+            'BuildImpersonateTrusteeA', 'BuildImpersonateTrusteeW', 'BuildSecurityDescriptorA',
+            'BuildSecurityDescriptorW', 'BuildTrusteeWithNameA', 'BuildTrusteeWithNameW',
+            'BuildTrusteeWithSidA', 'BuildTrusteeWithSidW',
+            'ConvertToAutoInheritPrivateObjectSecurity', 'CopySid', 'CreatePrivateObjectSecurity',
+            'CreatePrivateObjectSecurityEx', 'CreateRestrictedToken', 'DeleteAce',
+            'DestroyPrivateObjectSecurity', 'DuplicateToken', 'DuplicateTokenEx',
+            'EqualPrefixSid', 'EqualSid', 'FindFirstFreeAce', 'FreeSid', 'GetAce',
+            'GetAclInformation', 'GetAuditedPermissionsFromAclA', 'GetAuditedPermissionsFromAclW',
+            'GetEffectiveRightsFromAclA', 'GetEffectiveRightsFromAclW',
+            'GetExplicitEntriesFromAclA', 'GetExplicitEntriesFromAclW', 'GetFileSecurityA',
+            'GetFileSecurityW', 'GetKernelObjectSecurity', 'GetLengthSid', 'GetMultipleTrusteeA',
+            'GetMultipleTrusteeOperationA', 'GetMultipleTrusteeOperationW', 'GetMultipleTrusteeW',
+            'GetNamedSecurityInfoA', 'GetNamedSecurityInfoW', 'GetPrivateObjectSecurity',
+            'GetSecurityDescriptorControl', 'GetSecurityDescriptorDacl',
+            'GetSecurityDescriptorGroup', 'GetSecurityDescriptorLength',
+            'GetSecurityDescriptorOwner', 'GetSecurityDescriptorSacl', 'GetSecurityInfo',
+            'GetSidIdentifierAuthority', 'GetSidLengthRequired', 'GetSidSubAuthority',
+            'GetSidSubAuthorityCount', 'GetTokenInformation', 'GetTrusteeFormA',
+            'GetTrusteeFormW', 'GetTrusteeNameA', 'GetTrusteeNameW', 'GetTrusteeTypeA',
+            'GetTrusteeTypeW', 'GetUserObjectSecurity', 'ImpersonateLoggedOnUser',
+            'ImpersonateNamedPipeClient', 'ImpersonateSelf', 'InitializeAcl',
+            'InitializeSecurityDescriptor', 'InitializeSid', 'IsTokenRestricted', 'IsValidAcl',
+            'IsValidSecurityDescriptor', 'IsValidSid', 'LogonUserA', 'LogonUserW',
+            'LookupAccountNameA', 'LookupAccountNameW', 'LookupAccountSidA', 'LookupAccountSidW',
+            'LookupPrivilegeDisplayNameA', 'LookupPrivilegeDisplayNameW', 'LookupPrivilegeNameA',
+            'LookupPrivilegeNameW', 'LookupPrivilegeValueA', 'LookupPrivilegeValueW',
+            'LookupSecurityDescriptorPartsA', 'LookupSecurityDescriptorPartsW', 'MakeAbsoluteSD',
+            'MakeSelfRelativeSD', 'MapGenericMask', 'ObjectCloseAuditAlarmA',
+            'ObjectCloseAuditAlarmW', 'ObjectDeleteAuditAlarmA', 'ObjectDeleteAuditAlarmW',
+            'ObjectOpenAuditAlarmA', 'ObjectOpenAuditAlarmW', 'ObjectPrivilegeAuditAlarmA',
+            'ObjectPrivilegeAuditAlarmW', 'OpenProcessToken', 'OpenThreadToken', 'PrivilegeCheck',
+            'PrivilegedServiceAuditAlarmA', 'PrivilegedServiceAuditAlarmW', 'RevertToSelf',
+            'SetAclInformation', 'SetEntriesInAclA', 'SetEntriesInAclW', 'SetFileSecurityA',
+            'SetFileSecurityW', 'SetKernelObjectSecurity', 'SetNamedSecurityInfoA',
+            'SetNamedSecurityInfoW', 'SetPrivateObjectSecurity', 'SetPrivateObjectSecurityEx',
+            'SetSecurityDescriptorControl', 'SetSecurityDescriptorDacl',
+            'SetSecurityDescriptorGroup', 'SetSecurityDescriptorOwner',
+            'SetSecurityDescriptorSacl', 'SetSecurityInfo', 'SetThreadToken',
+            'SetTokenInformation', 'SetUserObjectSecurity', 'ChangeServiceConfig2A',
+            'ChangeServiceConfig2W', 'ChangeServiceConfigA', 'ChangeServiceConfigW',
+            'CloseServiceHandle', 'ControlService', 'CreateServiceA', 'CreateServiceW',
+            'DeleteService', 'EnumDependentServicesA', 'EnumDependentServicesW',
+            'EnumServicesStatusA', 'EnumServicesStatusW', 'GetServiceDisplayNameA',
+            'GetServiceDisplayNameW', 'GetServiceKeyNameA', 'GetServiceKeyNameW',
+            'LockServiceDatabase', 'NotifyBootConfigStatus', 'OpenSCManagerA', 'OpenSCManagerW',
+            'OpenServiceA', 'OpenServiceW', 'QueryServiceConfig2A', 'QueryServiceConfig2W',
+            'QueryServiceConfigA', 'QueryServiceConfigW', 'QueryServiceLockStatusA',
+            'QueryServiceLockStatusW', 'QueryServiceObjectSecurity', 'QueryServiceStatus',
+            'RegisterServiceCtrlHandlerA', 'RegisterServiceCtrlHandlerW',
+            'SetServiceObjectSecurity', 'SetServiceStatus', 'StartServiceA',
+            'StartServiceCtrlDispatcherA', 'StartServiceCtrlDispatcherW', 'StartServiceW',
+            'UnlockServiceDatabase',
+
+            'MultinetGetConnectionPerformanceA', 'MultinetGetConnectionPerformanceW',
+            'NetAlertRaise', 'NetAlertRaiseEx', 'NetApiBufferAllocate', 'NetApiBufferFree',
+            'NetApiBufferReallocate', 'NetApiBufferSize', 'NetConnectionEnum', 'NetFileClose',
+            'NetFileGetInfo', 'NetGetAnyDCName', 'NetGetDCName', 'NetGetDisplayInformationIndex',
+            'NetGroupAdd', 'NetGroupAddUser', 'NetGroupDel', 'NetGroupDelUser', 'NetGroupEnum',
+            'NetGroupGetInfo', 'NetGroupGetUsers', 'NetGroupSetInfo', 'NetGroupSetUsers',
+            'NetLocalGroupAdd', 'NetLocalGroupAddMember', 'NetLocalGroupAddMembers',
+            'NetLocalGroupDel', 'NetLocalGroupDelMember', 'NetLocalGroupDelMembers',
+            'NetLocalGroupEnum', 'NetLocalGroupGetInfo', 'NetLocalGroupGetMembers',
+            'NetLocalGroupSetInfo', 'NetLocalGroupSetMembers', 'NetMessageBufferSend',
+            'NetMessageNameAdd', 'NetMessageNameDel', 'NetMessageNameEnum',
+            'NetMessageNameGetInfo', 'NetQueryDisplayInformation', 'NetRemoteComputerSupports',
+            'NetRemoteTOd', 'NetReplExportDirAdd', 'NetReplExportDirDel', 'NetReplExportDirEnum',
+            'NetReplExportDirGetInfo', 'NetReplExportDirLock', 'NetReplExportDirSetInfo',
+            'NetReplExportDirUnlock', 'NetReplGetInfo', 'NetReplImportDirAdd',
+            'NetReplImportDirDel', 'NetReplImportDirEnum', 'NetReplImportDirGetInfo',
+            'NetReplImportDirLock', 'NetReplImportDirUnlock', 'NetReplSetInfo',
+            'NetScheduleJobAdd', 'NetScheduleJobDel', 'NetScheduleJobEnum',
+            'NetScheduleJobGetInfo', 'NetServerComputerNameAdd', 'NetServerComputerNameDel',
+            'NetServerDiskEnum', 'NetServerEnum', 'NetServerEnumEx', 'NetServerGetInfo',
+            'NetServerSetInfo', 'NetServerTransportAdd', 'NetServerTransportAddEx',
+            'NetServerTransportDel', 'NetServerTransportEnum', 'NetSessionDel', 'NetSessionEnum',
+            'NetSessionGetInfo', 'NetShareAdd', 'NetShareCheck', 'NetShareDel', 'NetShareEnum',
+            'NetShareGetInfo', 'NetShareSetInfo', 'NetStatisticsGet', 'NetUseAdd', 'NetUseDel',
+            'NetUseEnum', 'NetUseGetInfo', 'NetUserAdd', 'NetUserChangePassword', 'NetUserDel',
+            'NetUserEnum', 'NetUserGetGroups', 'NetUserGetInfo', 'NetUserGetLocalGroups',
+            'NetUserModalsGet', 'NetUserModalsSet', 'NetUserSetGroups', 'NetUserSetInfo',
+            'NetWkstaGetInfo', 'NetWkstaSetInfo', 'NetWkstaTransportAdd', 'NetWkstaTransportDel',
+            'NetWkstaTransportEnum', 'NetWkstaUserEnum', 'NetWkstaUserGetInfo',
+            'NetWkstaUserSetInfo', 'WNetAddConnection2A', 'WNetAddConnection2W',
+            'WNetAddConnection3A', 'WNetAddConnection3W', 'WNetAddConnectionA',
+            'WNetAddConnectionW', 'WNetCancelConnection2A', 'WNetCancelConnection2W',
+            'WNetCancelConnectionA', 'WNetCancelConnectionW', 'WNetCloseEnum',
+            'WNetConnectionDialog', 'WNetConnectionDialog1A', 'WNetConnectionDialog1W',
+            'WNetDisconnectDialog', 'WNetDisconnectDialog1A', 'WNetDisconnectDialog1W',
+            'WNetEnumResourceA', 'WNetEnumResourceW', 'WNetGetConnectionA', 'WNetGetConnectionW',
+            'WNetGetLastErrorA', 'WNetGetLastErrorW', 'WNetGetNetworkInformationA',
+            'WNetGetNetworkInformationW', 'WNetGetProviderNameA', 'WNetGetProviderNameW',
+            'WNetGetResourceInformationA', 'WNetGetResourceInformationW',
+            'WNetGetResourceParentA', 'WNetGetResourceParentW', 'WNetGetUniversalNameA',
+            'WNetGetUniversalNameW', 'WNetGetUserA', 'WNetGetUserW', 'WNetOpenEnumA',
+            'WNetOpenEnumW', 'WNetUseConnectionA', 'WnetUseConnectionW',
+
+            'accept', 'bind', 'closesocket', 'connect', 'gethostbyaddr', 'gethostbyname',
+            'gethostname', 'getpeername', 'getprotobyname', 'getprotobynumber', 'getservbyname',
+            'getservbyport', 'getsockname', 'getsockopt', 'htonl', 'htons', 'inet_addr',
+            'inet_ntoa', 'ioctlsocket', 'listen', 'ntohl', 'ntohs', 'recv', 'recvfrom', 'select',
+            'send', 'sendto', 'setsockopt', 'shutdown', 'socket', 'WSAAccept',
+            'WSAAddressToStringA', 'WSAAddressToStringW', 'WSAAsyncGetHostByAddr',
+            'WSAAsyncGetHostByName', 'WSAAsyncGetProtoByName', 'WSAAsyncGetProtoByNumber',
+            'WSAAsyncGetServByName', 'WSAAsyncGetServByPort', 'WSAAsyncSelect',
+            'WSACancelAsyncRequest', 'WSACancelBlockingCall', 'WSACleanup', 'WSACloseEvent',
+            'WSAConnect', 'WSACreateEvent', 'WSADuplicateSocketA', 'WSADuplicateSocketW',
+            'WSAEnumNameSpaceProvidersA', 'WSAEnumNameSpaceProvidersW', 'WSAEnumNetworkEvents',
+            'WSAEnumProtocolsA', 'WSAEnumProtocolsW', 'WSAEventSelect', 'WSAGetLastError',
+            'WSAGetOverlappedResult', 'WSAGetQOSByName', 'WSAGetServiceClassInfoA',
+            'WSAGetServiceClassInfoW', 'WSAGetServiceClassNameByClassIdA',
+            'WSAGetServiceClassNameByClassIdW', 'WSAHtonl', 'WSAHtons', 'WSAInstallServiceClassA',
+            'WSAInstallServiceClassW', 'WSAIoctl', 'WSAIsBlocking', 'WSAJoinLeaf',
+            'WSALookupServiceBeginA', 'WSALookupServiceBeginW', 'WSALookupServiceEnd',
+            'WSALookupServiceNextA', 'WSALookupServiceNextW', 'WSANtohl', 'WSANtohs',
+            'WSAProviderConfigChange', 'WSARecv', 'WSARecvDisconnect', 'WSARecvFrom',
+            'WSARemoveServiceClass', 'WSAResetEvent', 'WSASend', 'WSASendDisconnect', 'WSASendTo',
+            'WSASetBlockingHook', 'WSASetEvent', 'WSASetLastError', 'WSASetServiceA',
+            'WSASetServiceW', 'WSASocketA', 'WSASocketW', 'WSAStartup', 'WSAStringToAddressA',
+            'WSAStringToAddressW', 'WSAUnhookBlockingHook', 'WSAWaitForMultipleEvents',
+            'WSCDeinstallProvider', 'WSCEnableNSProvider', 'WSCEnumProtocols',
+            'WSCGetProviderPath', 'WSCInstallNameSpace', 'WSCInstallProvider',
+            'WSCUnInstallNameSpace',
+
+            'ContinueDebugEvent', 'DebugActiveProcess', 'DebugBreak', 'FatalExit',
+            'FlushInstructionCache', 'GetThreadContext', 'GetThreadSelectorEntry',
+            'IsDebuggerPresent', 'OutputDebugStringA', 'OutputDebugStringW', 'ReadProcessMemory',
+            'SetDebugErrorLevel', 'SetThreadContext', 'WaitForDebugEvent', 'WriteProcessMemory',
+
+            'CloseHandle', 'DuplicateHandle', 'GetHandleInformation', 'SetHandleInformation',
+
+            'AdjustWindowRect', 'AdjustWindowRectEx', 'AllowSetForegroundWindow',
+            'AnimateWindow', 'AnyPopup', 'ArrangeIconicWindows', 'BeginDeferWindowPos',
+            'BringWindowToTop', 'CascadeWindows', 'ChildWindowFromPoint',
+            'ChildWindowFromPointEx', 'CloseWindow', 'CreateWindowExA', 'CreateWindowExW',
+            'DeferWindowPos', 'DestroyWindow', 'EndDeferWindowPos', 'EnumChildWindows',
+            'EnumThreadWindows', 'EnumWindows', 'FindWindowA', 'FindWindowExA', 'FindWindowExW',
+            'FindWindowW', 'GetAltTabInfoA', 'GetAltTabInfoW', 'GetAncestor', 'GetClientRect',
+            'GetDesktopWindow', 'GetForegroundWindow', 'GetGUIThreadInfo', 'GetLastActivePopup',
+            'GetLayout', 'GetParent', 'GetProcessDefaultLayout', 'GetTitleBarInf', 'GetTopWindow',
+            'GetWindow', 'GetWindowInfo', 'GetWindowModuleFileNameA', 'GetWindowModuleFileNameW',
+            'GetWindowPlacement', 'GetWindowRect', 'GetWindowTextA', 'GetWindowTextLengthA',
+            'GetWindowTextLengthW', 'GetWindowTextW', 'GetWindowThreadProcessId', 'IsChild',
+            'IsIconic', 'IsWindow', 'IsWindowUnicode', 'IsWindowVisible', 'IsZoomed',
+            'LockSetForegroundWindow', 'MoveWindow', 'OpenIcon', 'RealChildWindowFromPoint',
+            'RealGetWindowClassA', 'RealGetWindowClassW', 'SetForegroundWindow',
+            'SetLayeredWindowAttributes', 'SetLayout', 'SetParent', 'SetProcessDefaultLayout',
+            'SetWindowPlacement', 'SetWindowPos', 'SetWindowTextA', 'SetWindowTextW',
+            'ShowOwnedPopups', 'ShowWindow', 'ShowWindowAsync', 'TileWindows',
+            'UpdateLayeredWindow', 'WindowFromPoint',
+
+            'CreateDialogIndirectParamA', 'CreateDialogIndirectParamW', 'CreateDialogParamA',
+            'CreateDialogParamW', 'DefDlgProcA', 'DefDlgProcW', 'DialogBoxIndirectParamA',
+            'DialogBoxIndirectParamW', 'DialogBoxParamA', 'DialogBoxParamW', 'EndDialog',
+            'GetDialogBaseUnits', 'GetDlgCtrlID', 'GetDlgItem', 'GetDlgItemInt',
+            'GetDlgItemTextA', 'GetDlgItemTextW', 'GetNextDlgGroupItem', 'GetNextDlgTabItem',
+            'IsDialogMessageA', 'IsDialogMessageW', 'MapDialogRect', 'MessageBoxA',
+            'MessageBoxExA', 'MessageBoxExW', 'MessageBoxIndirectA', 'MessageBoxIndirectW',
+            'MessageBoxW', 'SendDlgItemMessageA', 'SendDlgItemMessageW', 'SetDlgItemInt',
+            'SetDlgItemTextA', 'SetDlgItemTextW',
+
+            'GetWriteWatch', 'GlobalMemoryStatus', 'GlobalMemoryStatusEx', 'IsBadCodePtr',
+            'IsBadReadPtr', 'IsBadStringPtrA', 'IsBadStringPtrW', 'IsBadWritePtr',
+            'ResetWriteWatch', 'AllocateUserPhysicalPages', 'FreeUserPhysicalPages',
+            'MapUserPhysicalPages', 'MapUserPhysicalPagesScatter', 'GlobalAlloc', 'GlobalFlags',
+            'GlobalFree', 'GlobalHandle', 'GlobalLock', 'GlobalReAlloc', 'GlobalSize',
+            'GlobalUnlock', 'LocalAlloc', 'LocalFlags', 'LocalFree', 'LocalHandle', 'LocalLock',
+            'LocalReAlloc', 'LocalSize', 'LocalUnlock', 'GetProcessHeap', 'GetProcessHeaps',
+            'HeapAlloc', 'HeapCompact', 'HeapCreate', 'HeapDestroy', 'HeapFree', 'HeapLock',
+            'HeapReAlloc', 'HeapSize', 'HeapUnlock', 'HeapValidate', 'HeapWalk', 'VirtualAlloc',
+            'VirtualAllocEx', 'VirtualFree', 'VirtualFreeEx', 'VirtualLock', 'VirtualProtect',
+            'VirtualProtectEx', 'VirtualQuery', 'VirtualQueryEx', 'VirtualUnlock',
+            'GetFreeSpace', 'GlobalCompact', 'GlobalFix', 'GlobalUnfix', 'GlobalUnWire',
+            'GlobalWire', 'IsBadHugeReadPtr', 'IsBadHugeWritePtr', 'LocalCompact', 'LocalShrink',
+
+            'GetClassInfoA', 'GetClassInfoW', 'GetClassInfoExA', 'GetClassInfoExW',
+            'GetClassLongA', 'GetClassLongW', 'GetClassLongPtrA', 'GetClassLongPtrW',
+            'RegisterClassA', 'RegisterClassW', 'RegisterClassExA', 'RegisterClassExW',
+            'SetClassLongA', 'SetClassLongW', 'SetClassLongPtrA', 'SetClassLongPtrW',
+            'SetWindowLongA', 'SetWindowLongW', 'SetWindowLongPtrA', 'SetWindowLongPtrW',
+            'UnregisterClassA', 'UnregisterClassW', 'GetClassWord', 'GetWindowWord',
+            'SetClassWord', 'SetWindowWord'
+            ),
+        // Native API
+        6 => array(
+            'CsrAllocateCaptureBuffer', 'CsrAllocateCapturePointer', 'CsrAllocateMessagePointer',
+            'CsrCaptureMessageBuffer', 'CsrCaptureMessageString', 'CsrCaptureTimeout',
+            'CsrClientCallServer', 'CsrClientConnectToServer', 'CsrFreeCaptureBuffer',
+            'CsrIdentifyAlertableThread', 'CsrNewThread', 'CsrProbeForRead', 'CsrProbeForWrite',
+            'CsrSetPriorityClass',
+
+            'LdrAccessResource', 'LdrDisableThreadCalloutsForDll', 'LdrEnumResources',
+            'LdrFindEntryForAddress', 'LdrFindResource_U', 'LdrFindResourceDirectory_U',
+            'LdrGetDllHandle', 'LdrGetProcedureAddress', 'LdrInitializeThunk', 'LdrLoadDll',
+            'LdrProcessRelocationBlock', 'LdrQueryImageFileExecutionOptions',
+            'LdrQueryProcessModuleInformation', 'LdrShutdownProcess', 'LdrShutdownThread',
+            'LdrUnloadDll', 'LdrVerifyImageMatchesChecksum',
+
+            'NtAcceptConnectPort', 'ZwAcceptConnectPort', 'NtCompleteConnectPort',
+            'ZwCompleteConnectPort', 'NtConnectPort', 'ZwConnectPort', 'NtCreatePort',
+            'ZwCreatePort', 'NtImpersonateClientOfPort', 'ZwImpersonateClientOfPort',
+            'NtListenPort', 'ZwListenPort', 'NtQueryInformationPort', 'ZwQueryInformationPort',
+            'NtReadRequestData', 'ZwReadRequestData', 'NtReplyPort', 'ZwReplyPort',
+            'NtReplyWaitReceivePort', 'ZwReplyWaitReceivePort', 'NtReplyWaitReplyPort',
+            'ZwReplyWaitReplyPort', 'NtRequestPort', 'ZwRequestPort', 'NtRequestWaitReplyPort',
+            'ZwRequestWaitReplyPort', 'NtSecureConnectPort', 'ZwSecureConnectPort',
+            'NtWriteRequestData', 'ZwWriteRequestData',
+
+            'NtAccessCheck', 'ZwAccessCheck', 'NtAccessCheckAndAuditAlarm',
+            'ZwAccessCheckAndAuditAlarm', 'NtAccessCheckByType', 'ZwAccessCheckByType',
+            'NtAccessCheckByTypeAndAuditAlarm', 'ZwAccessCheckByTypeAndAuditAlarm',
+            'NtAccessCheckByTypeResultList', 'ZwAccessCheckByTypeResultList',
+            'NtAdjustGroupsToken', 'ZwAdjustGroupsToken', 'NtAdjustPrivilegesToken',
+            'ZwAdjustPrivilegesToken', 'NtCloseObjectAuditAlarm', 'ZwCloseObjectAuditAlarm',
+            'NtCreateToken', 'ZwCreateToken', 'NtDeleteObjectAuditAlarm',
+            'ZwDeleteObjectAuditAlarm', 'NtDuplicateToken', 'ZwDuplicateToken',
+            'NtFilterToken', 'ZwFilterToken', 'NtImpersonateThread', 'ZwImpersonateThread',
+            'NtOpenObjectAuditAlarm', 'ZwOpenObjectAuditAlarm', 'NtOpenProcessToken',
+            'ZwOpenProcessToken', 'NtOpenThreadToken', 'ZwOpenThreadToken', 'NtPrivilegeCheck',
+            'ZwPrivilegeCheck', 'NtPrivilegedServiceAuditAlarm', 'ZwPrivilegedServiceAuditAlarm',
+            'NtPrivilegeObjectAuditAlarm', 'ZwPrivilegeObjectAuditAlarm',
+            'NtQueryInformationToken', 'ZwQueryInformationToken', 'NtQuerySecurityObject',
+            'ZwQuerySecurityObject', 'NtSetInformationToken', 'ZwSetInformationToken',
+            'NtSetSecurityObject', 'ZwSetSecurityObject',
+
+            'NtAddAtom', 'ZwAddAtom', 'NtDeleteAtom', 'ZwDeleteAtom', 'NtFindAtom', 'ZwFindAtom',
+            'NtQueryInformationAtom', 'ZwQueryInformationAtom',
+
+            'NtAlertResumeThread', 'ZwAlertResumeThread', 'NtAlertThread', 'ZwAlertThread',
+            'NtCreateProcess', 'ZwCreateProcess', 'NtCreateThread', 'ZwCreateThread',
+            'NtCurrentTeb', 'NtDelayExecution', 'ZwDelayExecution', 'NtGetContextThread',
+            'ZwGetContextThread', 'NtOpenProcess', 'ZwOpenProcess', 'NtOpenThread',
+            'ZwOpenThread', 'NtQueryInformationProcess', 'ZwQueryInformationProcess',
+            'NtQueryInformationThread', 'ZwQueryInformationThread', 'NtQueueApcThread',
+            'ZwQueueApcThread', 'NtResumeThread', 'ZwResumeThread', 'NtSetContextThread',
+            'ZwSetContextThread', 'NtSetHighWaitLowThread', 'ZwSetHighWaitLowThread',
+            'NtSetInformationProcess', 'ZwSetInformationProcess', 'NtSetInformationThread',
+            'ZwSetInformationThread', 'NtSetLowWaitHighThread', 'ZwSetLowWaitHighThread',
+            'NtSuspendThread', 'ZwSuspendThread', 'NtTerminateProcess', 'ZwTerminateProcess',
+            'NtTerminateThread', 'ZwTerminateThread', 'NtTestAlert', 'ZwTestAlert',
+            'NtYieldExecution', 'ZwYieldExecution',
+
+            'NtAllocateVirtualMemory', 'ZwAllocateVirtualMemory', 'NtAllocateVirtualMemory64',
+            'ZwAllocateVirtualMemory64', 'NtAreMappedFilesTheSame', 'ZwAreMappedFilesTheSame',
+            'NtCreateSection', 'ZwCreateSection', 'NtExtendSection', 'ZwExtendSection',
+            'NtFlushVirtualMemory', 'ZwFlushVirtualMemory', 'NtFreeVirtualMemory',
+            'ZwFreeVirtualMemory', 'NtFreeVirtualMemory64', 'ZwFreeVirtualMemory64',
+            'NtLockVirtualMemory', 'ZwLockVirtualMemory', 'NtMapViewOfSection',
+            'ZwMapViewOfSection', 'NtMapViewOfVlmSection', 'ZwMapViewOfVlmSection',
+            'NtOpenSection', 'ZwOpenSection', 'NtProtectVirtualMemory', 'ZwProtectVirtualMemory',
+            'NtProtectVirtualMemory64', 'ZwProtectVirtualMemory64', 'NtQueryVirtualMemory',
+            'ZwQueryVirtualMemory', 'NtQueryVirtualMemory64', 'ZwQueryVirtualMemory64',
+            'NtReadVirtualMemory', 'ZwReadVirtualMemory', 'NtReadVirtualMemory64',
+            'ZwReadVirtualMemory64', 'NtUnlockVirtualMemory', 'ZwUnlockVirtualMemory',
+            'NtUnmapViewOfSection', 'ZwUnmapViewOfSection', 'NtUnmapViewOfVlmSection',
+            'ZwUnmapViewOfVlmSection', 'NtWriteVirtualMemory', 'ZwWriteVirtualMemory',
+            'NtWriteVirtualMemory64', 'ZwWriteVirtualMemory64',
+
+            'NtAssignProcessToJobObject', 'ZwAssignProcessToJobObject', 'NtCreateJobObject',
+            'ZwCreateJobObject', 'NtOpenJobObject', 'ZwOpenJobObject',
+            'NtQueryInformationJobObject', 'ZwQueryInformationJobObject',
+            'NtSetInformationJobObject', 'ZwSetInformationJobObject', 'NtTerminateJobObject',
+            'ZwTerminateJobObject',
+
+            'NtCancelIoFile', 'ZwCancelIoFile', 'NtCreateFile', 'ZwCreateFile',
+            'NtCreateIoCompletion', 'ZwCreateIoCompletion', 'NtDeleteFile', 'ZwDeleteFile',
+            'NtDeviceIoControlFile', 'ZwDeviceIoControlFile', 'NtFlushBuffersFile',
+            'ZwFlushBuffersFile', 'NtFsControlFile', 'ZwFsControlFile', 'NtLockFile', 'ZwLockFile',
+            'NtNotifyChangeDirectoryFile', 'ZwNotifyChangeDirectoryFile', 'NtOpenFile',
+            'ZwOpenFile', 'NtOpenIoCompletion', 'ZwOpenIoCompletion', 'NtQueryAttributesFile',
+            'ZwQueryAttributesFile', 'NtQueryDirectoryFile', 'ZwQueryDirectoryFile',
+            'NtQueryEaFile', 'ZwQueryEaFile', 'NtQueryIoCompletion', 'ZwQueryIoCompletion',
+            'NtQueryQuotaInformationFile', 'ZwQueryQuotaInformationFile',
+            'NtQueryVolumeInformationFile', 'ZwQueryVolumeInformationFile', 'NtReadFile',
+            'ZwReadFile', 'NtReadFile64', 'ZwReadFile64', 'NtReadFileScatter', 'ZwReadFileScatter',
+            'NtRemoveIoCompletion', 'ZwRemoveIoCompletion', 'NtSetEaFile', 'ZwSetEaFile',
+            'NtSetInformationFile', 'ZwSetInformationFile', 'NtSetIoCompletion',
+            'ZwSetIoCompletion', 'NtSetQuotaInformationFile', 'ZwSetQuotaInformationFile',
+            'NtSetVolumeInformationFile', 'ZwSetVolumeInformationFile', 'NtUnlockFile',
+            'ZwUnlockFile', 'NtWriteFile', 'ZwWriteFile', 'NtWriteFile64','ZwWriteFile64',
+            'NtWriteFileGather', 'ZwWriteFileGather', 'NtQueryFullAttributesFile',
+            'ZwQueryFullAttributesFile', 'NtQueryInformationFile', 'ZwQueryInformationFile',
+
+            'RtlAbortRXact', 'RtlAbsoluteToSelfRelativeSD', 'RtlAcquirePebLock',
+            'RtlAcquireResourceExclusive', 'RtlAcquireResourceShared', 'RtlAddAccessAllowedAce',
+            'RtlAddAccessDeniedAce', 'RtlAddAce', 'RtlAddActionToRXact', 'RtlAddAtomToAtomTable',
+            'RtlAddAttributeActionToRXact', 'RtlAddAuditAccessAce', 'RtlAddCompoundAce',
+            'RtlAdjustPrivilege', 'RtlAllocateAndInitializeSid', 'RtlAllocateHandle',
+            'RtlAllocateHeap', 'RtlAnsiCharToUnicodeChar', 'RtlAnsiStringToUnicodeSize',
+            'RtlAnsiStringToUnicodeString', 'RtlAppendAsciizToString', 'RtlAppendStringToString',
+            'RtlAppendUnicodeStringToString', 'RtlAppendUnicodeToString', 'RtlApplyRXact',
+            'RtlApplyRXactNoFlush', 'RtlAreAllAccessesGranted', 'RtlAreAnyAccessesGranted',
+            'RtlAreBitsClear', 'RtlAreBitsSet', 'RtlAssert', 'RtlCaptureStackBackTrace',
+            'RtlCharToInteger', 'RtlCheckRegistryKey', 'RtlClearAllBits', 'RtlClearBits',
+            'RtlClosePropertySet', 'RtlCompactHeap', 'RtlCompareMemory', 'RtlCompareMemoryUlong',
+            'RtlCompareString', 'RtlCompareUnicodeString', 'RtlCompareVariants',
+            'RtlCompressBuffer', 'RtlConsoleMultiByteToUnicodeN', 'RtlConvertExclusiveToShared',
+            'RtlConvertLongToLargeInteger', 'RtlConvertPropertyToVariant',
+            'RtlConvertSharedToExclusive', 'RtlConvertSidToUnicodeString',
+            'RtlConvertUiListToApiList', 'RtlConvertUlongToLargeInteger',
+            'RtlConvertVariantToProperty', 'RtlCopyLuid', 'RtlCopyLuidAndAttributesArray',
+            'RtlCopySecurityDescriptor', 'RtlCopySid', 'RtlCopySidAndAttributesArray',
+            'RtlCopyString', 'RtlCopyUnicodeString', 'RtlCreateAcl', 'RtlCreateAndSetSD',
+            'RtlCreateAtomTable', 'RtlCreateEnvironment', 'RtlCreateHeap',
+            'RtlCreateProcessParameters', 'RtlCreatePropertySet', 'RtlCreateQueryDebugBuffer',
+            'RtlCreateRegistryKey', 'RtlCreateSecurityDescriptor', 'RtlCreateTagHeap',
+            'RtlCreateUnicodeString', 'RtlCreateUnicodeStringFromAsciiz', 'RtlCreateUserProcess',
+            'RtlCreateUserSecurityObject', 'RtlCreateUserThread', 'RtlCustomCPToUnicodeN',
+            'RtlCutoverTimeToSystemTime', 'RtlDecompressBuffer', 'RtlDecompressFragment',
+            'RtlDelete', 'RtlDeleteAce', 'RtlDeleteAtomFromAtomTable', 'RtlDeleteCriticalSection',
+            'RtlDeleteElementGenericTable', 'RtlDeleteNoSplay', 'RtlDeleteRegistryValue',
+            'RtlDeleteResource', 'RtlDeleteSecurityObject', 'RtlDeNormalizeProcessParams',
+            'RtlDestroyAtomTable', 'RtlDestroyEnvironment', 'RtlDestroyHandleTable',
+            'RtlDestroyHeap', 'RtlDestroyProcessParameters', 'RtlDestroyQueryDebugBuffer',
+            'RtlDetermineDosPathNameType_U', 'RtlDoesFileExists_U', 'RtlDosPathNameToNtPathName_U',
+            'RtlDosSearchPath_U', 'RtlDowncaseUnicodeString', 'RtlDumpResource',
+            'RtlEmptyAtomTable', 'RtlEnlargedIntegerMultiply', 'RtlEnlargedUnsignedDivide',
+            'RtlEnlargedUnsignedMultiply', 'RtlEnterCriticalSection', 'RtlEnumerateGenericTable',
+            'RtlEnumerateGenericTableWithoutSplaying', 'RtlEnumerateProperties',
+            'RtlEnumProcessHeaps', 'RtlEqualComputerName', 'RtlEqualDomainName', 'RtlEqualLuid',
+            'RtlEqualPrefixSid', 'RtlEqualSid', 'RtlEqualString', 'RtlEqualUnicodeString',
+            'RtlEraseUnicodeString', 'RtlExpandEnvironmentStrings_U', 'RtlExtendedIntegerMultiply',
+            'RtlExtendedLargeIntegerDivide', 'RtlExtendedMagicDivide', 'RtlExtendHeap',
+            'RtlFillMemory', 'RtlFillMemoryUlong', 'RtlFindClearBits', 'RtlFindClearBitsAndSet',
+            'RtlFindLongestRunClear', 'RtlFindLongestRunSet', 'RtlFindMessage', 'RtlFindSetBits',
+            'RtlFindSetBitsAndClear', 'RtlFirstFreeAce', 'RtlFlushPropertySet',
+            'RtlFormatCurrentUserKeyPath', 'RtlFormatMessage', 'RtlFreeAnsiString',
+            'RtlFreeHandle', 'RtlFreeHeap', 'RtlFreeOemString', 'RtlFreeSid',
+            'RtlFreeUnicodeString', 'RtlFreeUserThreadStack', 'RtlGenerate8dot3Name', 'RtlGetAce',
+            'RtlGetCallersAddress', 'RtlGetCompressionWorkSpaceSize',
+            'RtlGetControlSecurityDescriptor', 'RtlGetCurrentDirectory_U',
+            'RtlGetDaclSecurityDescriptor', 'RtlGetElementGenericTable', 'RtlGetFullPathName_U',
+            'RtlGetGroupSecurityDescriptor', 'RtlGetLongestNtPathLength', 'RtlGetNtGlobalFlags',
+            'RtlGetNtProductType', 'RtlGetOwnerSecurityDescriptor', 'RtlGetProcessHeaps',
+            'RtlGetSaclSecurityDescriptor', 'RtlGetUserInfoHeap', 'RtlGuidToPropertySetName',
+            'RtlIdentifierAuthoritySid', 'RtlImageDirectoryEntryToData', 'RtlImageNtHeader',
+            'RtlImageRvaToSection', 'RtlImageRvaToVa', 'RtlImpersonateSelf', 'RtlInitAnsiString',
+            'RtlInitCodePageTable', 'RtlInitializeAtomPackage', 'RtlInitializeBitMap',
+            'RtlInitializeContext', 'RtlInitializeCriticalSection',
+            'RtlInitializeCriticalSectionAndSpinCount', 'RtlInitializeGenericTable',
+            'RtlInitializeHandleTable', 'RtlInitializeResource', 'RtlInitializeRXact',
+            'RtlInitializeSid', 'RtlInitNlsTables', 'RtlInitString', 'RtlInitUnicodeString',
+            'RtlInsertElementGenericTable', 'RtlIntegerToChar', 'RtlIntegerToUnicodeString',
+            'RtlIsDosDeviceName_U', 'RtlIsGenericTableEmpty', 'RtlIsNameLegalDOS8Dot3',
+            'RtlIsTextUnicode', 'RtlIsValidHandle', 'RtlIsValidIndexHandle', 'RtlLargeIntegerAdd',
+            'RtlLargeIntegerArithmeticShift', 'RtlLargeIntegerDivide', 'RtlLargeIntegerNegate',
+            'RtlLargeIntegerShiftLeft', 'RtlLargeIntegerShiftRight', 'RtlLargeIntegerSubtract',
+            'RtlLargeIntegerToChar', 'RtlLeaveCriticalSection', 'RtlLengthRequiredSid',
+            'RtlLengthSecurityDescriptor', 'RtlLengthSid', 'RtlLocalTimeToSystemTime',
+            'RtlLockHeap', 'RtlLookupAtomInAtomTable', 'RtlLookupElementGenericTable',
+            'RtlMakeSelfRelativeSD', 'RtlMapGenericMask', 'RtlMoveMemory',
+            'RtlMultiByteToUnicodeN', 'RtlMultiByteToUnicodeSize', 'RtlNewInstanceSecurityObject',
+            'RtlNewSecurityGrantedAccess', 'RtlNewSecurityObject', 'RtlNormalizeProcessParams',
+            'RtlNtStatusToDosError', 'RtlNumberGenericTableElements', 'RtlNumberOfClearBits',
+            'RtlNumberOfSetBits', 'RtlOemStringToUnicodeSize', 'RtlOemStringToUnicodeString',
+            'RtlOemToUnicodeN', 'RtlOnMappedStreamEvent', 'RtlOpenCurrentUser',
+            'RtlPcToFileHeader', 'RtlPinAtomInAtomTable', 'RtlpNtCreateKey',
+            'RtlpNtEnumerateSubKey', 'RtlpNtMakeTemporaryKey', 'RtlpNtOpenKey',
+            'RtlpNtQueryValueKey', 'RtlpNtSetValueKey', 'RtlPrefixString',
+            'RtlPrefixUnicodeString', 'RtlPropertySetNameToGuid', 'RtlProtectHeap',
+            'RtlpUnWaitCriticalSection', 'RtlpWaitForCriticalSection', 'RtlQueryAtomInAtomTable',
+            'RtlQueryEnvironmentVariable_U', 'RtlQueryInformationAcl',
+            'RtlQueryProcessBackTraceInformation', 'RtlQueryProcessDebugInformation',
+            'RtlQueryProcessHeapInformation', 'RtlQueryProcessLockInformation',
+            'RtlQueryProperties', 'RtlQueryPropertyNames', 'RtlQueryPropertySet',
+            'RtlQueryRegistryValues', 'RtlQuerySecurityObject', 'RtlQueryTagHeap',
+            'RtlQueryTimeZoneInformation', 'RtlRaiseException', 'RtlRaiseStatus', 'RtlRandom',
+            'RtlReAllocateHeap', 'RtlRealPredecessor', 'RtlRealSuccessor', 'RtlReleasePebLock',
+            'RtlReleaseResource', 'RtlRemoteCall', 'RtlResetRtlTranslations',
+            'RtlRunDecodeUnicodeString', 'RtlRunEncodeUnicodeString', 'RtlSecondsSince1970ToTime',
+            'RtlSecondsSince1980ToTime', 'RtlSelfRelativeToAbsoluteSD', 'RtlSetAllBits',
+            'RtlSetAttributesSecurityDescriptor', 'RtlSetBits', 'RtlSetCriticalSectionSpinCount',
+            'RtlSetCurrentDirectory_U', 'RtlSetCurrentEnvironment', 'RtlSetDaclSecurityDescriptor',
+            'RtlSetEnvironmentVariable', 'RtlSetGroupSecurityDescriptor', 'RtlSetInformationAcl',
+            'RtlSetOwnerSecurityDescriptor', 'RtlSetProperties', 'RtlSetPropertyNames',
+            'RtlSetPropertySetClassId', 'RtlSetSaclSecurityDescriptor', 'RtlSetSecurityObject',
+            'RtlSetTimeZoneInformation', 'RtlSetUnicodeCallouts', 'RtlSetUserFlagsHeap',
+            'RtlSetUserValueHeap', 'RtlSizeHeap', 'RtlSplay', 'RtlStartRXact',
+            'RtlSubAuthorityCountSid', 'RtlSubAuthoritySid', 'RtlSubtreePredecessor',
+            'RtlSubtreeSuccessor', 'RtlSystemTimeToLocalTime', 'RtlTimeFieldsToTime',
+            'RtlTimeToElapsedTimeFields', 'RtlTimeToSecondsSince1970', 'RtlTimeToSecondsSince1980',
+            'RtlTimeToTimeFields', 'RtlTryEnterCriticalSection', 'RtlUnicodeStringToAnsiSize',
+            'RtlUnicodeStringToAnsiString', 'RtlUnicodeStringToCountedOemString',
+            'RtlUnicodeStringToInteger', 'RtlUnicodeStringToOemSize',
+            'RtlUnicodeStringToOemString', 'RtlUnicodeToCustomCPN', 'RtlUnicodeToMultiByteN',
+            'RtlUnicodeToMultiByteSize', 'RtlUnicodeToOemN', 'RtlUniform', 'RtlUnlockHeap',
+            'RtlUnwind', 'RtlUpcaseUnicodeChar', 'RtlUpcaseUnicodeString',
+            'RtlUpcaseUnicodeStringToAnsiString', 'RtlUpcaseUnicodeStringToCountedOemString',
+            'RtlUpcaseUnicodeStringToOemString', 'RtlUpcaseUnicodeToCustomCPN',
+            'RtlUpcaseUnicodeToMultiByteN', 'RtlUpcaseUnicodeToOemN', 'RtlUpperChar',
+            'RtlUpperString', 'RtlUsageHeap', 'RtlValidAcl', 'RtlValidateHeap',
+            'RtlValidateProcessHeaps', 'RtlValidSecurityDescriptor', 'RtlValidSid', 'RtlWalkHeap',
+            'RtlWriteRegistryValue', 'RtlxAnsiStringToUnicodeSize', 'RtlxOemStringToUnicodeSize',
+            'RtlxUnicodeStringToAnsiSize', 'RtlxUnicodeStringToOemSize', 'RtlZeroHeap',
+            'RtlZeroMemory',
+
+            'NtCancelTimer', 'ZwCancelTimer', 'NtCreateTimer', 'ZwCreateTimer', 'NtGetTickCount',
+            'ZwGetTickCount', 'NtOpenTimer', 'ZwOpenTimer', 'NtQueryPerformanceCounter',
+            'ZwQueryPerformanceCounter', 'NtQuerySystemTime', 'ZwQuerySystemTime', 'NtQueryTimer',
+            'ZwQueryTimer', 'NtQueryTimerResolution', 'ZwQueryTimerResolution', 'NtSetSystemTime',
+            'ZwSetSystemTime', 'NtSetTimer', 'ZwSetTimer', 'NtSetTimerResolution',
+            'ZwSetTimerResolution',
+
+            'NtClearEvent', 'ZwClearEvent', 'NtCreateEvent', 'ZwCreateEvent', 'NtCreateEventPair',
+            'ZwCreateEventPair', 'NtCreateMutant', 'ZwCreateMutant', 'NtCreateSemaphore',
+            'ZwCreateSemaphore', 'NtOpenEvent', 'ZwOpenEvent', 'NtOpenEventPair',
+            'ZwOpenEventPair', 'NtOpenMutant', 'ZwOpenMutant', 'NtOpenSemaphore',
+            'ZwOpenSemaphore', 'NtPulseEvent', 'ZwPulseEvent', 'NtQueryEvent', 'ZwQueryEvent',
+            'NtQueryMutant', 'ZwQueryMutant', 'NtQuerySemaphore', 'ZwQuerySemaphore',
+            'NtReleaseMutant', 'ZwReleaseMutant', 'NtReleaseProcessMutant',
+            'ZwReleaseProcessMutant', 'NtReleaseSemaphore', 'ZwReleaseSemaphore',
+            'NtReleaseThreadMutant', 'ZwReleaseThreadMutant', 'NtResetEvent', 'ZwResetEvent',
+            'NtSetEvent', 'ZwSetEvent', 'NtSetHighEventPair', 'ZwSetHighEventPair',
+            'NtSetHighWaitLowEventPair', 'ZwSetHighWaitLowEventPair', 'NtSetLowEventPair',
+            'ZwSetLowEventPair', 'NtSetLowWaitHighEventPair', 'ZwSetLowWaitHighEventPair',
+            'NtSignalAndWaitForSingleObject', 'ZwSignalAndWaitForSingleObject',
+            'NtWaitForMultipleObjects', 'ZwWaitForMultipleObjects', 'NtWaitForSingleObject',
+            'ZwWaitForSingleObject', 'NtWaitHighEventPair', 'ZwWaitHighEventPair',
+            'NtWaitLowEventPair', 'ZwWaitLowEventPair',
+
+            'NtClose', 'ZwClose', 'NtCreateDirectoryObject', 'ZwCreateDirectoryObject',
+            'NtCreateSymbolicLinkObject', 'ZwCreateSymbolicLinkObject',
+            'NtDuplicateObject', 'ZwDuplicateObject', 'NtMakeTemporaryObject',
+            'ZwMakeTemporaryObject', 'NtOpenDirectoryObject', 'ZwOpenDirectoryObject',
+            'NtOpenSymbolicLinkObject', 'ZwOpenSymbolicLinkObject', 'NtQueryDirectoryObject',
+            'ZwQueryDirectoryObject', 'NtQueryObject', 'ZwQueryObject',
+            'NtQuerySymbolicLinkObject', 'ZwQuerySymbolicLinkObject', 'NtSetInformationObject',
+            'ZwSetInformationObject',
+
+            'NtContinue', 'ZwContinue', 'NtRaiseException', 'ZwRaiseException',
+            'NtRaiseHardError', 'ZwRaiseHardError', 'NtSetDefaultHardErrorPort',
+            'ZwSetDefaultHardErrorPort',
+
+            'NtCreateChannel', 'ZwCreateChannel', 'NtListenChannel', 'ZwListenChannel',
+            'NtOpenChannel', 'ZwOpenChannel', 'NtReplyWaitSendChannel', 'ZwReplyWaitSendChannel',
+            'NtSendWaitReplyChannel', 'ZwSendWaitReplyChannel', 'NtSetContextChannel',
+            'ZwSetContextChannel',
+
+            'NtCreateKey', 'ZwCreateKey', 'NtDeleteKey', 'ZwDeleteKey', 'NtDeleteValueKey',
+            'ZwDeleteValueKey', 'NtEnumerateKey', 'ZwEnumerateKey', 'NtEnumerateValueKey',
+            'ZwEnumerateValueKey', 'NtFlushKey', 'ZwFlushKey', 'NtInitializeRegistry',
+            'ZwInitializeRegistry', 'NtLoadKey', 'ZwLoadKey', 'NtLoadKey2', 'ZwLoadKey2',
+            'NtNotifyChangeKey', 'ZwNotifyChangeKey', 'NtOpenKey', 'ZwOpenKey', 'NtQueryKey',
+            'ZwQueryKey', 'NtQueryMultipleValueKey', 'ZwQueryMultipleValueKey',
+            'NtQueryMultiplValueKey', 'ZwQueryMultiplValueKey', 'NtQueryValueKey',
+            'ZwQueryValueKey', 'NtReplaceKey', 'ZwReplaceKey', 'NtRestoreKey', 'ZwRestoreKey',
+            'NtSaveKey', 'ZwSaveKey', 'NtSetInformationKey', 'ZwSetInformationKey',
+            'NtSetValueKey', 'ZwSetValueKey', 'NtUnloadKey', 'ZwUnloadKey',
+
+            'NtCreateMailslotFile', 'ZwCreateMailslotFile', 'NtCreateNamedPipeFile',
+            'ZwCreateNamedPipeFile', 'NtCreatePagingFile', 'ZwCreatePagingFile',
+
+            'NtCreateProfile', 'ZwCreateProfile', 'NtQueryIntervalProfile',
+            'ZwQueryIntervalProfile', 'NtRegisterThreadTerminatePort',
+            'ZwRegisterThreadTerminatePort', 'NtSetIntervalProfile', 'ZwSetIntervalProfile',
+            'NtStartProfile', 'ZwStartProfile', 'NtStopProfile', 'ZwStopProfile',
+            'NtSystemDebugControl', 'ZwSystemDebugControl',
+
+            'NtEnumerateBus', 'ZwEnumerateBus', 'NtFlushInstructionCache',
+            'ZwFlushInstructionCache', 'NtFlushWriteBuffer', 'ZwFlushWriteBuffer',
+            'NtSetLdtEntries', 'ZwSetLdtEntries',
+
+            'NtGetPlugPlayEvent', 'ZwGetPlugPlayEvent', 'NtPlugPlayControl', 'ZwPlugPlayControl',
+
+            'NtInitiatePowerAction', 'ZwInitiatePowerAction', 'NtPowerInformation',
+            'ZwPowerInformation', 'NtRequestWakeupLatency', 'ZwRequestWakeupLatency',
+            'NtSetSystemPowerState', 'ZwSetSystemPowerState', 'NtSetThreadExecutionState',
+            'ZwSetThreadExecutionState',
+
+            'NtLoadDriver', 'ZwLoadDriver', 'NtRegisterNewDevice', 'ZwRegisterNewDevice',
+            'NtUnloadDriver', 'ZwUnloadDriver',
+
+            'NtQueryDefaultLocale', 'ZwQueryDefaultLocale', 'NtQueryDefaultUILanguage',
+            'ZwQueryDefaultUILanguage', 'NtQuerySystemEnvironmentValue',
+            'ZwQuerySystemEnvironmentValue', 'NtSetDefaultLocale', 'ZwSetDefaultLocale',
+            'NtSetDefaultUILanguage', 'ZwSetDefaultUILanguage', 'NtSetSystemEnvironmentValue',
+            'ZwSetSystemEnvironmentValue',
+
+            'DbgBreakPoint', 'DbgPrint', 'DbgPrompt', 'DbgSsHandleKmApiMsg', 'DbgSsInitialize',
+            'DbgUiConnectToDbg', 'DbgUiContinue', 'DbgUiWaitStateChange', 'DbgUserBreakPoint',
+            'KiRaiseUserExceptionDispatcher', 'KiUserApcDispatcher', 'KiUserCallbackDispatcher',
+            'KiUserExceptionDispatcher', 'NlsAnsiCodePage', 'NlsMbCodePageTag',
+            'NlsMbOemCodePageTag', 'NtAllocateLocallyUniqueId', 'ZwAllocateLocallyUniqueId',
+            'NtAllocateUuids', 'ZwAllocateUuids', 'NtCallbackReturn', 'ZwCallbackReturn',
+            'NtDisplayString', 'ZwDisplayString', 'NtQueryOleDirectoryFile',
+            'ZwQueryOleDirectoryFile', 'NtQuerySection', 'ZwQuerySection',
+            'NtQuerySystemInformation', 'ZwQuerySystemInformation', 'NtSetSystemInformation',
+            'ZwSetSystemInformation', 'NtShutdownSystem', 'ZwShutdownSystem', 'NtVdmControl',
+            'ZwVdmControl', 'NtW32Call', 'ZwW32Call', 'PfxFindPrefix', 'PfxInitialize',
+            'PfxInsertPrefix', 'PfxRemovePrefix', 'PropertyLengthAsVariant', 'RestoreEm87Context',
+            'SaveEm87Context'
+            )
+        ),
+    'SYMBOLS' => array(
+        '(', ')', '{', '}', '[', ']',
+        '+', '-', '*', '/', '%',
+        '=', '<', '>',
+        '!', '^', '&', '|',
+        '?', ':',
+        ';', ','
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => true,
+        2 => true,
+        3 => true,
+        4 => true,
+        5 => true,
+        6 => true
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #b1b100;',
+            2 => 'color: #000000; font-weight: bold;',
+            3 => 'color: #000066;',
+            4 => 'color: #993333;',
+            5 => 'color: #4000dd;',
+            6 => 'color: #4000dd;'
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #666666; font-style: italic;',
+            2 => 'color: #339933;',
+            'MULTI' => 'color: #808080; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #000099; font-weight: bold;',
+            1 => 'color: #000099; font-weight: bold;',
+            2 => 'color: #660099; font-weight: bold;',
+            3 => 'color: #660099; font-weight: bold;',
+            4 => 'color: #660099; font-weight: bold;',
+            5 => 'color: #006699; font-weight: bold;',
+            'HARD' => '',
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #009900;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #ff0000;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #0000dd;',
+            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+            ),
+        'METHODS' => array(
+            1 => 'color: #202020;',
+            2 => 'color: #202020;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #339933;'
+            ),
+        'REGEXPS' => array(
+            ),
+        'SCRIPT' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+        4 => '',
+        5 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
+        6 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com'
+        ),
+    'OOLANG' => true,
+    'OBJECT_SPLITTERS' => array(
+        1 => '.',
+        2 => '::'
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'TAB_WIDTH' => 4
+);
diff --git a/inc/geshi/caddcl.php b/vendor/easybook/geshi/geshi/caddcl.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/caddcl.php
rename to vendor/easybook/geshi/geshi/caddcl.php
index 8b8b2f248e930e6f60ddfd5d76e6eedd261882cd..0135a7aec99a5c2c5706e3a84569ad155dbbd422
--- a/inc/geshi/caddcl.php
+++ b/vendor/easybook/geshi/geshi/caddcl.php
@@ -122,5 +122,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/cadlisp.php b/vendor/easybook/geshi/geshi/cadlisp.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/cadlisp.php
rename to vendor/easybook/geshi/geshi/cadlisp.php
index 3fa7ead0977d84a446f802715ed8fb3c2936d743..41d72ca278c5b8337afb54f005f803bb6772c026
--- a/inc/geshi/cadlisp.php
+++ b/vendor/easybook/geshi/geshi/cadlisp.php
@@ -182,5 +182,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/cfdg.php b/vendor/easybook/geshi/geshi/cfdg.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/cfdg.php
rename to vendor/easybook/geshi/geshi/cfdg.php
index e40963f060ab065e1cda89d6c5d7d45f3abe4ae0..eeb7c2f3d4ed5ae1dde11878a70f0bf7483fbf0f
--- a/inc/geshi/cfdg.php
+++ b/vendor/easybook/geshi/geshi/cfdg.php
@@ -120,5 +120,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/cfm.php b/vendor/easybook/geshi/geshi/cfm.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/cfm.php
rename to vendor/easybook/geshi/geshi/cfm.php
diff --git a/inc/geshi/chaiscript.php b/vendor/easybook/geshi/geshi/chaiscript.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/chaiscript.php
rename to vendor/easybook/geshi/geshi/chaiscript.php
diff --git a/vendor/easybook/geshi/geshi/chapel.php b/vendor/easybook/geshi/geshi/chapel.php
new file mode 100644
index 0000000000000000000000000000000000000000..d0e50e6149ee8de4fce484e687081f757875dd85
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/chapel.php
@@ -0,0 +1,169 @@
+<?php
+/*************************************************************************************
+ * chapel.php
+ * -----
+ * Author: Richard Molitor (richard.molitor@student.kit.edu)
+ * Copyright: (c) 2013 Richard Molitor
+ * Release Version: 1.0.8.12
+ * Date Started: 2013/06/22
+ *
+ * Chapel language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2013/06/22 (1.0.8.12)
+ *   -  First Release
+ *
+ * TODO (updated 2013/06/22)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'Chapel',
+    'COMMENT_SINGLE' => array(1 => '//'),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'COMMENT_REGEXP' => array(
+        ),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'ESCAPE_REGEXP' => array(
+        ),
+    'NUMBERS' =>
+        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+        GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F |
+        GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+    'KEYWORDS' => array(
+        // statements
+        1 => array(
+            'atomic', 'begin', 'break', 'class', 'cobegin', 'coforall',
+            'continue', 'do', 'else', 'export', 'extern', 'for', 'forall', 'if',
+            'iter', 'inline', 'label', 'let', 'local', 'module',
+            'otherwise', 'proc', 'record', 'return', 'select', 'serial',
+            'then', 'use', 'var', 'when', 'where', 'while', 'yield'
+            ),
+        // literals
+        2 => array(
+            'nil', 'true', 'false'
+            ),
+        // built-in functions
+        3 => array(
+            'by', 'delete', 'dmapped', 'domain', 'enum', 'index', 'min',
+            'minloc', 'max', 'maxloc', 'new', 'range', 'reduce', 'scan',
+            'sparse', 'subdomain', 'sync', 'union', 'zip'
+            ),
+        // built-in types
+        4 => array(
+            'config', 'const', 'in', 'inout', 'opaque', 'on', 'out', 'param',
+            'ref', 'single', 'type'
+            ),
+        // library types
+        5 => array(
+            'void', 'bool', 'int', 'uint', 'real', 'imag', 'complex', 'string',
+            'locale'
+            ),
+        ),
+    'SYMBOLS' => array(
+        '(', ')', '{', '}', '[', ']',
+        '+', '-', '*', '/', '%',
+        '=', '<', '>',
+        '!', '^', '&', '|',
+        '?', ':',
+        ';', ','
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => true,
+        2 => true,
+        3 => true,
+        4 => true,
+        5 => true
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #b1b100;',
+            2 => 'color: #000000; font-weight: bold;',
+            3 => 'color: #000066;',
+            4 => 'color: #993333;'
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #666666; font-style: italic;',
+            //2 => 'color: #339933;',
+            'MULTI' => 'color: #808080; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #000099; font-weight: bold;',
+            1 => 'color: #000099; font-weight: bold;',
+            2 => 'color: #660099; font-weight: bold;',
+            3 => 'color: #660099; font-weight: bold;',
+            4 => 'color: #660099; font-weight: bold;',
+            5 => 'color: #006699; font-weight: bold;',
+            'HARD' => '',
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #009900;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #ff0000;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #0000dd;',
+            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+            ),
+        'METHODS' => array(
+            1 => 'color: #202020;',
+            2 => 'color: #202020;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #339933;'
+            ),
+        'REGEXPS' => array(
+            ),
+        'SCRIPT' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => '',
+        5 => ''
+        ),
+    'OOLANG' => true,
+    'OBJECT_SPLITTERS' => array(
+        1 => '.',
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'TAB_WIDTH' => 4
+);
diff --git a/inc/geshi/cil.php b/vendor/easybook/geshi/geshi/cil.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/cil.php
rename to vendor/easybook/geshi/geshi/cil.php
index 9872e755fc4dbc15ae9dd5bddbb11e8d8531c443..a108f2498c6293728fd90b3b5b8b86f718e33bfc
--- a/inc/geshi/cil.php
+++ b/vendor/easybook/geshi/geshi/cil.php
@@ -192,5 +192,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/clojure.php b/vendor/easybook/geshi/geshi/clojure.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/clojure.php
rename to vendor/easybook/geshi/geshi/clojure.php
diff --git a/inc/geshi/cmake.php b/vendor/easybook/geshi/geshi/cmake.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/cmake.php
rename to vendor/easybook/geshi/geshi/cmake.php
diff --git a/vendor/easybook/geshi/geshi/cobol.php b/vendor/easybook/geshi/geshi/cobol.php
new file mode 100755
index 0000000000000000000000000000000000000000..1280a4c7e9962c50c7d82deece311614c042272d
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/cobol.php
@@ -0,0 +1,457 @@
+<?php
+/*************************************************************************************
+ * cobol.php
+ * ----------
+ * Author: BenBE (BenBE@omorphia.org)
+ * Copyright: (c) 2007-2008 BenBE (http://www.omorphia.de/)
+ * Release Version: 1.0.8.12
+ * Date Started: 2007/07/02
+ *
+ * COBOL language file for GeSHi.
+ *
+ * Most of the compiler directives, reserved words and intrinsic functions are
+ * from the 2009 COBOL Draft Standard, Micro Focus, and GNU Cobol. The lists of
+ * these were found in the draft standard (Sections 8.9, 8.10, 8.11 and 8.12),
+ * Micro Focus' COBOL Language Reference and the GNU Cobol FAQ.
+ *
+ * CHANGES
+ * -------
+ * 2013/11/17 (1.0.8.12)
+ *  -  Changed compiler directives to be handled like comments.
+ *  -  Fixed bug where keywords in identifiers were highlighted.
+ * 2013/08/19 (1.0.8.12)
+ *  -  Added more intrinsic functions, reserved words, and compiler directives
+ *     from the (upcoming) standard.
+ * 2013/07/07 (1.0.8.12)
+ *  -  Added more reserved words, compiler directives and intrinsic functions.
+ *  -  Added modern comment syntax and corrected the other one.
+ *  -  Set OOLANG to true and added an object splitter.
+ *  -  Added extra symbols.
+ *  -  Fixed bug where scope terminators were only the statement in
+ *     end-statement was highlighted.
+ *
+ * TODO (updated 2013/11/17)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'COBOL',
+    'COMMENT_SINGLE' => array(
+        1 => '*>', // COBOL 2002 inline comment
+        2 => '>>'  // COBOL compiler directive indicator
+        ),
+    'COMMENT_MULTI' => array(),
+    'COMMENT_REGEXP' => array(
+        1 => '/^......(\*.*?$)/m', // Fixed-form comment
+        2 => '/\$SET.*/i'          // MF compiler directive indicator
+        ),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array('"', "'"),
+    'ESCAPE_CHAR' => '',
+    'NUMBERS' =>
+        GESHI_NUMBER_INT_BASIC |
+        GESHI_NUMBER_FLT_NONSCI |
+        GESHI_NUMBER_FLT_SCI_SHORT |
+        GESHI_NUMBER_FLT_SCI_ZERO,
+    'KEYWORDS' => array(
+        // Statements containing spaces. These are separate to other statements
+        // so that they are highlighted correctly.
+        1 => array(
+            'DELETE FILE', 'GO TO', 'NEXT SENTENCE', 'XML GENERATE',
+            'XML PARSE'
+            ),
+
+        2 => array( // Other Reserved Words
+            '3-D', 'ABSENT', 'ABSTRACT', 'ACCESS', 'ACQUIRE',
+            'ACTION', 'ACTIVE-CLASS', 'ACTIVE-X', 'ACTUAL', 'ADDRESS',
+            'ADDRESS-ARRAY', 'ADDRESS-OFFSET', 'ADJUSTABLE-COLUMNS',
+            'ADVANCING', 'AFP-5A', 'AFTER', 'ALIGNED', 'ALIGNMENT', 'ALL',
+            'ALLOW', 'ALLOWING', 'ALPHABET', 'ALPHABETIC',
+            'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER', 'ALPHANUMERIC',
+            'ALPHANUMERIC-EDITED', 'ALSO', 'ALTERNATE', 'AND', 'ANY',
+            'ANYCASE',
+            'APPLY', 'ARE', 'AREA', 'AREAS', 'ARGUMENT-NUMBER',
+            'ARGUMENT-VALUE',
+            'ARITHMETIC', 'AS', 'ASCENDING',
+            'ASSEMBLY-ATTRIBUTES', 'ASSIGN', 'AT', 'ATTRIBUTE', 'AUTHOR',
+            'AUTO', 'AUTO-DECIMAL', 'AUTO-HYPHEN-SKIP', 'AUTO-MINIMIZE',
+            'AUTO-RESIZE', 'AUTO-SKIP', 'AUTO-SPIN', 'AUTOMATIC',
+            'AUTOTERMINATE', 'AWAY-FROM-ZERO',
+            'AX-EVENT-LIST', 'B-AND', 'B-EXOR', 'B-LEFT',
+            'B-NOT', 'B-OR', 'B-RIGHT', 'B-XOR', 'BACKGROUND-COLOR',
+            'BACKGROUND-COLOUR', 'BACKGROUND-HIGH', 'BACKGROUND-LOW',
+            'BACKGROUND-STANDARD', 'BACKWARD', 'BAR', 'BASED', 'BASIS', 'BEEP',
+            'BEFORE', 'BEGINNING', 'BELL', 'BINARY', 'BINARY-CHAR',
+            'BINARY-DOUBLE', 'BINARY-LONG', 'BINARY-SHORT', 'BIND', 'BIT',
+            'BITMAP', 'BITMAP-END', 'BITMAP-HANDLE', 'BITMAP-NUMBER',
+            'BITMAP-RAW-HEIGHT', 'BITMAP-RAW-WIDTH', 'BITMAP-SCALE',
+            'BITMAP-START', 'BITMAP-TIMER', 'BITMAP-TRAILING', 'BITMAP-WIDTH',
+            'BLANK', 'BLINK', 'BLINKING', 'BLOB', 'BLOB-FILE', 'BLOB-LOCATOR',
+            'BLOCK', 'BOLD', 'BOOLEAN', 'BOTTOM', 'BOX', 'BOXED', 'BROWSING',
+            'BUSY', 'BUTTONS', 'BY', 'C01', 'C02', 'C03', 'C04',
+            'C05',
+            'C06', 'C07', 'C08', 'C09', 'C10', 'C11', 'C12', 'CALENDAR-FONT',
+            'CALLED', 'CANCEL-BUTTON', 'CAPACITY', 'CATCH', 'CBL',
+            'CBL-CTR', 'CCOL', 'CD', 'CELL', 'CELL-COLOR', 'CELL-DATA',
+            'CELL-FONT', 'CELL-PROTECTION', 'CELLS', 'CENTER', 'CENTERED',
+            'CENTERED-HEADINGS', 'CENTURY-DATE', 'CENTURY-DAY', 'CF', 'CH',
+            'CHAINING', 'CHANGED', 'CHAR-VARYING',
+            'CHARACTER',
+            'CHARACTERS', 'CHART', 'CHECK-BOX', 'CHECKING', 'CLASS',
+            'CLASS-ATTRIBUTES', 'CLASS-CONTROL', 'CLASS-ID', 'CLASS-OBJECT',
+            'CLASSIFICATION',
+            'CLEAR-SELECTION', 'CLINE', 'CLINES', 'CLOB', 'CLOB-FILE',
+            'CLOB-LOCATOR', 'CLOCK-UNITS', 'COBOL', 'CODE', 'CODE-SET',
+            'COERCION', 'COL', 'COLLATING', 'COLORS', 'COLOUR',
+            'COLOURS', 'COLS', 'COLUMN', 'COLUMN-COLOR', 'COLUMN-DIVIDERS',
+            'COLUMN-FONT', 'COLUMN-HEADINGS', 'COLUMN-PROTECTION', 'COLUMNS',
+            'COM-REG', 'COMBO-BOX', 'COMMA', 'COMMITMENT', 'COMMON',
+            'COMMUNICATION', 'COMP', 'COMP-0', 'COMP-1', 'COMP-2', 'COMP-3',
+            'COMP-4', 'COMP-5', 'COMP-6', 'COMP-X', 'COMPRESSION',
+            'COMPUTATIONAL', 'COMPUTATIONAL-0', 'COMPUTATIONAL-1',
+            'COMPUTATIONAL-2', 'COMPUTATIONAL-3', 'COMPUTATIONAL-4',
+            'COMPUTATIONAL-5', 'COMPUTATIONAL-6', 'COMPUTATIONAL-X',
+            'CONDITION-VALUE', 'CONFIGURATION', 'CONSOLE', 'CONSTANT',
+            'CONSTRAIN', 'CONSTRAINTS', 'CONTAINS', 'CONTENT',
+            'CONTROL', 'CONTROL-AREA', 'CONTROLS', 'CONTROLS-UNCROPPED',
+            'CONVERSION', 'CONVERT', 'CONVERTING', 'COPY-SELECTION',
+            'CORE-INDEX', 'CORR', 'CORRESPONDING', 'COUNT',
+            'CREATING', 'CRT', 'CRT-UNDER', 'CSIZE', 'CSP', 'CURRENCY',
+            'CURSOR', 'CURSOR-COL', 'CURSOR-COLOR',
+            'CURSOR-FRAME-WIDTH', 'CURSOR-ROW', 'CURSOR-X', 'CURSOR-Y',
+            'CUSTOM-ATTRIBUTE', 'CUSTOM-PRINT-TEMPLATE', 'CYCLE', 'CYL-INDEX',
+            'CYL-OVERFLOW', 'DASHED', 'DATA', 'DATA-COLUMNS',
+            'DATA-POINTER', 'DATA-TYPES', 'DATABASE-KEY', 'DATABASE-KEY-LONG',
+            'DATE', 'DATE-COMPILED', 'DATE-ENTRY', 'DATE-RECORD',
+            'DATE-WRITTEN', 'DAY', 'DAY-OF-WEEK', 'DBCLOB', 'DBCLOB-FILE',
+            'DBCLOB-LOCATOR', 'DBCS', 'DE', 'DEBUG', 'DEBUG-CONTENTS',
+            'DEBUG-ITEM', 'DEBUG-LINE', 'DEBUG-NAME', 'DEBUG-SUB-1',
+            'DEBUG-SUB-2', 'DEBUG-SUB-3', 'DEBUGGING', 'DECIMAL',
+            'DECIMAL-POINT', 'DECLARATIVES', 'DEFAULT',
+            'DEFAULT-BUTTON', 'DEFAULT-FONT', 'DEFINITION',
+            'DELEGATE-ID', 'DELIMITED', 'DELIMITER', 'DEPENDING',
+            'DESCENDING', 'DESTINATION', 'DESTROY', 'DETAIL', 'DICTIONARY',
+            'DISABLE', 'DISC', 'DISJOINING', 'DISK', 'DISP',
+            'DISPLAY-1', 'DISPLAY-COLUMNS', 'DISPLAY-FORMAT', 'DISPLAY-ST',
+            'DIVIDER-COLOR', 'DIVIDERS', 'DIVISION', 'DOT-DASH',
+            'DOTTED', 'DOWN', 'DRAG-COLOR', 'DRAW', 'DROP', 'DROP-DOWN',
+            'DROP-LIST', 'DUPLICATES', 'DYNAMIC', 'EBCDIC', 'EC', 'ECHO', 'EGCS',
+            'EGI', 'EJECT', 'ELEMENTARY', 'ELSE', 'EMI', 'EMPTY-CHECK',
+            'ENABLE', 'ENABLED', 'END', 'END-ACCEPT', 'END-ADD', 'END-CALL',
+            'END-CHAIN', 'END-COLOR', 'END-COMPUTE', 'END-DELEGATE',
+            'END-DELETE', 'END-DISPLAY', 'END-DIVIDE', 'END-EVALUATE',
+            'END-IF', 'END-INVOKE', 'END-MODIFY', 'END-MOVE', 'END-MULTIPLY',
+            'END-OF-PAGE', 'END-PERFORM', 'END-READ', 'END-RECEIVE',
+            'END-RETURN', 'END-REWRITE', 'END-SEARCH', 'END-START',
+            'END-STRING', 'END-SUBTRACT', 'END-SYNC', 'END-TRY',
+            'END-UNSTRING', 'END-WAIT', 'END-WRITE', 'END-XML', 'ENDING',
+            'ENGRAVED', 'ENSURE-VISIBLE', 'ENTRY-CONVENTION',
+            'ENTRY-FIELD',
+            'ENTRY-REASON', 'ENUM', 'ENUM-ID', 'ENVIRONMENT',
+            'ENVIRONMENT-NAME', 'ENVIRONMENT-VALUE', 'EOL', 'EOP',
+            'EOS', 'EQUAL', 'EQUALS', 'ERASE', 'ERROR', 'ESCAPE',
+            'ESCAPE-BUTTON', 'ESI', 'EVENT', 'EVENT-LIST',
+            'EVENT-POINTER', 'EVERY', 'EXCEEDS', 'EXCEPTION',
+            'EXCEPTION-OBJECT', 'EXCEPTION-VALUE', 'EXCESS-3',
+            'EXCLUDE-EVENT-LIST', 'EXCLUSIVE',
+            'EXPAND', 'EXPANDS', 'EXTEND', 'EXTENDED',
+            'EXTENDED-SEARCH', 'EXTENSION', 'EXTERNAL', 'EXTERNAL-FORM',
+            'EXTERNALLY-DESCRIBED-KEY', 'FACTORY', 'FALSE', 'FD',
+            'FH--FCD', 'FH--KEYDEF', 'FILE', 'FILE-CONTROL', 'FILE-ID',
+            'FILE-LIMIT', 'FILE-LIMITS', 'FILE-NAME', 'FILE-POS', 'FILL-COLOR',
+            'FILL-COLOR2', 'FILL-PERCENT', 'FILLER', 'FINAL', 'FINALLY',
+            'FINISH-REASON', 'FIRST', 'FIXED', 'FIXED-FONT', 'FIXED-WIDTH',
+            'FLAT', 'FLAT-BUTTONS', 'FLOAT-BINARY-7', 'FLOAT-BINARY-16',
+            'FLOAT-BINARY-34', 'FLOAT-DECIMAL-16', 'FLOAT-DECIMAL-34',
+            'FLOAT-EXTENDED', 'FLOAT-LONG',
+            'FLOAT-SHORT', 'FLOATING', 'FONT', 'FOOTING', 'FOR',
+            'FOREGROUND-COLOR', 'FOREGROUND-COLOUR', 'FOREVER', 'FORMAT',
+            'FRAME', 'FRAMED', 'FROM', 'FULL', 'FULL-HEIGHT',
+            'FUNCTION', 'FUNCTION-ID', 'FUNCTION-POINTER', 'GENERATE',
+            'GET', 'GETTER', 'GIVING', 'GLOBAL', 'GO-BACK', 'GO-FORWARD',
+            'GO-HOME', 'GO-SEARCH', 'GRAPHICAL', 'GREATER', 'GRID',
+            'GRIP', 'GROUP', 'GROUP-USAGE', 'GROUP-VALUE', 'HANDLE',
+            'HAS-CHILDREN', 'HEADING', 'HEADING-COLOR', 'HEADING-DIVIDER-COLOR',
+            'HEADING-FONT', 'HEAVY', 'HEIGHT', 'HEIGHT-IN-CELLS', 'HELP-ID',
+            'HIDDEN-DATA', 'HIGH', 'HIGH-COLOR', 'HIGH-VALUE', 'HIGH-VALUES',
+            'HIGHLIGHT', 'HORIZONTAL', 'HOT-TRACK', 'HSCROLL', 'HSCROLL-POS',
+            'I-O', 'I-O-CONTROL', 'ICON', 'ID', 'IDENTIFICATION',
+            'IDENTIFIED', 'IFINITY', 'IGNORE', 'IGNORING', 'IMPLEMENTS', 'IN',
+            'INDEPENDENT', 'INDEX', 'INDEXED', 'INDEXER', 'INDEXER-ID', 'INDIC',
+            'INDICATE', 'INDICATOR', 'INDICATORS', 'INDIRECT',
+            'INHERITING', 'INHERITS',
+            'INITIAL', 'INITIALIZED', 'INPUT',
+            'INPUT-OUTPUT', 'INQUIRE', 'INSERT', 'INSERT-ROWS',
+            'INSERTION-INDEX', 'INSTALLATION', 'INSTANCE',
+            'INTERFACE', 'INTERFACE-ID', 'INTERMEDIATE',
+            'INTERNAL', 'INTO', 'INTRINSIC',
+            'INVALID', 'INVOKED', 'IS', 'ITEM', 'ITEM-BOLD',
+            'ITEM-ID', 'ITEM-TEXT', 'ITEM-TO-ADD', 'ITEM-TO-DELETE',
+            'ITEM-TO-EMPTY', 'ITEM-VALUE', 'ITERATOR', 'ITERATOR-ID', 'J',
+            'JOINED', 'JOINING', 'JUST', 'JUSTIFIED', 'KANJI',
+            'KEPT', 'KEY', 'KEY-YY', 'KEYBOARD', 'LABEL', 'LABEL-OFFSET',
+            'LARGE-FONT', 'LAST', 'LAST-ROW', 'LAYOUT-DATA', 'LAYOUT-MANAGER',
+            'LC_ALL', 'LC_COLLATE', 'LC_CTYPE', 'LC_CURRENCY', 'LC_MESSAGES',
+            'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME', 'LEADING', 'LEADING-SHIFT',
+            'LEAVE', 'LEFT', 'LEFT-JUSTIFY', 'LEFT-TEXT', 'LEFTLINE',
+            'LENGTH-CHECK', 'LESS', 'LIMIT', 'LIMITS', 'LIN', 'LINAGE',
+            'LINAGE-COUNTER', 'LINE', 'LINE-COUNTER', 'LINES', 'LINES-AT-ROOT',
+            'LINK', 'LINKAGE', 'LIST', 'LIST-BOX', 'LM-RESIZE', 'LOCAL-STORAGE',
+            'LOCALE', 'LOCK', 'LOCKING', 'LONG-DATE', 'LONG-VARBINARY',
+            'LONG-VARCHAR', 'LOW', 'LOW-COLOR', 'LOW-VALUE', 'LOW-VALUES',
+            'LOWER', 'LOWERED', 'LOWLIGHT', 'MANUAL', 'MASS-UPDATE',
+            'MASTER-INDEX', 'MAX-HEIGHT', 'MAX-LINES', 'MAX-PROGRESS',
+            'MAX-SIZE', 'MAX-TEXT', 'MAX-VAL', 'MAX-WIDTH', 'MDI-CHILD',
+            'MDI-FRAME', 'MEDIUM-FONT', 'MEMORY', 'MENU', 'MESSAGE',
+            'MESSAGES', 'METACLASS', 'METHOD', 'METHOD-ID', 'MIN-HEIGHT',
+            'MIN-LINES', 'MIN-SIZE', 'MIN-VAL', 'MIN-WIDTH', 'MODAL', 'MODE',
+            'MODELESS', 'MODIFIED', 'MODULES', 'MONITOR-POINTER',
+            'MORE-LABELS', 'MULTILINE',
+            'MUTEX-POINTER', 'NAME', 'NAMED', 'NATIONAL',
+            'NATIONAL-EDITED', 'NATIVE', 'NAVIGATE-URL', 'NCHAR',
+            'NEAREST-AWAY-FROM-ZERO', 'NEAREST-EVEN', 'NEAREST-TOWARD-ZERO',
+            'NEGATIVE', 'NEGATIVE-INFINITY',
+            'NESTED', 'NET-EVENT-LIST', 'NEW', 'NEWABLE', 'NEXT ', 'NEXT-ITEM',
+            'NO', 'NO-AUTO-DEFAULT', 'NO-AUTOSEL', 'NO-BOX', 'NO-CELL-DRAG',
+            'NO-CLOSE', 'NO-DIVIDERS', 'NO-ECHO', 'NO-F4', 'NO-FOCUS',
+            'NO-GROUP-TAB', 'NO-KEY-LETTER', 'NO-SEARCH', 'NO-TAB', 'NO-UPDOWN',
+            'NOMINAL', 'NONE', 'NORMAL', 'NOT', 'NOT-A-NUMBER', 'NOTIFY',
+            'NOTIFY-CHANGE', 'NOTIFY-DBLCLICK', 'NOTIFY-SELCHANGE',
+            'NSTD-REELS', 'NULL', 'NULLS', 'NUM-COL-HEADINGS',
+            'NUM-ROW-HEADINGS', 'NUM-ROWS', 'NUMBER', 'NUMBERS', 'NUMERIC',
+            'NUMERIC-EDITED', 'NUMERIC-FILL', 'O-FILL', 'OBJECT',
+            'OBJECT-COMPUTER', 'OBJECT-ID', 'OBJECT-REFERENCE',
+            'OBJECT-STORAGE', 'OCCURS', 'OF', 'OFF', 'OK-BUTTON', 'OMITTED',
+            'ONLY', 'OOSTACKPTR', 'OPERATOR', 'OPERATOR-ID',
+            'OPTIONAL', 'OPTIONS', 'OR', 'ORDER', 'ORGANIZATION', 'OTHER',
+            'OTHERWISE', 'OUTPUT', 'OVERFLOW', 'OVERLAP-LEFT', 'OVERLAP-TOP',
+            'OVERLAPPED', 'OVERLINE', 'OVERRIDE', 'PACKED-DECIMAL',
+            'PADDING', 'PAGE', 'PAGE-COUNTER', 'PAGE-SETUP', 'PAGE-SIZE',
+            'PAGED', 'PANEL-INDEX', 'PANEL-STYLE', 'PANEL-TEXT', 'PANEL-WIDTHS',
+            'PARAGRAPH', 'PARAMS', 'PARENT', 'PARSE', 'PARTIAL', 'PASSWORD',
+            'PERMANENT', 'PF', 'PH', 'PIC', 'PICTURE', 'PIXEL',
+            'PIXELS', 'PLACEMENT', 'PLUS', 'POINTER', 'POP-UP', 'POSITION',
+            'POSITION-SHIFT', 'POSITIONING', 'POSITIVE', 'POSITIVE-INFINITY',
+            'PREFIXED', 'PREFIXING', 'PRESENT',
+            'PREVIOUS', 'PRINT', 'PRINT-CONTROL', 'PRINT-NO-PROMPT',
+            'PRINT-PREVIEW', 'PRINT-SWITCH', 'PRINTER', 'PRINTER-1', 'PRINTING',
+            'PRIOR', 'PRIORITY', 'PRIVATE', 'PROCEDURE', 'PROCEDURE-POINTER',
+            'PROCEDURES', 'PROCEED', 'PROCESS', 'PROCESSING', 'PROGRAM',
+            'PROGRAM-ID', 'PROGRAM-POINTER', 'PROGRESS', 'PROHIBITED',
+            'PROMPT', 'PROPERTIES',
+            'PROPERTY', 'PROPERTY-ID', 'PROPERTY-VALUE', 'PROTECTED',
+            'PROTOTYPE', 'PUBLIC', 'PURGE', 'PUSH-BUTTON', 'QUERY-INDEX',
+            'QUEUE', 'QUOTE', 'QUOTES', 'RADIO-BUTTON', 'RAISED',
+            'RAISING', 'RD', 'READ-ONLY', 'READING',
+            'READY', 'RECORD', 'RECORD-DATA', 'RECORD-OVERFLOW',
+            'RECORD-TO-ADD', 'RECORD-TO-DELETE', 'RECORDING', 'RECORDS',
+            'RECURSIVE', 'REDEFINE', 'REDEFINES', 'REDEFINITION', 'REEL',
+            'REFERENCE', 'REFERENCES', 'REFRESH', 'REGION-COLOR', 'RELATION',
+            'RELATIVE', 'RELOAD', 'REMAINDER', 'REMARKS', 'REMOVAL',
+            'RENAMES', 'REORG-CRITERIA', 'REPEATED', 'REPLACE', 'REPLACING',
+            'REPORT', 'REPORTING', 'REPORTS', 'REPOSITORY', 'REQUIRED',
+            'REPRESENTS-NOT-A-NUMBER',
+            'REREAD', 'RERUN', 'RESERVE', 'RESET-GRID', 'RESET-LIST',
+            'RESET-TABS', 'RESIZABLE', 'RESTRICTED', 'RESULT-SET-LOCATOR',
+            'RETRY', 'RETURN-CODE', 'RETURNING',
+            'REVERSE-VIDEO', 'REVERSED', 'REWIND', 'RF', 'RH',
+            'RIGHT', 'RIGHT-ALIGN', 'RIGHT-JUSTIFY', 'RIMMED',
+            'ROLLING', 'ROUNDED', 'ROUNDING', 'ROW-COLOR', 'ROW-COLOR-PATTERN',
+            'ROW-DIVIDERS', 'ROW-FONT', 'ROW-HEADINGS', 'ROW-PROTECTION',
+            'ROWID', 'RUN', 'S01', 'S02', 'S03', 'S04', 'S05', 'SAME',
+            'SAVE-AS', 'SAVE-AS-NO-PROMPT', 'SCREEN', 'SCROLL', 'SCROLL-BAR',
+            'SD', 'SEARCH-OPTIONS', 'SEARCH-TEXT', 'SECONDS',
+            'SECTION', 'SECURE', 'SECURITY', 'SEEK', 'SEGMENT', 'SEGMENT-LIMIT',
+            'SELECT-ALL', 'SELECTION-INDEX', 'SELECTION-TEXT',
+            'SELECTIVE', 'SELF', 'SELF-ACT', 'SELFCLASS', 'SEMAPHORE-POINTER',
+            'SEND', 'SENTENCE', 'SEPARATE', 'SEPARATION', 'SEQUENCE',
+            'SEQUENTIAL', 'SETTER', 'SHADING', 'SHADOW',
+            'SHARING', 'SHIFT-IN', 'SHIFT-OUT', 'SHORT-DATE', 'SHOW-LINES',
+            'SHOW-NONE', 'SHOW-SEL-ALWAYS', 'SIGNED', 'SIGNED-INT',
+            'SIGNED-LONG', 'SIGNED-SHORT', 'SIZE', 'SKIP1',
+            'SKIP2', 'SKIP3', 'SMALL-FONT', 'SORT-CONTROL',
+            'SORT-CORE-SIZE', 'SORT-FILE-SIZE', 'SORT-MERGE', 'SORT-MESSAGE',
+            'SORT-MODE-SIZE', 'SORT-OPTION', 'SORT-ORDER', 'SORT-RETURN',
+            'SORT-TAPE', 'SORT-TAPES', 'SOURCE', 'SOURCE-COMPUTER', 'SOURCES',
+            'SPACE', 'SPACE-FILL', 'SPACES', 'SPECIAL-NAMES', 'SPINNER', 'SQL',
+            'SQUARE', 'STANDARD', 'STANDARD-1', 'STANDARD-2', 'STANDARD-3',
+            'STANDARD-BINARY', 'STANDARD-DECIMAL',
+            'START-X', 'START-Y', 'STARTING', 'STATEMENT', 'STATIC',
+            'STATIC-LIST',
+            'STATUS', 'STATUS-BAR', 'STATUS-TEXT', 'STEP',
+            'STOP-BROWSER', 'STRONG', 'STYLE', 'SUB-QUEUE-1',
+            'SUB-QUEUE-2', 'SUB-QUEUE-3', 'SUBFILE', 'SUBWINDOW',
+            'SUFFIXING', 'SUPER', 'SYMBOL', 'SYMBOLIC',
+            'SYNCHRONIZED', 'SYSIN', 'SYSIPT', 'SYSLST', 'SYSOUT',
+            'SYSPCH', 'SYSPUNCH', 'SYSTEM', 'SYSTEM-DEFAULT', 'SYSTEM-INFO',
+            'TAB', 'TAB-CONTROL', 'TAB-TO-ADD', 'TAB-TO-DELETE', 'TABLE',
+            'TALLY', 'TALLYING', 'TAPE', 'TAPES', 'TEMPORARY', 'TERMINAL',
+            'TERMINAL-INFO', 'TERMINATION-VALUE', 'TEST', 'TEXT',
+            'THAN', 'THEN', 'THREAD', 'THREAD-LOCAL', 'THREAD-LOCAL-STORAGE',
+            'THREAD-POINTER', 'THROUGH', 'THRU', 'THUMB-POSITION',
+            'TILED-HEADINGS', 'TIME', 'TIME-OF-DAY', 'TIME-OUT', 'TIME-RECORD',
+            'TIMEOUT', 'TIMES', 'TIMESTAMP', 'TIMESTAMP-OFFSET',
+            'TIMESTAMP-OFFSET-RECORD', 'TIMESTAMP-RECORD', 'TITLE', 'TITLE-BAR',
+            'TITLE-POSITION', 'TO', 'TOOL-BAR', 'TOP', 'TOTALED', 'TOTALING',
+            'TOWARD-GREATER', 'TOWARD-LESSER',
+            'TRACE', 'TRACK-AREA', 'TRACK-LIMIT', 'TRACK-THUMB', 'TRACKS',
+            'TRADITIONAL-FONT', 'TRAILING', 'TRAILING-SHIFT', 'TRAILING-SIGN',
+            'TRANSACTION', 'TRANSPARENT', 'TRANSPARENT-COLOR',
+            'TREE-VIEW', 'TRUE', 'TRUNCATION', 'TYPE', 'TYPEDEF', 'UCS-4',
+            'UNDERLINE', 'UNDERLINED', 'UNEQUAL', 'UNFRAMED', 'UNIT', 'UNITS',
+            'UNIVERSAL', 'UNSIGNED', 'UNSIGNED-INT', 'UNSIGNED-LONG',
+            'UNSIGNED-SHORT',
+            'UNSORTED', 'UP', 'UPDATE', 'UNTIL', 'UPON', 'UPPER',
+            'UPSI-0', 'UPSI-1', 'UPSI-2', 'UPSI-3', 'UPSI-4', 'UPSI-5',
+            'UPSI-6', 'UPSI-7', 'USAGE', 'USE-ALT', 'USE-RETURN',
+            'USE-TAB', 'USER', 'USER-COLORS', 'USER-DEFAULT', 'USER-GRAY',
+            'USER-WHITE', 'USING', 'UTF-16', 'UTF-8', 'VALID',
+            'VAL-STATUS', 'VALIDATE-STATUS',
+            'VALUE', 'VALUE-FORMAT', 'VALUES', 'VALUETYPE', 'VALUETYPE-ID',
+            'VARBINARY', 'VARIABLE', 'VARIANT', 'VARYING', 'VERTICAL',
+            'VERY-HEAVY', 'VIRTUAL-WIDTH', 'VISIBLE', 'VPADDING', 'VSCROLL',
+            'VSCROLL-BAR', 'VSCROLL-POS', 'VTOP', 'WEB-BROWSER', 'WHEN',
+            'WHERE', 'WIDTH', 'WIDTH-IN-CELLS', 'WINDOW',
+            'WITH', 'WORDS', 'WORKING-STORAGE', 'WRAP', 'WRITE-ONLY',
+            'WRITE-VERIFY', 'WRITING', ' XML', 'XML ', 'XML-CODE', 'XML-EVENT',
+            'XML-NTEXT', 'XML-TEXT', 'YIELDING', 'YYYYDDD', 'YYYYMMDD', 'ZERO',
+            'ZERO-FILL', 'ZEROES', 'ZEROS'
+            ),
+        3 => array( // Statement Keywords containing no spaces.
+            'ACCEPT', 'ADD', 'ALTER', 'ALLOCATE', 'ATTACH', 'CALL', 'CANCEL',
+            'CHAIN', 'CREATE',
+            'CLOSE', 'COLOR', 'COMPUTE', 'COMMIT', 'CONTINUE',
+            'COPY', 'DECLARE', 'DELEGATE', 'DELETE', 'DETACH', 'DISPLAY',
+            'DIVIDE',
+            'ENTER', 'ENTRY', 'EVALUATE', 'EXAMINE',
+            'EXEC', 'EXECUTE', 'EXHIBIT', 'EXIT', 'FREE', 'GOBACK',
+            'IF',  'INITIALIZE', 'INITIATE', 'INSPECT', 'INVOKE', 'MERGE',
+            'MODIFY', 'MOVE', 'MULTIPLY', 'NOTE', 'ON', 'OPEN',
+            'PERFORM', 'RAISE', 'READ', 'RECEIVE', 'RELEASE', 'RETURN',
+            'RESET', 'RESUME',
+            'REWRITE', 'ROLLBACK', 'SEARCH', 'SELECT', 'SERVICE', 'SET', 'SORT',
+            'START', 'STOP', 'STRING', 'SUBTRACT', 'SYNC',
+            'SUPPRESS', 'TERMINATE',
+            'TRANSFORM', 'TRY', 'UNLOCKFILE', 'UNLOCK', 'UNSTRING', 'USE',
+            'VALIDATE', 'WAIT', 'WRITE'
+            ),
+        4 => array( // Intrinsic functions
+            'ABS', 'ACOS', 'ANNUITY', 'ASIN', 'ATAN', 'BOOLEAN-OF-INTEGER',
+            'BYTE-LENGTH', 'CHAR', 'CHAR-NATIONAL',
+            'COS', 'COMBINED-DATETIME', 'CONCATENATE', 'CURRENT-DATE',
+            'DATE-OF-INTEGER', 'DATE-TO-YYYYMMDD', 'DAY-TO-YYYYDDD',
+            'DAY-OF-INTEGER', 'DISPLAY-OF', 'E', 'EXCEPTION-FILE',
+            'EXCEPTION-FILE-N', 'EXCEPTION-LOCATION',
+            'EXCEPTION-LOCATION-N', 'EXCEPTION-STATEMENT', 'EXCEPTION-STATUS',
+            'EXP', 'EXP10', 'FACTORIAL', 'FORMATTED-CURRENT-DATE',
+            'FORMATTED-DATE', 'FORMATTED-DATETIME', 'FORMATTED-TIME',
+            'FRACTION-PART', 'HIGHEST-ALGEBRAIC', 'INTEGER',
+            'INTEGER-OF-BOOLEAN', 'INTEGER-OF-DATE', 'INTEGER-OF-DAY',
+            'INTEGER-OF-FORMATTED-DATE', 'INTEGER-PART', 'LENGTH',
+            'LOCALE-COMPARE',
+            'LOCALE-DATE', 'LOCALE-TIME', 'LOCALE-TIME-FROM-SECONDS',
+            'LOCALE-TIME-FROM-SECS', 'LOG',
+            'LOG10', 'LOWER-CASE', 'LOWEST-ALGEBRAIC',
+            'MAX', 'MEAN', 'MEDIAN', 'MIDRANGE',
+            'MIN', 'MOD', 'NATIONAL-OF', 'NUMVAL', 'NUMVAL-C', 'NUMVAL-F',
+            'ORD', 'ORD-MAX', 'ORD-MIN',
+            'PI', 'PRESENT-VALUE', 'RANDOM', 'RANGE', 'REM', 'REVERSE',
+            'SECONDS-FROM-FORMATTED-TIME', 'SIGN', 'SIN', 'SQRT',
+            'SECONDS-PAST-MIDNIGHT', 'STANDARD-DEVIATION', 'STANDARD-COMPARE',
+            'STORED-CHAR-LENGTH',
+            'SUBSTITUTE', 'SUBSTITUE-CASE', 'SUM', 'TAN', 'TEST-DATE-YYYYMMDD',
+            'TEST-DAY-YYYYDDD', 'TEST-FORMATTED-TIME', 'TEST-NUMVAL',
+            'TEST-NUMVAL-C', 'TEST-NUMVAL-F',
+            'TRIM', 'UPPER-CASE', 'VARIANCE', 'YEAR-TO-YYYY', 'WHEN-COMPILED'
+            ),
+        ),
+    'SYMBOLS' => array(
+        //  Arithmetic and comparison operators must be surrounded by spaces.
+        ' + ', ' - ', ' * ', ' / ', ' ** ', ' ^ ',
+        '.', ',',
+        ' = ', ' < ', ' > ', ' >= ', ' <= ', ' <> ',
+        '(', ')', '[', ']'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false,
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #000000; font-weight: bold;',
+            2 => 'color: #008000; font-weight: bold;',
+            3 => 'color: #000000; font-weight: bold;',
+            4 => 'color: #9d7700;',
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #a0a0a0; font-style: italic;',
+            2 => 'color: #000080; font-weight: bold;',
+            ),
+        'ESCAPE_CHAR' => array(
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #339933;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #ff0000;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #993399;'
+            ),
+        'METHODS' => array(
+            1 => 'color: #800080;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #000066;'
+            ),
+        'REGEXPS' => array(
+            ),
+        'SCRIPT' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => ''
+        ),
+    'OOLANG' => true,
+    'OBJECT_SPLITTERS' => array(
+        1 => '::'
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'TAB_WIDTH' => 4,
+    'PARSER_CONTROL' => array(
+        'KEYWORDS' => array(
+            'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9-\$_\|\#|^&])',
+        ),
+    ),
+);
diff --git a/inc/geshi/coffeescript.php b/vendor/easybook/geshi/geshi/coffeescript.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/coffeescript.php
rename to vendor/easybook/geshi/geshi/coffeescript.php
diff --git a/inc/geshi/cpp-qt.php b/vendor/easybook/geshi/geshi/cpp-qt.php
old mode 100644
new mode 100755
similarity index 98%
rename from inc/geshi/cpp-qt.php
rename to vendor/easybook/geshi/geshi/cpp-qt.php
index 36626c90d4cb50066851d584280ba0b9934bc7c2..44f2d215f712754969ca5d5f92fb8d053568093a
--- a/inc/geshi/cpp-qt.php
+++ b/vendor/easybook/geshi/geshi/cpp-qt.php
@@ -48,7 +48,11 @@ $language_data = array (
         //Multiline-continued single-line comments
         1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
         //Multiline-continued preprocessor define
-        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+        //C++ 11 string literal extensions
+        3 => '/(?:L|u8?|U)(?=")/',
+        //C++ 11 string literal extensions (raw)
+        4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
         ),
     'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
     'QUOTEMARKS' => array("'", '"'),
@@ -489,6 +493,8 @@ $language_data = array (
         'COMMENTS' => array(
             1 => 'color: #888888;',
             2 => 'color: #006E28;',
+            3 => 'color: #BF0303;',
+            4 => 'color: #BF0303;',
             'MULTI' => 'color: #888888; font-style: italic;'
             ),
         'ESCAPE_CHAR' => array(
@@ -534,7 +540,7 @@ $language_data = array (
         2 => '',
         3 => '',
         4 => '',
-        5 => 'http://doc.trolltech.com/latest/{FNAMEL}.html'
+        5 => 'http://doc.qt.io/qt-5/{FNAMEL}.html'
         ),
     'OOLANG' => true,
     'OBJECT_SPLITTERS' => array(
diff --git a/vendor/easybook/geshi/geshi/cpp-winapi.php b/vendor/easybook/geshi/geshi/cpp-winapi.php
new file mode 100644
index 0000000000000000000000000000000000000000..ddc70b688267d38efdd936570a4faed717ea0ffe
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/cpp-winapi.php
@@ -0,0 +1,836 @@
+<?php
+/*************************************************************************************
+ * cpp-winapi.php
+ * -------
+ * Author: Dennis Bayer (Dennis.Bayer@mnifh-giessen.de)
+ * Contributors:
+ *  - M. Uli Kusterer (witness.of.teachtext@gmx.net)
+ *  - Jack Lloyd (lloyd@randombit.net)
+ *  - Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2004 Dennis Bayer, Nigel McNie, 2012 Benny Baumann (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.11
+ * Date Started: 2004/09/27
+ *
+ * C++ language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ *  -  Added description of extra language features (SF#1970248)
+ * 2004/XX/XX (1.0.2)
+ *  -  Added several new keywords (Jack Lloyd)
+ * 2004/11/27 (1.0.1)
+ *  -  Added StdCLib function and constant names, changed color scheme to
+ *     a cleaner one. (M. Uli Kusterer)
+ *  -  Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ *  -  First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'C++ (WinAPI)',
+    'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'COMMENT_REGEXP' => array(
+        //Multiline-continued single-line comments
+        1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+        //Multiline-continued preprocessor define
+        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+        //C++ 11 string literal extensions
+        3 => '/(?:L|u8?|U)(?=")/',
+        //C++ 11 string literal extensions (raw)
+        4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
+        ),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'ESCAPE_REGEXP' => array(
+        //Simple Single Char Escapes
+        1 => "#\\\\[abfnrtv\\\'\"?\n]#i",
+        //Hexadecimal Char Specs
+        2 => "#\\\\x[\da-fA-F]{2}#",
+        //Hexadecimal Char Specs
+        3 => "#\\\\u[\da-fA-F]{4}#",
+        //Hexadecimal Char Specs
+        4 => "#\\\\U[\da-fA-F]{8}#",
+        //Octal Char Specs
+        5 => "#\\\\[0-7]{1,3}#"
+        ),
+    'NUMBERS' =>
+        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+        GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+    'KEYWORDS' => array(
+        1 => array(
+            'break', 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
+            'switch', 'throw', 'while'
+            ),
+        2 => array(
+            'NULL', 'false', 'true', 'enum', 'errno', 'EDOM',
+            'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+            'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+            'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+            'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+            'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+            'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+            'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+            'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+            'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
+            'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
+            'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
+            'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
+            'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
+            'static_cast', 'explicit', 'friend', 'typename', 'typeid', 'class'
+            ),
+        3 => array(
+            'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
+            'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+            'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+            'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+            'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+            'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+            'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+            'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+            'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+            'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+            'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+            'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+            'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+            'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+            'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+            'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+            'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+            'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+            'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+            'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+            ),
+        4 => array(
+            'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
+            'register', 'short', 'shortint', 'signed', 'static', 'struct',
+            'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
+            'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+            'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', 'wchar_t',
+
+            'int8', 'int16', 'int32', 'int64',
+            'uint8', 'uint16', 'uint32', 'uint64',
+
+            'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
+            'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
+
+            'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
+            'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
+
+            'int8_t', 'int16_t', 'int32_t', 'int64_t',
+            'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
+
+            'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t'
+            ),
+        // Public API
+        5 => array(
+            'AssignProcessToJobObject', 'CommandLineToArgvW', 'ConvertThreadToFiber',
+            'CreateFiber', 'CreateJobObjectA', 'CreateJobObjectW', 'CreateProcessA',
+            'CreateProcessAsUserA', 'CreateProcessAsUserW', 'CreateProcessW',
+            'CreateRemoteThread', 'CreateThread', 'DeleteFiber', 'ExitProcess',
+            'ExitThread', 'FreeEnvironmentStringsA', 'FreeEnvironmentStringsW',
+            'GetCommandLineA', 'GetCommandLineW', 'GetCurrentProcess',
+            'GetCurrentProcessId', 'GetCurrentThread', 'GetCurrentThreadId',
+            'GetEnvironmentStringsA', 'GetEnvironmentStringsW',
+            'GetEnvironmentVariableA', 'GetEnvironmentVariableW', 'GetExitCodeProcess',
+            'GetExitCodeThread', 'GetGuiResources', 'GetPriorityClass',
+            'GetProcessAffinityMask', 'GetProcessPriorityBoost',
+            'GetProcessShutdownParameters', 'GetProcessTimes', 'GetProcessVersion',
+            'GetProcessWorkingSetSize', 'GetStartupInfoA', 'GetStartupInfoW',
+            'GetThreadPriority', 'GetThreadPriorityBoost', 'GetThreadTimes',
+            'OpenJobObjectA', 'OpenJobObjectW', 'OpenProcess',
+            'QueryInformationJobObject', 'ResumeThread', 'SetEnvironmentVariableA',
+            'SetEnvironmentVariableW', 'SetInformationJobObject', 'SetPriorityClass',
+            'SetProcessAffinityMask', 'SetProcessPriorityBoost',
+            'SetProcessShutdownParameters', 'SetProcessWorkingSetSize',
+            'SetThreadAffinityMask', 'SetThreadIdealProcessor', 'SetThreadPriority',
+            'SetThreadPriorityBoost', 'Sleep', 'SleepEx', 'SuspendThread',
+            'SwitchToFiber', 'SwitchToThread', 'TerminateJobObject', 'TerminateProcess',
+            'TerminateThread', 'WaitForInputIdle', 'WinExec',
+
+            '_hread', '_hwrite', '_lclose', '_lcreat', '_llseek', '_lopen', '_lread',
+            '_lwrite', 'AreFileApisANSI', 'CancelIo', 'CopyFileA', 'CopyFileW',
+            'CreateDirectoryA', 'CreateDirectoryExA', 'CreateDirectoryExW',
+            'CreateDirectoryW', 'CreateFileA', 'CreateFileW', 'DeleteFileA',
+            'DeleteFileW', 'FindClose', 'FindCloseChangeNotification',
+            'FindFirstChangeNotificationA', 'FindFirstChangeNotificationW',
+            'FindFirstFileA', 'FindFirstFileW', 'FindNextFileA', 'FindNextFileW',
+            'FlushFileBuffers', 'GetCurrentDirectoryA', 'GetCurrentDirectoryW',
+            'GetDiskFreeSpaceA', 'GetDiskFreeSpaceExA', 'GetDiskFreeSpaceExW',
+            'GetDiskFreeSpaceW', 'GetDriveTypeA', 'GetDriveTypeW', 'GetFileAttributesA',
+            'GetFileAttributesExA', 'GetFileAttributesExW', 'GetFileAttributesW',
+            'GetFileInformationByHandle', 'GetFileSize', 'GetFileType',
+            'GetFullPathNameA', 'GetFullPathNameW', 'GetLogicalDrives',
+            'GetLogicalDriveStringsA', 'GetLogicalDriveStringsW', 'GetLongPathNameA',
+            'GetLongPathNameW', 'GetShortPathNameA', 'GetShortPathNameW',
+            'GetTempFileNameA', 'GetTempFileNameW', 'GetTempPathA', 'GetTempPathW',
+            'LockFile', 'MoveFileA', 'MoveFileW', 'MulDiv', 'OpenFile',
+            'QueryDosDeviceA', 'QueryDosDeviceW', 'ReadFile', 'ReadFileEx',
+            'RemoveDirectoryA', 'RemoveDirectoryW', 'SearchPathA', 'SearchPathW',
+            'SetCurrentDirectoryA', 'SetCurrentDirectoryW', 'SetEndOfFile',
+            'SetFileApisToANSI', 'SetFileApisToOEM', 'SetFileAttributesA',
+            'SetFileAttributesW', 'SetFilePointer', 'SetHandleCount',
+            'SetVolumeLabelA', 'SetVolumeLabelW', 'UnlockFile', 'WriteFile',
+            'WriteFileEx',
+
+            'DeviceIoControl',
+
+            'GetModuleFileNameA', 'GetModuleFileNameW', 'GetProcAddress',
+            'LoadLibraryA', 'LoadLibraryExA', 'LoadLibraryExW', 'LoadLibraryW',
+            'LoadModule',
+
+            'GetPrivateProfileIntA', 'GetPrivateProfileIntW',
+            'GetPrivateProfileSectionA', 'GetPrivateProfileSectionNamesA',
+            'GetPrivateProfileSectionNamesW', 'GetPrivateProfileSectionW',
+            'GetPrivateProfileStringA', 'GetPrivateProfileStringW',
+            'GetPrivateProfileStructA', 'GetPrivateProfileStructW',
+            'GetProfileIntA', 'GetProfileIntW', 'GetProfileSectionA',
+            'GetProfileSectionW', 'GetProfileStringA', 'GetProfileStringW',
+            'RegCloseKey', 'RegConnectRegistryA', 'RegConnectRegistryW',
+            'RegCreateKeyA', 'RegCreateKeyExA', 'RegCreateKeyExW',
+            'RegCreateKeyW', 'RegDeleteKeyA', 'RegDeleteKeyW', 'RegDeleteValueA',
+            'RegDeleteValueW', 'RegEnumKeyA', 'RegEnumKeyExA', 'RegEnumKeyExW',
+            'RegEnumKeyW', 'RegEnumValueA', 'RegEnumValueW', 'RegFlushKey',
+            'RegGetKeySecurity', 'RegLoadKeyA', 'RegLoadKeyW',
+            'RegNotifyChangeKeyValue', 'RegOpenKeyA', 'RegOpenKeyExA', 'RegOpenKeyExW',
+            'RegOpenKeyW', 'RegOverridePredefKey', 'RegQueryInfoKeyA',
+            'RegQueryInfoKeyW', 'RegQueryMultipleValuesA', 'RegQueryMultipleValuesW',
+            'RegQueryValueA', 'RegQueryValueExA', 'RegQueryValueExW', 'RegQueryValueW',
+            'RegReplaceKeyA', 'RegReplaceKeyW', 'RegRestoreKeyA', 'RegRestoreKeyW',
+            'RegSaveKeyA', 'RegSaveKeyW', 'RegSetKeySecurity', 'RegSetValueA',
+            'RegSetValueExA', 'RegSetValueExW', 'RegSetValueW', 'RegUnLoadKeyA',
+            'RegUnLoadKeyW', 'WritePrivateProfileSectionA', 'WritePrivateProfileSectionW',
+            'WritePrivateProfileStringA', 'WritePrivateProfileStringW',
+            'WritePrivateProfileStructA', 'WritePrivateProfileStructW',
+            'WriteProfileSectionA', 'WriteProfileSectionW', 'WriteProfileStringA',
+            'WriteProfileStringW',
+
+            'AccessCheck', 'AccessCheckAndAuditAlarmA', 'AccessCheckAndAuditAlarmW',
+            'AccessCheckByType', 'AccessCheckByTypeAndAuditAlarmA',
+            'AccessCheckByTypeAndAuditAlarmW', 'AccessCheckByTypeResultList',
+            'AccessCheckByTypeResultListAndAuditAlarmA', 'AccessCheckByTypeResultListAndAuditAlarmW',
+            'AddAccessAllowedAce', 'AddAccessAllowedAceEx', 'AddAccessAllowedObjectAce',
+            'AddAccessDeniedAce', 'AddAccessDeniedAceEx', 'AddAccessDeniedObjectAce',
+            'AddAce', 'AddAuditAccessAce', 'AddAuditAccessAceEx', 'AddAuditAccessObjectAce',
+            'AdjustTokenGroups', 'AdjustTokenPrivileges', 'AllocateAndInitializeSid',
+            'AllocateLocallyUniqueId', 'AreAllAccessesGranted', 'AreAnyAccessesGranted',
+            'BuildExplicitAccessWithNameA', 'BuildExplicitAccessWithNameW',
+            'BuildImpersonateExplicitAccessWithNameA', 'BuildImpersonateExplicitAccessWithNameW',
+            'BuildImpersonateTrusteeA', 'BuildImpersonateTrusteeW', 'BuildSecurityDescriptorA',
+            'BuildSecurityDescriptorW', 'BuildTrusteeWithNameA', 'BuildTrusteeWithNameW',
+            'BuildTrusteeWithSidA', 'BuildTrusteeWithSidW',
+            'ConvertToAutoInheritPrivateObjectSecurity', 'CopySid', 'CreatePrivateObjectSecurity',
+            'CreatePrivateObjectSecurityEx', 'CreateRestrictedToken', 'DeleteAce',
+            'DestroyPrivateObjectSecurity', 'DuplicateToken', 'DuplicateTokenEx',
+            'EqualPrefixSid', 'EqualSid', 'FindFirstFreeAce', 'FreeSid', 'GetAce',
+            'GetAclInformation', 'GetAuditedPermissionsFromAclA', 'GetAuditedPermissionsFromAclW',
+            'GetEffectiveRightsFromAclA', 'GetEffectiveRightsFromAclW',
+            'GetExplicitEntriesFromAclA', 'GetExplicitEntriesFromAclW', 'GetFileSecurityA',
+            'GetFileSecurityW', 'GetKernelObjectSecurity', 'GetLengthSid', 'GetMultipleTrusteeA',
+            'GetMultipleTrusteeOperationA', 'GetMultipleTrusteeOperationW', 'GetMultipleTrusteeW',
+            'GetNamedSecurityInfoA', 'GetNamedSecurityInfoW', 'GetPrivateObjectSecurity',
+            'GetSecurityDescriptorControl', 'GetSecurityDescriptorDacl',
+            'GetSecurityDescriptorGroup', 'GetSecurityDescriptorLength',
+            'GetSecurityDescriptorOwner', 'GetSecurityDescriptorSacl', 'GetSecurityInfo',
+            'GetSidIdentifierAuthority', 'GetSidLengthRequired', 'GetSidSubAuthority',
+            'GetSidSubAuthorityCount', 'GetTokenInformation', 'GetTrusteeFormA',
+            'GetTrusteeFormW', 'GetTrusteeNameA', 'GetTrusteeNameW', 'GetTrusteeTypeA',
+            'GetTrusteeTypeW', 'GetUserObjectSecurity', 'ImpersonateLoggedOnUser',
+            'ImpersonateNamedPipeClient', 'ImpersonateSelf', 'InitializeAcl',
+            'InitializeSecurityDescriptor', 'InitializeSid', 'IsTokenRestricted', 'IsValidAcl',
+            'IsValidSecurityDescriptor', 'IsValidSid', 'LogonUserA', 'LogonUserW',
+            'LookupAccountNameA', 'LookupAccountNameW', 'LookupAccountSidA', 'LookupAccountSidW',
+            'LookupPrivilegeDisplayNameA', 'LookupPrivilegeDisplayNameW', 'LookupPrivilegeNameA',
+            'LookupPrivilegeNameW', 'LookupPrivilegeValueA', 'LookupPrivilegeValueW',
+            'LookupSecurityDescriptorPartsA', 'LookupSecurityDescriptorPartsW', 'MakeAbsoluteSD',
+            'MakeSelfRelativeSD', 'MapGenericMask', 'ObjectCloseAuditAlarmA',
+            'ObjectCloseAuditAlarmW', 'ObjectDeleteAuditAlarmA', 'ObjectDeleteAuditAlarmW',
+            'ObjectOpenAuditAlarmA', 'ObjectOpenAuditAlarmW', 'ObjectPrivilegeAuditAlarmA',
+            'ObjectPrivilegeAuditAlarmW', 'OpenProcessToken', 'OpenThreadToken', 'PrivilegeCheck',
+            'PrivilegedServiceAuditAlarmA', 'PrivilegedServiceAuditAlarmW', 'RevertToSelf',
+            'SetAclInformation', 'SetEntriesInAclA', 'SetEntriesInAclW', 'SetFileSecurityA',
+            'SetFileSecurityW', 'SetKernelObjectSecurity', 'SetNamedSecurityInfoA',
+            'SetNamedSecurityInfoW', 'SetPrivateObjectSecurity', 'SetPrivateObjectSecurityEx',
+            'SetSecurityDescriptorControl', 'SetSecurityDescriptorDacl',
+            'SetSecurityDescriptorGroup', 'SetSecurityDescriptorOwner',
+            'SetSecurityDescriptorSacl', 'SetSecurityInfo', 'SetThreadToken',
+            'SetTokenInformation', 'SetUserObjectSecurity', 'ChangeServiceConfig2A',
+            'ChangeServiceConfig2W', 'ChangeServiceConfigA', 'ChangeServiceConfigW',
+            'CloseServiceHandle', 'ControlService', 'CreateServiceA', 'CreateServiceW',
+            'DeleteService', 'EnumDependentServicesA', 'EnumDependentServicesW',
+            'EnumServicesStatusA', 'EnumServicesStatusW', 'GetServiceDisplayNameA',
+            'GetServiceDisplayNameW', 'GetServiceKeyNameA', 'GetServiceKeyNameW',
+            'LockServiceDatabase', 'NotifyBootConfigStatus', 'OpenSCManagerA', 'OpenSCManagerW',
+            'OpenServiceA', 'OpenServiceW', 'QueryServiceConfig2A', 'QueryServiceConfig2W',
+            'QueryServiceConfigA', 'QueryServiceConfigW', 'QueryServiceLockStatusA',
+            'QueryServiceLockStatusW', 'QueryServiceObjectSecurity', 'QueryServiceStatus',
+            'RegisterServiceCtrlHandlerA', 'RegisterServiceCtrlHandlerW',
+            'SetServiceObjectSecurity', 'SetServiceStatus', 'StartServiceA',
+            'StartServiceCtrlDispatcherA', 'StartServiceCtrlDispatcherW', 'StartServiceW',
+            'UnlockServiceDatabase',
+
+            'MultinetGetConnectionPerformanceA', 'MultinetGetConnectionPerformanceW',
+            'NetAlertRaise', 'NetAlertRaiseEx', 'NetApiBufferAllocate', 'NetApiBufferFree',
+            'NetApiBufferReallocate', 'NetApiBufferSize', 'NetConnectionEnum', 'NetFileClose',
+            'NetFileGetInfo', 'NetGetAnyDCName', 'NetGetDCName', 'NetGetDisplayInformationIndex',
+            'NetGroupAdd', 'NetGroupAddUser', 'NetGroupDel', 'NetGroupDelUser', 'NetGroupEnum',
+            'NetGroupGetInfo', 'NetGroupGetUsers', 'NetGroupSetInfo', 'NetGroupSetUsers',
+            'NetLocalGroupAdd', 'NetLocalGroupAddMember', 'NetLocalGroupAddMembers',
+            'NetLocalGroupDel', 'NetLocalGroupDelMember', 'NetLocalGroupDelMembers',
+            'NetLocalGroupEnum', 'NetLocalGroupGetInfo', 'NetLocalGroupGetMembers',
+            'NetLocalGroupSetInfo', 'NetLocalGroupSetMembers', 'NetMessageBufferSend',
+            'NetMessageNameAdd', 'NetMessageNameDel', 'NetMessageNameEnum',
+            'NetMessageNameGetInfo', 'NetQueryDisplayInformation', 'NetRemoteComputerSupports',
+            'NetRemoteTOd', 'NetReplExportDirAdd', 'NetReplExportDirDel', 'NetReplExportDirEnum',
+            'NetReplExportDirGetInfo', 'NetReplExportDirLock', 'NetReplExportDirSetInfo',
+            'NetReplExportDirUnlock', 'NetReplGetInfo', 'NetReplImportDirAdd',
+            'NetReplImportDirDel', 'NetReplImportDirEnum', 'NetReplImportDirGetInfo',
+            'NetReplImportDirLock', 'NetReplImportDirUnlock', 'NetReplSetInfo',
+            'NetScheduleJobAdd', 'NetScheduleJobDel', 'NetScheduleJobEnum',
+            'NetScheduleJobGetInfo', 'NetServerComputerNameAdd', 'NetServerComputerNameDel',
+            'NetServerDiskEnum', 'NetServerEnum', 'NetServerEnumEx', 'NetServerGetInfo',
+            'NetServerSetInfo', 'NetServerTransportAdd', 'NetServerTransportAddEx',
+            'NetServerTransportDel', 'NetServerTransportEnum', 'NetSessionDel', 'NetSessionEnum',
+            'NetSessionGetInfo', 'NetShareAdd', 'NetShareCheck', 'NetShareDel', 'NetShareEnum',
+            'NetShareGetInfo', 'NetShareSetInfo', 'NetStatisticsGet', 'NetUseAdd', 'NetUseDel',
+            'NetUseEnum', 'NetUseGetInfo', 'NetUserAdd', 'NetUserChangePassword', 'NetUserDel',
+            'NetUserEnum', 'NetUserGetGroups', 'NetUserGetInfo', 'NetUserGetLocalGroups',
+            'NetUserModalsGet', 'NetUserModalsSet', 'NetUserSetGroups', 'NetUserSetInfo',
+            'NetWkstaGetInfo', 'NetWkstaSetInfo', 'NetWkstaTransportAdd', 'NetWkstaTransportDel',
+            'NetWkstaTransportEnum', 'NetWkstaUserEnum', 'NetWkstaUserGetInfo',
+            'NetWkstaUserSetInfo', 'WNetAddConnection2A', 'WNetAddConnection2W',
+            'WNetAddConnection3A', 'WNetAddConnection3W', 'WNetAddConnectionA',
+            'WNetAddConnectionW', 'WNetCancelConnection2A', 'WNetCancelConnection2W',
+            'WNetCancelConnectionA', 'WNetCancelConnectionW', 'WNetCloseEnum',
+            'WNetConnectionDialog', 'WNetConnectionDialog1A', 'WNetConnectionDialog1W',
+            'WNetDisconnectDialog', 'WNetDisconnectDialog1A', 'WNetDisconnectDialog1W',
+            'WNetEnumResourceA', 'WNetEnumResourceW', 'WNetGetConnectionA', 'WNetGetConnectionW',
+            'WNetGetLastErrorA', 'WNetGetLastErrorW', 'WNetGetNetworkInformationA',
+            'WNetGetNetworkInformationW', 'WNetGetProviderNameA', 'WNetGetProviderNameW',
+            'WNetGetResourceInformationA', 'WNetGetResourceInformationW',
+            'WNetGetResourceParentA', 'WNetGetResourceParentW', 'WNetGetUniversalNameA',
+            'WNetGetUniversalNameW', 'WNetGetUserA', 'WNetGetUserW', 'WNetOpenEnumA',
+            'WNetOpenEnumW', 'WNetUseConnectionA', 'WnetUseConnectionW',
+
+            'accept', 'bind', 'closesocket', 'connect', 'gethostbyaddr', 'gethostbyname',
+            'gethostname', 'getpeername', 'getprotobyname', 'getprotobynumber', 'getservbyname',
+            'getservbyport', 'getsockname', 'getsockopt', 'htonl', 'htons', 'inet_addr',
+            'inet_ntoa', 'ioctlsocket', 'listen', 'ntohl', 'ntohs', 'recv', 'recvfrom', 'select',
+            'send', 'sendto', 'setsockopt', 'shutdown', 'socket', 'WSAAccept',
+            'WSAAddressToStringA', 'WSAAddressToStringW', 'WSAAsyncGetHostByAddr',
+            'WSAAsyncGetHostByName', 'WSAAsyncGetProtoByName', 'WSAAsyncGetProtoByNumber',
+            'WSAAsyncGetServByName', 'WSAAsyncGetServByPort', 'WSAAsyncSelect',
+            'WSACancelAsyncRequest', 'WSACancelBlockingCall', 'WSACleanup', 'WSACloseEvent',
+            'WSAConnect', 'WSACreateEvent', 'WSADuplicateSocketA', 'WSADuplicateSocketW',
+            'WSAEnumNameSpaceProvidersA', 'WSAEnumNameSpaceProvidersW', 'WSAEnumNetworkEvents',
+            'WSAEnumProtocolsA', 'WSAEnumProtocolsW', 'WSAEventSelect', 'WSAGetLastError',
+            'WSAGetOverlappedResult', 'WSAGetQOSByName', 'WSAGetServiceClassInfoA',
+            'WSAGetServiceClassInfoW', 'WSAGetServiceClassNameByClassIdA',
+            'WSAGetServiceClassNameByClassIdW', 'WSAHtonl', 'WSAHtons', 'WSAInstallServiceClassA',
+            'WSAInstallServiceClassW', 'WSAIoctl', 'WSAIsBlocking', 'WSAJoinLeaf',
+            'WSALookupServiceBeginA', 'WSALookupServiceBeginW', 'WSALookupServiceEnd',
+            'WSALookupServiceNextA', 'WSALookupServiceNextW', 'WSANtohl', 'WSANtohs',
+            'WSAProviderConfigChange', 'WSARecv', 'WSARecvDisconnect', 'WSARecvFrom',
+            'WSARemoveServiceClass', 'WSAResetEvent', 'WSASend', 'WSASendDisconnect', 'WSASendTo',
+            'WSASetBlockingHook', 'WSASetEvent', 'WSASetLastError', 'WSASetServiceA',
+            'WSASetServiceW', 'WSASocketA', 'WSASocketW', 'WSAStartup', 'WSAStringToAddressA',
+            'WSAStringToAddressW', 'WSAUnhookBlockingHook', 'WSAWaitForMultipleEvents',
+            'WSCDeinstallProvider', 'WSCEnableNSProvider', 'WSCEnumProtocols',
+            'WSCGetProviderPath', 'WSCInstallNameSpace', 'WSCInstallProvider',
+            'WSCUnInstallNameSpace',
+
+            'ContinueDebugEvent', 'DebugActiveProcess', 'DebugBreak', 'FatalExit',
+            'FlushInstructionCache', 'GetThreadContext', 'GetThreadSelectorEntry',
+            'IsDebuggerPresent', 'OutputDebugStringA', 'OutputDebugStringW', 'ReadProcessMemory',
+            'SetDebugErrorLevel', 'SetThreadContext', 'WaitForDebugEvent', 'WriteProcessMemory',
+
+            'CloseHandle', 'DuplicateHandle', 'GetHandleInformation', 'SetHandleInformation',
+
+            'AdjustWindowRect', 'AdjustWindowRectEx', 'AllowSetForegroundWindow',
+            'AnimateWindow', 'AnyPopup', 'ArrangeIconicWindows', 'BeginDeferWindowPos',
+            'BringWindowToTop', 'CascadeWindows', 'ChildWindowFromPoint',
+            'ChildWindowFromPointEx', 'CloseWindow', 'CreateWindowExA', 'CreateWindowExW',
+            'DeferWindowPos', 'DestroyWindow', 'EndDeferWindowPos', 'EnumChildWindows',
+            'EnumThreadWindows', 'EnumWindows', 'FindWindowA', 'FindWindowExA', 'FindWindowExW',
+            'FindWindowW', 'GetAltTabInfoA', 'GetAltTabInfoW', 'GetAncestor', 'GetClientRect',
+            'GetDesktopWindow', 'GetForegroundWindow', 'GetGUIThreadInfo', 'GetLastActivePopup',
+            'GetLayout', 'GetParent', 'GetProcessDefaultLayout', 'GetTitleBarInf', 'GetTopWindow',
+            'GetWindow', 'GetWindowInfo', 'GetWindowModuleFileNameA', 'GetWindowModuleFileNameW',
+            'GetWindowPlacement', 'GetWindowRect', 'GetWindowTextA', 'GetWindowTextLengthA',
+            'GetWindowTextLengthW', 'GetWindowTextW', 'GetWindowThreadProcessId', 'IsChild',
+            'IsIconic', 'IsWindow', 'IsWindowUnicode', 'IsWindowVisible', 'IsZoomed',
+            'LockSetForegroundWindow', 'MoveWindow', 'OpenIcon', 'RealChildWindowFromPoint',
+            'RealGetWindowClassA', 'RealGetWindowClassW', 'SetForegroundWindow',
+            'SetLayeredWindowAttributes', 'SetLayout', 'SetParent', 'SetProcessDefaultLayout',
+            'SetWindowPlacement', 'SetWindowPos', 'SetWindowTextA', 'SetWindowTextW',
+            'ShowOwnedPopups', 'ShowWindow', 'ShowWindowAsync', 'TileWindows',
+            'UpdateLayeredWindow', 'WindowFromPoint',
+
+            'CreateDialogIndirectParamA', 'CreateDialogIndirectParamW', 'CreateDialogParamA',
+            'CreateDialogParamW', 'DefDlgProcA', 'DefDlgProcW', 'DialogBoxIndirectParamA',
+            'DialogBoxIndirectParamW', 'DialogBoxParamA', 'DialogBoxParamW', 'EndDialog',
+            'GetDialogBaseUnits', 'GetDlgCtrlID', 'GetDlgItem', 'GetDlgItemInt',
+            'GetDlgItemTextA', 'GetDlgItemTextW', 'GetNextDlgGroupItem', 'GetNextDlgTabItem',
+            'IsDialogMessageA', 'IsDialogMessageW', 'MapDialogRect', 'MessageBoxA',
+            'MessageBoxExA', 'MessageBoxExW', 'MessageBoxIndirectA', 'MessageBoxIndirectW',
+            'MessageBoxW', 'SendDlgItemMessageA', 'SendDlgItemMessageW', 'SetDlgItemInt',
+            'SetDlgItemTextA', 'SetDlgItemTextW',
+
+            'GetWriteWatch', 'GlobalMemoryStatus', 'GlobalMemoryStatusEx', 'IsBadCodePtr',
+            'IsBadReadPtr', 'IsBadStringPtrA', 'IsBadStringPtrW', 'IsBadWritePtr',
+            'ResetWriteWatch', 'AllocateUserPhysicalPages', 'FreeUserPhysicalPages',
+            'MapUserPhysicalPages', 'MapUserPhysicalPagesScatter', 'GlobalAlloc', 'GlobalFlags',
+            'GlobalFree', 'GlobalHandle', 'GlobalLock', 'GlobalReAlloc', 'GlobalSize',
+            'GlobalUnlock', 'LocalAlloc', 'LocalFlags', 'LocalFree', 'LocalHandle', 'LocalLock',
+            'LocalReAlloc', 'LocalSize', 'LocalUnlock', 'GetProcessHeap', 'GetProcessHeaps',
+            'HeapAlloc', 'HeapCompact', 'HeapCreate', 'HeapDestroy', 'HeapFree', 'HeapLock',
+            'HeapReAlloc', 'HeapSize', 'HeapUnlock', 'HeapValidate', 'HeapWalk', 'VirtualAlloc',
+            'VirtualAllocEx', 'VirtualFree', 'VirtualFreeEx', 'VirtualLock', 'VirtualProtect',
+            'VirtualProtectEx', 'VirtualQuery', 'VirtualQueryEx', 'VirtualUnlock',
+            'GetFreeSpace', 'GlobalCompact', 'GlobalFix', 'GlobalUnfix', 'GlobalUnWire',
+            'GlobalWire', 'IsBadHugeReadPtr', 'IsBadHugeWritePtr', 'LocalCompact', 'LocalShrink',
+
+            'GetClassInfoA', 'GetClassInfoW', 'GetClassInfoExA', 'GetClassInfoExW',
+            'GetClassLongA', 'GetClassLongW', 'GetClassLongPtrA', 'GetClassLongPtrW',
+            'RegisterClassA', 'RegisterClassW', 'RegisterClassExA', 'RegisterClassExW',
+            'SetClassLongA', 'SetClassLongW', 'SetClassLongPtrA', 'SetClassLongPtrW',
+            'SetWindowLongA', 'SetWindowLongW', 'SetWindowLongPtrA', 'SetWindowLongPtrW',
+            'UnregisterClassA', 'UnregisterClassW', 'GetClassWord', 'GetWindowWord',
+            'SetClassWord', 'SetWindowWord'
+            ),
+        // Native API
+        6 => array(
+            'CsrAllocateCaptureBuffer', 'CsrAllocateCapturePointer', 'CsrAllocateMessagePointer',
+            'CsrCaptureMessageBuffer', 'CsrCaptureMessageString', 'CsrCaptureTimeout',
+            'CsrClientCallServer', 'CsrClientConnectToServer', 'CsrFreeCaptureBuffer',
+            'CsrIdentifyAlertableThread', 'CsrNewThread', 'CsrProbeForRead', 'CsrProbeForWrite',
+            'CsrSetPriorityClass',
+
+            'LdrAccessResource', 'LdrDisableThreadCalloutsForDll', 'LdrEnumResources',
+            'LdrFindEntryForAddress', 'LdrFindResource_U', 'LdrFindResourceDirectory_U',
+            'LdrGetDllHandle', 'LdrGetProcedureAddress', 'LdrInitializeThunk', 'LdrLoadDll',
+            'LdrProcessRelocationBlock', 'LdrQueryImageFileExecutionOptions',
+            'LdrQueryProcessModuleInformation', 'LdrShutdownProcess', 'LdrShutdownThread',
+            'LdrUnloadDll', 'LdrVerifyImageMatchesChecksum',
+
+            'NtAcceptConnectPort', 'ZwAcceptConnectPort', 'NtCompleteConnectPort',
+            'ZwCompleteConnectPort', 'NtConnectPort', 'ZwConnectPort', 'NtCreatePort',
+            'ZwCreatePort', 'NtImpersonateClientOfPort', 'ZwImpersonateClientOfPort',
+            'NtListenPort', 'ZwListenPort', 'NtQueryInformationPort', 'ZwQueryInformationPort',
+            'NtReadRequestData', 'ZwReadRequestData', 'NtReplyPort', 'ZwReplyPort',
+            'NtReplyWaitReceivePort', 'ZwReplyWaitReceivePort', 'NtReplyWaitReplyPort',
+            'ZwReplyWaitReplyPort', 'NtRequestPort', 'ZwRequestPort', 'NtRequestWaitReplyPort',
+            'ZwRequestWaitReplyPort', 'NtSecureConnectPort', 'ZwSecureConnectPort',
+            'NtWriteRequestData', 'ZwWriteRequestData',
+
+            'NtAccessCheck', 'ZwAccessCheck', 'NtAccessCheckAndAuditAlarm',
+            'ZwAccessCheckAndAuditAlarm', 'NtAccessCheckByType', 'ZwAccessCheckByType',
+            'NtAccessCheckByTypeAndAuditAlarm', 'ZwAccessCheckByTypeAndAuditAlarm',
+            'NtAccessCheckByTypeResultList', 'ZwAccessCheckByTypeResultList',
+            'NtAdjustGroupsToken', 'ZwAdjustGroupsToken', 'NtAdjustPrivilegesToken',
+            'ZwAdjustPrivilegesToken', 'NtCloseObjectAuditAlarm', 'ZwCloseObjectAuditAlarm',
+            'NtCreateToken', 'ZwCreateToken', 'NtDeleteObjectAuditAlarm',
+            'ZwDeleteObjectAuditAlarm', 'NtDuplicateToken', 'ZwDuplicateToken',
+            'NtFilterToken', 'ZwFilterToken', 'NtImpersonateThread', 'ZwImpersonateThread',
+            'NtOpenObjectAuditAlarm', 'ZwOpenObjectAuditAlarm', 'NtOpenProcessToken',
+            'ZwOpenProcessToken', 'NtOpenThreadToken', 'ZwOpenThreadToken', 'NtPrivilegeCheck',
+            'ZwPrivilegeCheck', 'NtPrivilegedServiceAuditAlarm', 'ZwPrivilegedServiceAuditAlarm',
+            'NtPrivilegeObjectAuditAlarm', 'ZwPrivilegeObjectAuditAlarm',
+            'NtQueryInformationToken', 'ZwQueryInformationToken', 'NtQuerySecurityObject',
+            'ZwQuerySecurityObject', 'NtSetInformationToken', 'ZwSetInformationToken',
+            'NtSetSecurityObject', 'ZwSetSecurityObject',
+
+            'NtAddAtom', 'ZwAddAtom', 'NtDeleteAtom', 'ZwDeleteAtom', 'NtFindAtom', 'ZwFindAtom',
+            'NtQueryInformationAtom', 'ZwQueryInformationAtom',
+
+            'NtAlertResumeThread', 'ZwAlertResumeThread', 'NtAlertThread', 'ZwAlertThread',
+            'NtCreateProcess', 'ZwCreateProcess', 'NtCreateThread', 'ZwCreateThread',
+            'NtCurrentTeb', 'NtDelayExecution', 'ZwDelayExecution', 'NtGetContextThread',
+            'ZwGetContextThread', 'NtOpenProcess', 'ZwOpenProcess', 'NtOpenThread',
+            'ZwOpenThread', 'NtQueryInformationProcess', 'ZwQueryInformationProcess',
+            'NtQueryInformationThread', 'ZwQueryInformationThread', 'NtQueueApcThread',
+            'ZwQueueApcThread', 'NtResumeThread', 'ZwResumeThread', 'NtSetContextThread',
+            'ZwSetContextThread', 'NtSetHighWaitLowThread', 'ZwSetHighWaitLowThread',
+            'NtSetInformationProcess', 'ZwSetInformationProcess', 'NtSetInformationThread',
+            'ZwSetInformationThread', 'NtSetLowWaitHighThread', 'ZwSetLowWaitHighThread',
+            'NtSuspendThread', 'ZwSuspendThread', 'NtTerminateProcess', 'ZwTerminateProcess',
+            'NtTerminateThread', 'ZwTerminateThread', 'NtTestAlert', 'ZwTestAlert',
+            'NtYieldExecution', 'ZwYieldExecution',
+
+            'NtAllocateVirtualMemory', 'ZwAllocateVirtualMemory', 'NtAllocateVirtualMemory64',
+            'ZwAllocateVirtualMemory64', 'NtAreMappedFilesTheSame', 'ZwAreMappedFilesTheSame',
+            'NtCreateSection', 'ZwCreateSection', 'NtExtendSection', 'ZwExtendSection',
+            'NtFlushVirtualMemory', 'ZwFlushVirtualMemory', 'NtFreeVirtualMemory',
+            'ZwFreeVirtualMemory', 'NtFreeVirtualMemory64', 'ZwFreeVirtualMemory64',
+            'NtLockVirtualMemory', 'ZwLockVirtualMemory', 'NtMapViewOfSection',
+            'ZwMapViewOfSection', 'NtMapViewOfVlmSection', 'ZwMapViewOfVlmSection',
+            'NtOpenSection', 'ZwOpenSection', 'NtProtectVirtualMemory', 'ZwProtectVirtualMemory',
+            'NtProtectVirtualMemory64', 'ZwProtectVirtualMemory64', 'NtQueryVirtualMemory',
+            'ZwQueryVirtualMemory', 'NtQueryVirtualMemory64', 'ZwQueryVirtualMemory64',
+            'NtReadVirtualMemory', 'ZwReadVirtualMemory', 'NtReadVirtualMemory64',
+            'ZwReadVirtualMemory64', 'NtUnlockVirtualMemory', 'ZwUnlockVirtualMemory',
+            'NtUnmapViewOfSection', 'ZwUnmapViewOfSection', 'NtUnmapViewOfVlmSection',
+            'ZwUnmapViewOfVlmSection', 'NtWriteVirtualMemory', 'ZwWriteVirtualMemory',
+            'NtWriteVirtualMemory64', 'ZwWriteVirtualMemory64',
+
+            'NtAssignProcessToJobObject', 'ZwAssignProcessToJobObject', 'NtCreateJobObject',
+            'ZwCreateJobObject', 'NtOpenJobObject', 'ZwOpenJobObject',
+            'NtQueryInformationJobObject', 'ZwQueryInformationJobObject',
+            'NtSetInformationJobObject', 'ZwSetInformationJobObject', 'NtTerminateJobObject',
+            'ZwTerminateJobObject',
+
+            'NtCancelIoFile', 'ZwCancelIoFile', 'NtCreateFile', 'ZwCreateFile',
+            'NtCreateIoCompletion', 'ZwCreateIoCompletion', 'NtDeleteFile', 'ZwDeleteFile',
+            'NtDeviceIoControlFile', 'ZwDeviceIoControlFile', 'NtFlushBuffersFile',
+            'ZwFlushBuffersFile', 'NtFsControlFile', 'ZwFsControlFile', 'NtLockFile', 'ZwLockFile',
+            'NtNotifyChangeDirectoryFile', 'ZwNotifyChangeDirectoryFile', 'NtOpenFile',
+            'ZwOpenFile', 'NtOpenIoCompletion', 'ZwOpenIoCompletion', 'NtQueryAttributesFile',
+            'ZwQueryAttributesFile', 'NtQueryDirectoryFile', 'ZwQueryDirectoryFile',
+            'NtQueryEaFile', 'ZwQueryEaFile', 'NtQueryIoCompletion', 'ZwQueryIoCompletion',
+            'NtQueryQuotaInformationFile', 'ZwQueryQuotaInformationFile',
+            'NtQueryVolumeInformationFile', 'ZwQueryVolumeInformationFile', 'NtReadFile',
+            'ZwReadFile', 'NtReadFile64', 'ZwReadFile64', 'NtReadFileScatter', 'ZwReadFileScatter',
+            'NtRemoveIoCompletion', 'ZwRemoveIoCompletion', 'NtSetEaFile', 'ZwSetEaFile',
+            'NtSetInformationFile', 'ZwSetInformationFile', 'NtSetIoCompletion',
+            'ZwSetIoCompletion', 'NtSetQuotaInformationFile', 'ZwSetQuotaInformationFile',
+            'NtSetVolumeInformationFile', 'ZwSetVolumeInformationFile', 'NtUnlockFile',
+            'ZwUnlockFile', 'NtWriteFile', 'ZwWriteFile', 'NtWriteFile64','ZwWriteFile64',
+            'NtWriteFileGather', 'ZwWriteFileGather', 'NtQueryFullAttributesFile',
+            'ZwQueryFullAttributesFile', 'NtQueryInformationFile', 'ZwQueryInformationFile',
+
+            'RtlAbortRXact', 'RtlAbsoluteToSelfRelativeSD', 'RtlAcquirePebLock',
+            'RtlAcquireResourceExclusive', 'RtlAcquireResourceShared', 'RtlAddAccessAllowedAce',
+            'RtlAddAccessDeniedAce', 'RtlAddAce', 'RtlAddActionToRXact', 'RtlAddAtomToAtomTable',
+            'RtlAddAttributeActionToRXact', 'RtlAddAuditAccessAce', 'RtlAddCompoundAce',
+            'RtlAdjustPrivilege', 'RtlAllocateAndInitializeSid', 'RtlAllocateHandle',
+            'RtlAllocateHeap', 'RtlAnsiCharToUnicodeChar', 'RtlAnsiStringToUnicodeSize',
+            'RtlAnsiStringToUnicodeString', 'RtlAppendAsciizToString', 'RtlAppendStringToString',
+            'RtlAppendUnicodeStringToString', 'RtlAppendUnicodeToString', 'RtlApplyRXact',
+            'RtlApplyRXactNoFlush', 'RtlAreAllAccessesGranted', 'RtlAreAnyAccessesGranted',
+            'RtlAreBitsClear', 'RtlAreBitsSet', 'RtlAssert', 'RtlCaptureStackBackTrace',
+            'RtlCharToInteger', 'RtlCheckRegistryKey', 'RtlClearAllBits', 'RtlClearBits',
+            'RtlClosePropertySet', 'RtlCompactHeap', 'RtlCompareMemory', 'RtlCompareMemoryUlong',
+            'RtlCompareString', 'RtlCompareUnicodeString', 'RtlCompareVariants',
+            'RtlCompressBuffer', 'RtlConsoleMultiByteToUnicodeN', 'RtlConvertExclusiveToShared',
+            'RtlConvertLongToLargeInteger', 'RtlConvertPropertyToVariant',
+            'RtlConvertSharedToExclusive', 'RtlConvertSidToUnicodeString',
+            'RtlConvertUiListToApiList', 'RtlConvertUlongToLargeInteger',
+            'RtlConvertVariantToProperty', 'RtlCopyLuid', 'RtlCopyLuidAndAttributesArray',
+            'RtlCopySecurityDescriptor', 'RtlCopySid', 'RtlCopySidAndAttributesArray',
+            'RtlCopyString', 'RtlCopyUnicodeString', 'RtlCreateAcl', 'RtlCreateAndSetSD',
+            'RtlCreateAtomTable', 'RtlCreateEnvironment', 'RtlCreateHeap',
+            'RtlCreateProcessParameters', 'RtlCreatePropertySet', 'RtlCreateQueryDebugBuffer',
+            'RtlCreateRegistryKey', 'RtlCreateSecurityDescriptor', 'RtlCreateTagHeap',
+            'RtlCreateUnicodeString', 'RtlCreateUnicodeStringFromAsciiz', 'RtlCreateUserProcess',
+            'RtlCreateUserSecurityObject', 'RtlCreateUserThread', 'RtlCustomCPToUnicodeN',
+            'RtlCutoverTimeToSystemTime', 'RtlDecompressBuffer', 'RtlDecompressFragment',
+            'RtlDelete', 'RtlDeleteAce', 'RtlDeleteAtomFromAtomTable', 'RtlDeleteCriticalSection',
+            'RtlDeleteElementGenericTable', 'RtlDeleteNoSplay', 'RtlDeleteRegistryValue',
+            'RtlDeleteResource', 'RtlDeleteSecurityObject', 'RtlDeNormalizeProcessParams',
+            'RtlDestroyAtomTable', 'RtlDestroyEnvironment', 'RtlDestroyHandleTable',
+            'RtlDestroyHeap', 'RtlDestroyProcessParameters', 'RtlDestroyQueryDebugBuffer',
+            'RtlDetermineDosPathNameType_U', 'RtlDoesFileExists_U', 'RtlDosPathNameToNtPathName_U',
+            'RtlDosSearchPath_U', 'RtlDowncaseUnicodeString', 'RtlDumpResource',
+            'RtlEmptyAtomTable', 'RtlEnlargedIntegerMultiply', 'RtlEnlargedUnsignedDivide',
+            'RtlEnlargedUnsignedMultiply', 'RtlEnterCriticalSection', 'RtlEnumerateGenericTable',
+            'RtlEnumerateGenericTableWithoutSplaying', 'RtlEnumerateProperties',
+            'RtlEnumProcessHeaps', 'RtlEqualComputerName', 'RtlEqualDomainName', 'RtlEqualLuid',
+            'RtlEqualPrefixSid', 'RtlEqualSid', 'RtlEqualString', 'RtlEqualUnicodeString',
+            'RtlEraseUnicodeString', 'RtlExpandEnvironmentStrings_U', 'RtlExtendedIntegerMultiply',
+            'RtlExtendedLargeIntegerDivide', 'RtlExtendedMagicDivide', 'RtlExtendHeap',
+            'RtlFillMemory', 'RtlFillMemoryUlong', 'RtlFindClearBits', 'RtlFindClearBitsAndSet',
+            'RtlFindLongestRunClear', 'RtlFindLongestRunSet', 'RtlFindMessage', 'RtlFindSetBits',
+            'RtlFindSetBitsAndClear', 'RtlFirstFreeAce', 'RtlFlushPropertySet',
+            'RtlFormatCurrentUserKeyPath', 'RtlFormatMessage', 'RtlFreeAnsiString',
+            'RtlFreeHandle', 'RtlFreeHeap', 'RtlFreeOemString', 'RtlFreeSid',
+            'RtlFreeUnicodeString', 'RtlFreeUserThreadStack', 'RtlGenerate8dot3Name', 'RtlGetAce',
+            'RtlGetCallersAddress', 'RtlGetCompressionWorkSpaceSize',
+            'RtlGetControlSecurityDescriptor', 'RtlGetCurrentDirectory_U',
+            'RtlGetDaclSecurityDescriptor', 'RtlGetElementGenericTable', 'RtlGetFullPathName_U',
+            'RtlGetGroupSecurityDescriptor', 'RtlGetLongestNtPathLength', 'RtlGetNtGlobalFlags',
+            'RtlGetNtProductType', 'RtlGetOwnerSecurityDescriptor', 'RtlGetProcessHeaps',
+            'RtlGetSaclSecurityDescriptor', 'RtlGetUserInfoHeap', 'RtlGuidToPropertySetName',
+            'RtlIdentifierAuthoritySid', 'RtlImageDirectoryEntryToData', 'RtlImageNtHeader',
+            'RtlImageRvaToSection', 'RtlImageRvaToVa', 'RtlImpersonateSelf', 'RtlInitAnsiString',
+            'RtlInitCodePageTable', 'RtlInitializeAtomPackage', 'RtlInitializeBitMap',
+            'RtlInitializeContext', 'RtlInitializeCriticalSection',
+            'RtlInitializeCriticalSectionAndSpinCount', 'RtlInitializeGenericTable',
+            'RtlInitializeHandleTable', 'RtlInitializeResource', 'RtlInitializeRXact',
+            'RtlInitializeSid', 'RtlInitNlsTables', 'RtlInitString', 'RtlInitUnicodeString',
+            'RtlInsertElementGenericTable', 'RtlIntegerToChar', 'RtlIntegerToUnicodeString',
+            'RtlIsDosDeviceName_U', 'RtlIsGenericTableEmpty', 'RtlIsNameLegalDOS8Dot3',
+            'RtlIsTextUnicode', 'RtlIsValidHandle', 'RtlIsValidIndexHandle', 'RtlLargeIntegerAdd',
+            'RtlLargeIntegerArithmeticShift', 'RtlLargeIntegerDivide', 'RtlLargeIntegerNegate',
+            'RtlLargeIntegerShiftLeft', 'RtlLargeIntegerShiftRight', 'RtlLargeIntegerSubtract',
+            'RtlLargeIntegerToChar', 'RtlLeaveCriticalSection', 'RtlLengthRequiredSid',
+            'RtlLengthSecurityDescriptor', 'RtlLengthSid', 'RtlLocalTimeToSystemTime',
+            'RtlLockHeap', 'RtlLookupAtomInAtomTable', 'RtlLookupElementGenericTable',
+            'RtlMakeSelfRelativeSD', 'RtlMapGenericMask', 'RtlMoveMemory',
+            'RtlMultiByteToUnicodeN', 'RtlMultiByteToUnicodeSize', 'RtlNewInstanceSecurityObject',
+            'RtlNewSecurityGrantedAccess', 'RtlNewSecurityObject', 'RtlNormalizeProcessParams',
+            'RtlNtStatusToDosError', 'RtlNumberGenericTableElements', 'RtlNumberOfClearBits',
+            'RtlNumberOfSetBits', 'RtlOemStringToUnicodeSize', 'RtlOemStringToUnicodeString',
+            'RtlOemToUnicodeN', 'RtlOnMappedStreamEvent', 'RtlOpenCurrentUser',
+            'RtlPcToFileHeader', 'RtlPinAtomInAtomTable', 'RtlpNtCreateKey',
+            'RtlpNtEnumerateSubKey', 'RtlpNtMakeTemporaryKey', 'RtlpNtOpenKey',
+            'RtlpNtQueryValueKey', 'RtlpNtSetValueKey', 'RtlPrefixString',
+            'RtlPrefixUnicodeString', 'RtlPropertySetNameToGuid', 'RtlProtectHeap',
+            'RtlpUnWaitCriticalSection', 'RtlpWaitForCriticalSection', 'RtlQueryAtomInAtomTable',
+            'RtlQueryEnvironmentVariable_U', 'RtlQueryInformationAcl',
+            'RtlQueryProcessBackTraceInformation', 'RtlQueryProcessDebugInformation',
+            'RtlQueryProcessHeapInformation', 'RtlQueryProcessLockInformation',
+            'RtlQueryProperties', 'RtlQueryPropertyNames', 'RtlQueryPropertySet',
+            'RtlQueryRegistryValues', 'RtlQuerySecurityObject', 'RtlQueryTagHeap',
+            'RtlQueryTimeZoneInformation', 'RtlRaiseException', 'RtlRaiseStatus', 'RtlRandom',
+            'RtlReAllocateHeap', 'RtlRealPredecessor', 'RtlRealSuccessor', 'RtlReleasePebLock',
+            'RtlReleaseResource', 'RtlRemoteCall', 'RtlResetRtlTranslations',
+            'RtlRunDecodeUnicodeString', 'RtlRunEncodeUnicodeString', 'RtlSecondsSince1970ToTime',
+            'RtlSecondsSince1980ToTime', 'RtlSelfRelativeToAbsoluteSD', 'RtlSetAllBits',
+            'RtlSetAttributesSecurityDescriptor', 'RtlSetBits', 'RtlSetCriticalSectionSpinCount',
+            'RtlSetCurrentDirectory_U', 'RtlSetCurrentEnvironment', 'RtlSetDaclSecurityDescriptor',
+            'RtlSetEnvironmentVariable', 'RtlSetGroupSecurityDescriptor', 'RtlSetInformationAcl',
+            'RtlSetOwnerSecurityDescriptor', 'RtlSetProperties', 'RtlSetPropertyNames',
+            'RtlSetPropertySetClassId', 'RtlSetSaclSecurityDescriptor', 'RtlSetSecurityObject',
+            'RtlSetTimeZoneInformation', 'RtlSetUnicodeCallouts', 'RtlSetUserFlagsHeap',
+            'RtlSetUserValueHeap', 'RtlSizeHeap', 'RtlSplay', 'RtlStartRXact',
+            'RtlSubAuthorityCountSid', 'RtlSubAuthoritySid', 'RtlSubtreePredecessor',
+            'RtlSubtreeSuccessor', 'RtlSystemTimeToLocalTime', 'RtlTimeFieldsToTime',
+            'RtlTimeToElapsedTimeFields', 'RtlTimeToSecondsSince1970', 'RtlTimeToSecondsSince1980',
+            'RtlTimeToTimeFields', 'RtlTryEnterCriticalSection', 'RtlUnicodeStringToAnsiSize',
+            'RtlUnicodeStringToAnsiString', 'RtlUnicodeStringToCountedOemString',
+            'RtlUnicodeStringToInteger', 'RtlUnicodeStringToOemSize',
+            'RtlUnicodeStringToOemString', 'RtlUnicodeToCustomCPN', 'RtlUnicodeToMultiByteN',
+            'RtlUnicodeToMultiByteSize', 'RtlUnicodeToOemN', 'RtlUniform', 'RtlUnlockHeap',
+            'RtlUnwind', 'RtlUpcaseUnicodeChar', 'RtlUpcaseUnicodeString',
+            'RtlUpcaseUnicodeStringToAnsiString', 'RtlUpcaseUnicodeStringToCountedOemString',
+            'RtlUpcaseUnicodeStringToOemString', 'RtlUpcaseUnicodeToCustomCPN',
+            'RtlUpcaseUnicodeToMultiByteN', 'RtlUpcaseUnicodeToOemN', 'RtlUpperChar',
+            'RtlUpperString', 'RtlUsageHeap', 'RtlValidAcl', 'RtlValidateHeap',
+            'RtlValidateProcessHeaps', 'RtlValidSecurityDescriptor', 'RtlValidSid', 'RtlWalkHeap',
+            'RtlWriteRegistryValue', 'RtlxAnsiStringToUnicodeSize', 'RtlxOemStringToUnicodeSize',
+            'RtlxUnicodeStringToAnsiSize', 'RtlxUnicodeStringToOemSize', 'RtlZeroHeap',
+            'RtlZeroMemory',
+
+            'NtCancelTimer', 'ZwCancelTimer', 'NtCreateTimer', 'ZwCreateTimer', 'NtGetTickCount',
+            'ZwGetTickCount', 'NtOpenTimer', 'ZwOpenTimer', 'NtQueryPerformanceCounter',
+            'ZwQueryPerformanceCounter', 'NtQuerySystemTime', 'ZwQuerySystemTime', 'NtQueryTimer',
+            'ZwQueryTimer', 'NtQueryTimerResolution', 'ZwQueryTimerResolution', 'NtSetSystemTime',
+            'ZwSetSystemTime', 'NtSetTimer', 'ZwSetTimer', 'NtSetTimerResolution',
+            'ZwSetTimerResolution',
+
+            'NtClearEvent', 'ZwClearEvent', 'NtCreateEvent', 'ZwCreateEvent', 'NtCreateEventPair',
+            'ZwCreateEventPair', 'NtCreateMutant', 'ZwCreateMutant', 'NtCreateSemaphore',
+            'ZwCreateSemaphore', 'NtOpenEvent', 'ZwOpenEvent', 'NtOpenEventPair',
+            'ZwOpenEventPair', 'NtOpenMutant', 'ZwOpenMutant', 'NtOpenSemaphore',
+            'ZwOpenSemaphore', 'NtPulseEvent', 'ZwPulseEvent', 'NtQueryEvent', 'ZwQueryEvent',
+            'NtQueryMutant', 'ZwQueryMutant', 'NtQuerySemaphore', 'ZwQuerySemaphore',
+            'NtReleaseMutant', 'ZwReleaseMutant', 'NtReleaseProcessMutant',
+            'ZwReleaseProcessMutant', 'NtReleaseSemaphore', 'ZwReleaseSemaphore',
+            'NtReleaseThreadMutant', 'ZwReleaseThreadMutant', 'NtResetEvent', 'ZwResetEvent',
+            'NtSetEvent', 'ZwSetEvent', 'NtSetHighEventPair', 'ZwSetHighEventPair',
+            'NtSetHighWaitLowEventPair', 'ZwSetHighWaitLowEventPair', 'NtSetLowEventPair',
+            'ZwSetLowEventPair', 'NtSetLowWaitHighEventPair', 'ZwSetLowWaitHighEventPair',
+            'NtSignalAndWaitForSingleObject', 'ZwSignalAndWaitForSingleObject',
+            'NtWaitForMultipleObjects', 'ZwWaitForMultipleObjects', 'NtWaitForSingleObject',
+            'ZwWaitForSingleObject', 'NtWaitHighEventPair', 'ZwWaitHighEventPair',
+            'NtWaitLowEventPair', 'ZwWaitLowEventPair',
+
+            'NtClose', 'ZwClose', 'NtCreateDirectoryObject', 'ZwCreateDirectoryObject',
+            'NtCreateSymbolicLinkObject', 'ZwCreateSymbolicLinkObject',
+            'NtDuplicateObject', 'ZwDuplicateObject', 'NtMakeTemporaryObject',
+            'ZwMakeTemporaryObject', 'NtOpenDirectoryObject', 'ZwOpenDirectoryObject',
+            'NtOpenSymbolicLinkObject', 'ZwOpenSymbolicLinkObject', 'NtQueryDirectoryObject',
+            'ZwQueryDirectoryObject', 'NtQueryObject', 'ZwQueryObject',
+            'NtQuerySymbolicLinkObject', 'ZwQuerySymbolicLinkObject', 'NtSetInformationObject',
+            'ZwSetInformationObject',
+
+            'NtContinue', 'ZwContinue', 'NtRaiseException', 'ZwRaiseException',
+            'NtRaiseHardError', 'ZwRaiseHardError', 'NtSetDefaultHardErrorPort',
+            'ZwSetDefaultHardErrorPort',
+
+            'NtCreateChannel', 'ZwCreateChannel', 'NtListenChannel', 'ZwListenChannel',
+            'NtOpenChannel', 'ZwOpenChannel', 'NtReplyWaitSendChannel', 'ZwReplyWaitSendChannel',
+            'NtSendWaitReplyChannel', 'ZwSendWaitReplyChannel', 'NtSetContextChannel',
+            'ZwSetContextChannel',
+
+            'NtCreateKey', 'ZwCreateKey', 'NtDeleteKey', 'ZwDeleteKey', 'NtDeleteValueKey',
+            'ZwDeleteValueKey', 'NtEnumerateKey', 'ZwEnumerateKey', 'NtEnumerateValueKey',
+            'ZwEnumerateValueKey', 'NtFlushKey', 'ZwFlushKey', 'NtInitializeRegistry',
+            'ZwInitializeRegistry', 'NtLoadKey', 'ZwLoadKey', 'NtLoadKey2', 'ZwLoadKey2',
+            'NtNotifyChangeKey', 'ZwNotifyChangeKey', 'NtOpenKey', 'ZwOpenKey', 'NtQueryKey',
+            'ZwQueryKey', 'NtQueryMultipleValueKey', 'ZwQueryMultipleValueKey',
+            'NtQueryMultiplValueKey', 'ZwQueryMultiplValueKey', 'NtQueryValueKey',
+            'ZwQueryValueKey', 'NtReplaceKey', 'ZwReplaceKey', 'NtRestoreKey', 'ZwRestoreKey',
+            'NtSaveKey', 'ZwSaveKey', 'NtSetInformationKey', 'ZwSetInformationKey',
+            'NtSetValueKey', 'ZwSetValueKey', 'NtUnloadKey', 'ZwUnloadKey',
+
+            'NtCreateMailslotFile', 'ZwCreateMailslotFile', 'NtCreateNamedPipeFile',
+            'ZwCreateNamedPipeFile', 'NtCreatePagingFile', 'ZwCreatePagingFile',
+
+            'NtCreateProfile', 'ZwCreateProfile', 'NtQueryIntervalProfile',
+            'ZwQueryIntervalProfile', 'NtRegisterThreadTerminatePort',
+            'ZwRegisterThreadTerminatePort', 'NtSetIntervalProfile', 'ZwSetIntervalProfile',
+            'NtStartProfile', 'ZwStartProfile', 'NtStopProfile', 'ZwStopProfile',
+            'NtSystemDebugControl', 'ZwSystemDebugControl',
+
+            'NtEnumerateBus', 'ZwEnumerateBus', 'NtFlushInstructionCache',
+            'ZwFlushInstructionCache', 'NtFlushWriteBuffer', 'ZwFlushWriteBuffer',
+            'NtSetLdtEntries', 'ZwSetLdtEntries',
+
+            'NtGetPlugPlayEvent', 'ZwGetPlugPlayEvent', 'NtPlugPlayControl', 'ZwPlugPlayControl',
+
+            'NtInitiatePowerAction', 'ZwInitiatePowerAction', 'NtPowerInformation',
+            'ZwPowerInformation', 'NtRequestWakeupLatency', 'ZwRequestWakeupLatency',
+            'NtSetSystemPowerState', 'ZwSetSystemPowerState', 'NtSetThreadExecutionState',
+            'ZwSetThreadExecutionState',
+
+            'NtLoadDriver', 'ZwLoadDriver', 'NtRegisterNewDevice', 'ZwRegisterNewDevice',
+            'NtUnloadDriver', 'ZwUnloadDriver',
+
+            'NtQueryDefaultLocale', 'ZwQueryDefaultLocale', 'NtQueryDefaultUILanguage',
+            'ZwQueryDefaultUILanguage', 'NtQuerySystemEnvironmentValue',
+            'ZwQuerySystemEnvironmentValue', 'NtSetDefaultLocale', 'ZwSetDefaultLocale',
+            'NtSetDefaultUILanguage', 'ZwSetDefaultUILanguage', 'NtSetSystemEnvironmentValue',
+            'ZwSetSystemEnvironmentValue',
+
+            'DbgBreakPoint', 'DbgPrint', 'DbgPrompt', 'DbgSsHandleKmApiMsg', 'DbgSsInitialize',
+            'DbgUiConnectToDbg', 'DbgUiContinue', 'DbgUiWaitStateChange', 'DbgUserBreakPoint',
+            'KiRaiseUserExceptionDispatcher', 'KiUserApcDispatcher', 'KiUserCallbackDispatcher',
+            'KiUserExceptionDispatcher', 'NlsAnsiCodePage', 'NlsMbCodePageTag',
+            'NlsMbOemCodePageTag', 'NtAllocateLocallyUniqueId', 'ZwAllocateLocallyUniqueId',
+            'NtAllocateUuids', 'ZwAllocateUuids', 'NtCallbackReturn', 'ZwCallbackReturn',
+            'NtDisplayString', 'ZwDisplayString', 'NtQueryOleDirectoryFile',
+            'ZwQueryOleDirectoryFile', 'NtQuerySection', 'ZwQuerySection',
+            'NtQuerySystemInformation', 'ZwQuerySystemInformation', 'NtSetSystemInformation',
+            'ZwSetSystemInformation', 'NtShutdownSystem', 'ZwShutdownSystem', 'NtVdmControl',
+            'ZwVdmControl', 'NtW32Call', 'ZwW32Call', 'PfxFindPrefix', 'PfxInitialize',
+            'PfxInsertPrefix', 'PfxRemovePrefix', 'PropertyLengthAsVariant', 'RestoreEm87Context',
+            'SaveEm87Context'
+            )
+        ),
+    'SYMBOLS' => array(
+        0 => array('(', ')', '{', '}', '[', ']'),
+        1 => array('<', '>','='),
+        2 => array('+', '-', '*', '/', '%'),
+        3 => array('!', '^', '&', '|'),
+        4 => array('?', ':', ';')
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => true,
+        2 => true,
+        3 => true,
+        4 => true,
+        5 => true,
+        6 => true
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #0000ff;',
+            2 => 'color: #0000ff;',
+            3 => 'color: #0000dd;',
+            4 => 'color: #0000ff;',
+            5 => 'color: #4000dd;',
+            6 => 'color: #4000dd;'
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #666666;',
+            2 => 'color: #339900;',
+            3 => 'color: #FF0000;',
+            4 => 'color: #FF0000;',
+            'MULTI' => 'color: #ff0000; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #000099; font-weight: bold;',
+            1 => 'color: #000099; font-weight: bold;',
+            2 => 'color: #660099; font-weight: bold;',
+            3 => 'color: #660099; font-weight: bold;',
+            4 => 'color: #660099; font-weight: bold;',
+            5 => 'color: #006699; font-weight: bold;',
+            'HARD' => '',
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #008000;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #FF0000;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #0000dd;',
+            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+            ),
+        'METHODS' => array(
+            1 => 'color: #007788;',
+            2 => 'color: #007788;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #008000;',
+            1 => 'color: #000080;',
+            2 => 'color: #000040;',
+            3 => 'color: #000040;',
+            4 => 'color: #008080;'
+            ),
+        'REGEXPS' => array(
+            ),
+        'SCRIPT' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => '',
+        5 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
+        6 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com'
+        ),
+    'OOLANG' => true,
+    'OBJECT_SPLITTERS' => array(
+        1 => '.',
+        2 => '::'
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'TAB_WIDTH' => 4,
+    'PARSER_CONTROL' => array(
+        'KEYWORDS' => array(
+            'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#])",
+            'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_\|%\\-])"
+        )
+    )
+);
diff --git a/inc/geshi/cpp.php b/vendor/easybook/geshi/geshi/cpp.php
old mode 100644
new mode 100755
similarity index 96%
rename from inc/geshi/cpp.php
rename to vendor/easybook/geshi/geshi/cpp.php
index 42ab311cc534202e3e2d56a98d7630cb320b68da..52e4be6ea1619334e1a7ada135b02eb5cfd8fa82
--- a/inc/geshi/cpp.php
+++ b/vendor/easybook/geshi/geshi/cpp.php
@@ -56,14 +56,18 @@ $language_data = array (
         //Multiline-continued single-line comments
         1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
         //Multiline-continued preprocessor define
-        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+        2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+        //C++ 11 string literal extensions
+        3 => '/(?:L|u8?|U)(?=")/',
+        //C++ 11 string literal extensions (raw)
+        4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
         ),
     'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
     'QUOTEMARKS' => array("'", '"'),
     'ESCAPE_CHAR' => '',
     'ESCAPE_REGEXP' => array(
         //Simple Single Char Escapes
-        1 => "#\\\\[abfnrtv\\\'\"?\n]#i",
+        1 => "#\\\\[abfnrtv\\\'\"?\n]#",
         //Hexadecimal Char Specs
         2 => "#\\\\x[\da-fA-F]{2}#",
         //Hexadecimal Char Specs
@@ -167,6 +171,8 @@ $language_data = array (
         'COMMENTS' => array(
             1 => 'color: #666666;',
             2 => 'color: #339900;',
+            3 => 'color: #FF0000;',
+            4 => 'color: #FF0000;',
             'MULTI' => 'color: #ff0000; font-style: italic;'
             ),
         'ESCAPE_CHAR' => array(
diff --git a/inc/geshi/csharp.php b/vendor/easybook/geshi/geshi/csharp.php
old mode 100644
new mode 100755
similarity index 96%
rename from inc/geshi/csharp.php
rename to vendor/easybook/geshi/geshi/csharp.php
index 26024e91ab12ed89df7beaf35a3097c465f85db1..a73d01d6b435efa263b5607dfc8e19f4b9e73fa0
--- a/inc/geshi/csharp.php
+++ b/vendor/easybook/geshi/geshi/csharp.php
@@ -12,6 +12,8 @@
  *
  * CHANGES
  * -------
+ * 2015/04/14
+ *  -  Added C# 5.0 and 6.0 missing keywords and #pragma directive
  * 2012/06/18 (1.0.8.11)
  *  -  Added missing keywords (Christian Stelzmann)
  * 2009/04/03 (1.0.8.6)
@@ -62,7 +64,8 @@ $language_data = array (
     'ESCAPE_CHAR' => '\\',
     'KEYWORDS' => array(
         1 => array(
-            'abstract', 'add', 'as', 'base', 'break', 'by', 'case', 'catch', 'const', 'continue',
+            'abstract', 'add', 'as', 'async', 'await', 'base',
+            'break', 'by', 'case', 'catch', 'const', 'continue',
             'default', 'do', 'else', 'event', 'explicit', 'extern', 'false',
             'finally', 'fixed', 'for', 'foreach', 'from', 'get', 'goto', 'group', 'if',
             'implicit', 'in', 'into', 'internal', 'join', 'lock', 'namespace', 'null',
@@ -74,10 +77,10 @@ $language_data = array (
             ),
         2 => array(
             '#elif', '#endif', '#endregion', '#else', '#error', '#define', '#if',
-            '#line', '#region', '#undef', '#warning'
+            '#line', '#pragma', '#region', '#undef', '#warning'
             ),
         3 => array(
-            'checked', 'is', 'new', 'sizeof', 'typeof', 'unchecked'
+            'checked', 'is', 'new', 'nameof', 'sizeof', 'typeof', 'unchecked'
             ),
         4 => array(
             'bool', 'byte', 'char', 'class', 'decimal', 'delegate', 'double',
@@ -253,4 +256,4 @@ $language_data = array (
     )
 );
 
-?>
\ No newline at end of file
+?>
diff --git a/inc/geshi/css.php b/vendor/easybook/geshi/geshi/css.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/css.php
rename to vendor/easybook/geshi/geshi/css.php
diff --git a/inc/geshi/cuesheet.php b/vendor/easybook/geshi/geshi/cuesheet.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/cuesheet.php
rename to vendor/easybook/geshi/geshi/cuesheet.php
diff --git a/inc/geshi/d.php b/vendor/easybook/geshi/geshi/d.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/d.php
rename to vendor/easybook/geshi/geshi/d.php
diff --git a/vendor/easybook/geshi/geshi/dart.php b/vendor/easybook/geshi/geshi/dart.php
new file mode 100644
index 0000000000000000000000000000000000000000..932e13e874a72411026dbb1bb8022a3f0b1180bd
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/dart.php
@@ -0,0 +1,159 @@
+<?php
+/*************************************************************************************
+ * dart.php
+ * --------
+ * Author: Edward Hart (edward.dan.hart@gmail.com)
+ * Copyright: (c) 2013 Edward Hart
+ * Release Version: 1.0.8.12
+ * Date Started: 2013/10/25
+ *
+ * Dart language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2013/10/25
+ *   -  First Release
+ *
+ * TODO (updated 2013/10/25)
+ * -------------------------
+ *   -  Highlight standard library types.
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+    'LANG_NAME' => 'Dart',
+
+    'COMMENT_SINGLE' => array('//'),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'COMMENT_REGEXP' => array(),
+
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'ESCAPE_REGEXP' => array(
+        //Simple Single Char Escapes
+        1 => "#\\\\[\\\\nrfbtv\'\"?\n]#i",
+        //Hexadecimal Char Specs
+        2 => "#\\\\x[\da-fA-F]{2}#",
+        //Hexadecimal Char Specs
+        3 => "#\\\\u[\da-fA-F]{4}#",
+        4 => "#\\\\u\\{[\da-fA-F]*\\}#"
+        ),
+    'NUMBERS' =>
+        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE |
+        GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+
+    'KEYWORDS' => array(
+        1 => array(
+            'abstract', 'as', 'assert', 'break', 'case', 'catch', 'class',
+            'const', 'continue', 'default', 'do', 'dynamic', 'else', 'export',
+            'extends', 'external', 'factory', 'false', 'final', 'finally',
+            'for', 'get', 'if', 'implements', 'import', 'in', 'is', 'library',
+            'new', 'null', 'operator', 'part', 'return', 'set', 'static',
+            'super', 'switch', 'this', 'throw', 'true', 'try', 'typedef', 'var',
+            'while', 'with'
+            ),
+        2 => array(
+            'double', 'bool', 'int', 'num', 'void'
+            ),
+        ),
+
+    'SYMBOLS' => array(
+        0 => array('(', ')', '{', '}', '[', ']'),
+        1 => array('+', '-', '*', '/', '%', '~'),
+        2 => array('&', '|', '^'),
+        3 => array('=', '!', '<', '>'),
+        4 => array('?', ':'),
+        5 => array('..'),
+        6 => array(';', ',')
+        ),
+
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => true,
+        2 => true,
+        ),
+
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'font-weight: bold;',
+            2 => 'color: #445588; font-weight: bold;'
+            ),
+        'COMMENTS' => array(
+            0 => 'color: #999988; font-style: italic;',
+            'MULTI' => 'color: #999988; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #000099; font-weight: bold;',
+            1 => 'color: #000099; font-weight: bold;',
+            2 => 'color: #660099; font-weight: bold;',
+            3 => 'color: #660099; font-weight: bold;',
+            4 => 'color: #660099; font-weight: bold;',
+            5 => 'color: #006699; font-weight: bold;',
+            'HARD' => ''
+            ),
+        'STRINGS' => array(
+            0 => 'color: #d14;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #009999;',
+            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+            ),
+        'BRACKETS' => array(''),
+        'METHODS' => array(
+            1 => 'color: #006633;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'font-weight: bold;',
+            1 => 'font-weight: bold;',
+            2 => 'font-weight: bold;',
+            3 => 'font-weight: bold;',
+            4 => 'font-weight: bold;',
+            5 => 'font-weight: bold;',
+            6 => 'font-weight: bold;'
+            ),
+        'REGEXPS' => array(
+            ),
+        'SCRIPT' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => ''
+        ),
+    'OOLANG' => true,
+    'OBJECT_SPLITTERS' => array(
+        1 => '.'
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'TAB_WIDTH' => 4
+);
diff --git a/inc/geshi/dcl.php b/vendor/easybook/geshi/geshi/dcl.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/dcl.php
rename to vendor/easybook/geshi/geshi/dcl.php
diff --git a/inc/geshi/dcpu16.php b/vendor/easybook/geshi/geshi/dcpu16.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/dcpu16.php
rename to vendor/easybook/geshi/geshi/dcpu16.php
diff --git a/inc/geshi/dcs.php b/vendor/easybook/geshi/geshi/dcs.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/dcs.php
rename to vendor/easybook/geshi/geshi/dcs.php
diff --git a/inc/geshi/delphi.php b/vendor/easybook/geshi/geshi/delphi.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/delphi.php
rename to vendor/easybook/geshi/geshi/delphi.php
index d5596e0cd047f738cd7d508a9aeed79f8a70867d..34d0fd7bffbfae98662fc4069ed420fafc767863
--- a/inc/geshi/delphi.php
+++ b/vendor/easybook/geshi/geshi/delphi.php
@@ -297,5 +297,3 @@ $language_data = array (
             )
         )
 );
-
-?>
diff --git a/inc/geshi/diff.php b/vendor/easybook/geshi/geshi/diff.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/diff.php
rename to vendor/easybook/geshi/geshi/diff.php
diff --git a/inc/geshi/div.php b/vendor/easybook/geshi/geshi/div.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/div.php
rename to vendor/easybook/geshi/geshi/div.php
index aa11795ac8313e743b2835b179a64e99891b1b23..fb8a72a16e26a259a180962b789accc1e8fadc18
--- a/inc/geshi/div.php
+++ b/vendor/easybook/geshi/geshi/div.php
@@ -122,5 +122,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/dos.php b/vendor/easybook/geshi/geshi/dos.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/dos.php
rename to vendor/easybook/geshi/geshi/dos.php
diff --git a/inc/geshi/dot.php b/vendor/easybook/geshi/geshi/dot.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/dot.php
rename to vendor/easybook/geshi/geshi/dot.php
diff --git a/inc/geshi/e.php b/vendor/easybook/geshi/geshi/e.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/e.php
rename to vendor/easybook/geshi/geshi/e.php
diff --git a/inc/geshi/ecmascript.php b/vendor/easybook/geshi/geshi/ecmascript.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/ecmascript.php
rename to vendor/easybook/geshi/geshi/ecmascript.php
diff --git a/inc/geshi/eiffel.php b/vendor/easybook/geshi/geshi/eiffel.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/eiffel.php
rename to vendor/easybook/geshi/geshi/eiffel.php
index baa13c31900553906951eb3db9941d19c5bace27..807d23f944e7acab772ab701873eb4713d08882e
--- a/inc/geshi/eiffel.php
+++ b/vendor/easybook/geshi/geshi/eiffel.php
@@ -391,5 +391,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/email.php b/vendor/easybook/geshi/geshi/email.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/email.php
rename to vendor/easybook/geshi/geshi/email.php
diff --git a/inc/geshi/epc.php b/vendor/easybook/geshi/geshi/epc.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/epc.php
rename to vendor/easybook/geshi/geshi/epc.php
diff --git a/inc/geshi/erlang.php b/vendor/easybook/geshi/geshi/erlang.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/erlang.php
rename to vendor/easybook/geshi/geshi/erlang.php
diff --git a/inc/geshi/euphoria.php b/vendor/easybook/geshi/geshi/euphoria.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/euphoria.php
rename to vendor/easybook/geshi/geshi/euphoria.php
diff --git a/vendor/easybook/geshi/geshi/ezt.php b/vendor/easybook/geshi/geshi/ezt.php
new file mode 100644
index 0000000000000000000000000000000000000000..74d8d520456c6bae99416ae4a597982281aa1f81
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/ezt.php
@@ -0,0 +1,134 @@
+<?php
+/*************************************************************************************
+ * ezt.php
+ * -----------
+ * Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
+ * Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
+ * Release Version: 1.0.8.11
+ * Date Started: 2012/09/01
+ *
+ * Easytrieve language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2012/09/22 (1.0.0)
+ *   - First Release
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'EZT',
+    'COMMENT_SINGLE' => array(),
+    'COMMENT_MULTI' => array(),
+    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+    'COMMENT_REGEXP' => array(
+        // First character of the line is an asterisk. Rest of the line is spaces/null
+        0 => '/\*(\s|\D)?(\n)/',
+        // Asterisk followed by any character & then a non numeric character.
+        // This is to prevent expressions such as 25 * 4 from being marked as a comment
+        // Note: 25*4 - 100 will mark *4 - 100 as a comment. Pls. space out expressions
+        // In any case, 25*4 will result in an Easytrieve error
+        1 => '/\*.([^0-9\n])+.*(\n)/'
+        ),
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'KEYWORDS' => array(
+        1 => array(
+            'CONTROL','DEFINE','DISPLAY','DO','ELSE','END-DO','END-IF',
+            'END-PROC','FILE','GET','GOTO','HEADING','IF','JOB','LINE',
+            'PARM','PERFORM','POINT','PRINT','PROC','PUT','READ','RECORD',
+            'REPORT','RETRIEVE','SEARCH','SELECT','SEQUENCE','SORT','STOP',
+            'TITLE','WRITE'
+            ),
+        // Procedure Keywords (Names of specific procedures)
+        2 => array (
+            'AFTER-BREAK','AFTER-LINE','BEFORE-BREAK','BEFORE-LINE',
+            'ENDPAGE','REPORT-INPUT','TERMINATION',
+            ),
+        // Macro names, Parameters
+        3 => array (
+            'COMPILE','CONCAT','DESC','GETDATE','MASK','PUNCH',
+            'VALUE','SYNTAX','NEWPAGE','SKIP','COL','TALLY',
+            'WITH'
+            )
+        ),
+    'SYMBOLS' => array(
+        '(',')','=','&',',','*','>','<','%'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false
+        //4 => false,
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #FF0000;',
+            2 => 'color: #21A502;',
+            3 => 'color: #FF00FF;'
+            ),
+        'COMMENTS' => array(
+            0 => 'color: #0000FF; font-style: italic;',
+            1 => 'color: #0000FF; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => ''
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #FF7400;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #66CC66;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #736205;'
+            ),
+        'METHODS' => array(
+            1 => '',
+            2 => ''
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #FF7400;'
+            ),
+        'REGEXPS' => array(
+            0 => 'color: #E01B6A;'
+            ),
+        'SCRIPT' => array(
+            0 => ''
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => ''
+        ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(),
+    'REGEXPS' => array(
+        // We are trying to highlight Macro names here which preceded by %
+        0 => '(%)([a-zA-Z0-9])+(\s|\n)'
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/inc/geshi/f1.php b/vendor/easybook/geshi/geshi/f1.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/f1.php
rename to vendor/easybook/geshi/geshi/f1.php
diff --git a/inc/geshi/falcon.php b/vendor/easybook/geshi/geshi/falcon.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/falcon.php
rename to vendor/easybook/geshi/geshi/falcon.php
diff --git a/inc/geshi/fo.php b/vendor/easybook/geshi/geshi/fo.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/fo.php
rename to vendor/easybook/geshi/geshi/fo.php
diff --git a/inc/geshi/fortran.php b/vendor/easybook/geshi/geshi/fortran.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/fortran.php
rename to vendor/easybook/geshi/geshi/fortran.php
index c21ccd19274e740c8fd2a20df69eb69523742ad7..a77b6e7faebcef7ee84361035c4b44eb6440efa0
--- a/inc/geshi/fortran.php
+++ b/vendor/easybook/geshi/geshi/fortran.php
@@ -156,5 +156,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK'=> array(
         )
 );
-
-?>
diff --git a/inc/geshi/freebasic.php b/vendor/easybook/geshi/geshi/freebasic.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/freebasic.php
rename to vendor/easybook/geshi/geshi/freebasic.php
index b23f39bc7686f1bde75e5a20db4af4ffc83b50bd..c5426449664b9fa706647ca20e066c0deaebb980
--- a/inc/geshi/freebasic.php
+++ b/vendor/easybook/geshi/geshi/freebasic.php
@@ -137,5 +137,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/freeswitch.php b/vendor/easybook/geshi/geshi/freeswitch.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/freeswitch.php
rename to vendor/easybook/geshi/geshi/freeswitch.php
index c6fff2767e1d359437453d560a7fd589b5a74cae..5412e6d69fec2ebdafaf7f74f739fccf2bf37cec
--- a/inc/geshi/freeswitch.php
+++ b/vendor/easybook/geshi/geshi/freeswitch.php
@@ -164,5 +164,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/fsharp.php b/vendor/easybook/geshi/geshi/fsharp.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/fsharp.php
rename to vendor/easybook/geshi/geshi/fsharp.php
diff --git a/inc/geshi/gambas.php b/vendor/easybook/geshi/geshi/gambas.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/gambas.php
rename to vendor/easybook/geshi/geshi/gambas.php
diff --git a/inc/geshi/gdb.php b/vendor/easybook/geshi/geshi/gdb.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/gdb.php
rename to vendor/easybook/geshi/geshi/gdb.php
index 0a5e32c303e30ef3ba076d0849b22e397a3afcfa..9f63d25b0951c999dc318d6c801dcce53b22420d
--- a/inc/geshi/gdb.php
+++ b/vendor/easybook/geshi/geshi/gdb.php
@@ -194,5 +194,3 @@ $language_data = array (
 );
 
 // kate: replace-tabs on; indent-width 4;
-
-?>
diff --git a/inc/geshi/genero.php b/vendor/easybook/geshi/geshi/genero.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/genero.php
rename to vendor/easybook/geshi/geshi/genero.php
index e1b20b3e8007224b84e6ff69202fb1ef13337c4b..2ab24855f469f4e00725d29be7066d08ef923f72
--- a/inc/geshi/genero.php
+++ b/vendor/easybook/geshi/geshi/genero.php
@@ -459,5 +459,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/genie.php b/vendor/easybook/geshi/geshi/genie.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/genie.php
rename to vendor/easybook/geshi/geshi/genie.php
index db05ec062647a43c92f615d716d05fa070326da4..3bab1b7b773cb8e0aac6b1882d1ab233c14ef931
--- a/inc/geshi/genie.php
+++ b/vendor/easybook/geshi/geshi/genie.php
@@ -153,5 +153,3 @@ $language_data = array (
         )
     )
 );
-
-?>
diff --git a/inc/geshi/gettext.php b/vendor/easybook/geshi/geshi/gettext.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/gettext.php
rename to vendor/easybook/geshi/geshi/gettext.php
index 80b531c109bc2b3416b19efd68b9d4f3294a846d..eb928bf6cbae57d2213e9ea62fbfe510a3d414fc
--- a/inc/geshi/gettext.php
+++ b/vendor/easybook/geshi/geshi/gettext.php
@@ -93,5 +93,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4,
 );
-
-?>
diff --git a/inc/geshi/glsl.php b/vendor/easybook/geshi/geshi/glsl.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/glsl.php
rename to vendor/easybook/geshi/geshi/glsl.php
diff --git a/inc/geshi/gml.php b/vendor/easybook/geshi/geshi/gml.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/gml.php
rename to vendor/easybook/geshi/geshi/gml.php
index 999251b223bf850940a96c002a4179e67a8ac00f..58387b38af3068f6195fdc7c1be252e438cce722
--- a/inc/geshi/gml.php
+++ b/vendor/easybook/geshi/geshi/gml.php
@@ -502,5 +502,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/gnuplot.php b/vendor/easybook/geshi/geshi/gnuplot.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/gnuplot.php
rename to vendor/easybook/geshi/geshi/gnuplot.php
diff --git a/inc/geshi/go.php b/vendor/easybook/geshi/geshi/go.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/go.php
rename to vendor/easybook/geshi/geshi/go.php
diff --git a/inc/geshi/groovy.php b/vendor/easybook/geshi/geshi/groovy.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/groovy.php
rename to vendor/easybook/geshi/geshi/groovy.php
diff --git a/inc/geshi/gwbasic.php b/vendor/easybook/geshi/geshi/gwbasic.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/gwbasic.php
rename to vendor/easybook/geshi/geshi/gwbasic.php
diff --git a/inc/geshi/haskell.php b/vendor/easybook/geshi/geshi/haskell.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/haskell.php
rename to vendor/easybook/geshi/geshi/haskell.php
diff --git a/inc/geshi/haxe.php b/vendor/easybook/geshi/geshi/haxe.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/haxe.php
rename to vendor/easybook/geshi/geshi/haxe.php
diff --git a/inc/geshi/hicest.php b/vendor/easybook/geshi/geshi/hicest.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/hicest.php
rename to vendor/easybook/geshi/geshi/hicest.php
diff --git a/inc/geshi/hq9plus.php b/vendor/easybook/geshi/geshi/hq9plus.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/hq9plus.php
rename to vendor/easybook/geshi/geshi/hq9plus.php
index 7ba1a73c1c25f788b98ebc9ec345f47139d000a7..5b62589cc47f9f204e9a8ff707bcd0b6d9744700
--- a/inc/geshi/hq9plus.php
+++ b/vendor/easybook/geshi/geshi/hq9plus.php
@@ -100,5 +100,3 @@ $language_data = array (
             )
         )
 );
-
-?>
diff --git a/inc/geshi/html4strict.php b/vendor/easybook/geshi/geshi/html4strict.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/html4strict.php
rename to vendor/easybook/geshi/geshi/html4strict.php
diff --git a/inc/geshi/html5.php b/vendor/easybook/geshi/geshi/html5.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/html5.php
rename to vendor/easybook/geshi/geshi/html5.php
diff --git a/inc/geshi/icon.php b/vendor/easybook/geshi/geshi/icon.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/icon.php
rename to vendor/easybook/geshi/geshi/icon.php
diff --git a/inc/geshi/idl.php b/vendor/easybook/geshi/geshi/idl.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/idl.php
rename to vendor/easybook/geshi/geshi/idl.php
index 69bd14ff4fedb4694ba25e3e14ad908ec684f451..a2b6f57e1c5f68b775033adc7728e46f33a58a5f
--- a/inc/geshi/idl.php
+++ b/vendor/easybook/geshi/geshi/idl.php
@@ -119,5 +119,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/ini.php b/vendor/easybook/geshi/geshi/ini.php
old mode 100644
new mode 100755
similarity index 97%
rename from inc/geshi/ini.php
rename to vendor/easybook/geshi/geshi/ini.php
index 8e6ca76dbd08bbb1bd13d8bfd880bb9dc49905fb..f0a8edeaa7020fd805517b682d35253b3fddf0a5
--- a/inc/geshi/ini.php
+++ b/vendor/easybook/geshi/geshi/ini.php
@@ -44,8 +44,9 @@
 
 $language_data = array (
     'LANG_NAME' => 'INI',
-    'COMMENT_SINGLE' => array(0 => ';'),
+    'COMMENT_SINGLE' => array(),
     'COMMENT_MULTI' => array(),
+    'COMMENT_REGEXP' => array(0 => '/^\s*;.*?$/m'),
     'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
     'QUOTEMARKS' => array('"'),
     'ESCAPE_CHAR' => '',
@@ -124,5 +125,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/inno.php b/vendor/easybook/geshi/geshi/inno.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/inno.php
rename to vendor/easybook/geshi/geshi/inno.php
index 1e2ee8befbdb890e7d348c6e1205da47294508bb..192054cf1b1d611e904621ad699cdf4851322357
--- a/inc/geshi/inno.php
+++ b/vendor/easybook/geshi/geshi/inno.php
@@ -208,5 +208,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/intercal.php b/vendor/easybook/geshi/geshi/intercal.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/intercal.php
rename to vendor/easybook/geshi/geshi/intercal.php
diff --git a/inc/geshi/io.php b/vendor/easybook/geshi/geshi/io.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/io.php
rename to vendor/easybook/geshi/geshi/io.php
index 51fad43a715ee17d058ea5fb1b441d45b0642777..d23984e8f518bee01990ada35aac8ce99d420878
--- a/inc/geshi/io.php
+++ b/vendor/easybook/geshi/geshi/io.php
@@ -134,5 +134,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/vendor/easybook/geshi/geshi/ispfpanel.php b/vendor/easybook/geshi/geshi/ispfpanel.php
new file mode 100644
index 0000000000000000000000000000000000000000..c02897850112c2eb5d4c559e844beb16a8ce21f9
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/ispfpanel.php
@@ -0,0 +1,165 @@
+<?php
+/*************************************************************************************
+ * ispfpanel.php
+ * -------------
+ * Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
+ * Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
+ * Release Version: 1.0.8.11
+ * Date Started: 2012/09/18
+ *
+ * ISPF Panel Definition (MVS) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2011/09/22 (1.0.0)
+ *   -  First Release
+ *
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'ISPF Panel',
+    'COMMENT_SINGLE' => array(),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'KEYWORDS' => array(
+        // Panel Definition Statements
+        1 => array(
+            ')CCSID',')PANEL',')ATTR',')ABC',')ABCINIT',')ABCPROC',')BODY',')MODEL',
+            ')AREA',')INIT',')REINIT',')PROC',')FIELD',')HELP',')LIST',')PNTS',')END'
+            ),
+        // File-Tailoring Skeletons
+        2 => array (
+            ')DEFAULT',')BLANK', ')CM', ')DO', ')DOT', ')ELSE', ')ENDSEL',
+            ')ENDDO', ')ENDDOT', ')IF', ')IM', ')ITERATE', ')LEAVE', ')NOP', ')SEL',
+            ')SET', ')TB', ')TBA'
+            ),
+        // Control Variables
+        3 => array (
+            '.ALARM','.ATTR','.ATTRCHAR','.AUTOSEL','.CSRPOS','.CSRROW','.CURSOR','.HELP',
+            '.HHELP','.KANA','.MSG','.NRET','.PFKEY','.RESP','.TRAIL','.ZVARS'
+            ),
+        // Keywords
+        4 => array (
+            'WINDOW','ALARM','ATTN','BARRIER','HILITE','CAPS',
+            'CKBOX','CLEAR','CMD','COLOR','COMBO','CSRGRP','CUADYN',
+            'SKIP','INTENS','AREA','EXTEND',
+            'DESC','ASIS','VGET','VPUT','JUST','BATSCRD','BATSCRW',
+            'BDBCS','BDISPMAX','BIT','BKGRND','BREDIMAX','PAD','PADC',
+            'PAS','CHINESES','CHINESET','DANISH','DATAMOD','DDLIST',
+            'DEPTH','DUMP','ENGLISH','ERROR','EXIT','EXPAND','FIELD',
+            'FORMAT','FRENCH','GE','GERMAN','IMAGE','IND','TYPE',
+            'ITALIAN','JAPANESE','KOREAN','LCOL','LEN','LIND','LISTBOX',
+            'MODE','NEST','NOJUMP','NOKANA','NUMERIC','OUTLINE','PARM',
+            'PGM','PORTUGESE','RADIO','RCOL','REP','RIND','ROWS',
+            'SCALE','SCROLL','SFIHDR','SGERMAN','SIND','SPANISH',
+            'UPPERENG','WIDTH'
+            ),
+        // Parameters
+        5 => array (
+            'ADDPOP','ALPHA','ALPHAB','DYNAMIC','SCRL',
+            'CCSID','COMMAND','DSNAME','DSNAMEF','DSNAMEFM',
+            'DSNAMEPQ','DSNAMEQ','EBCDIC','ENBLDUMP','ENUM',// 'EXTEND',
+            'FI','FILEID','FRAME','GUI','GUISCRD','GUISCRW','HEX',
+            'HIGH','IDATE','IN','INCLUDE','INPUT','ITIME','JDATE',
+            'JSTD','KEYLIST','LANG','LEFT','LIST','LISTV','LISTVX',
+            'LISTX','LMSG','LOGO','LOW','MIX','NAME','NAMEF','NB',
+            'NEWAPPL','NEWPOOL','NOCHECK','NOLOGO','NON','NONBLANK',
+            'NULLS','NUM','OFF','ON','OPT','OUT','OUTPUT','PANEL',
+            /* 'PGM',*/'PICT','PICTN','POSITION','TBDISPL','PROFILE',
+            'QUERY','RANGE','REVERSE','RIGHT','SHARED','SMSG',
+            'STDDATE','STDTIME','TERMSTAT','TERMTRAC','TEST',
+            'TESTX','TEXT','TRACE','TRACEX','USCORE','USER',
+            'USERMOD','WSCMD','WSCMDV'
+            ),
+        ),
+    'SYMBOLS' => array(
+        '(',')','=','&',',','*','#','+','&','%','_','-','@','!'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false,
+        5 => false
+        ),
+    'STYLES' => array(
+        'BKGROUND' => 'background-color: #000000; color: #00FFFF;',
+        'KEYWORDS' => array(
+            1 => 'color: #FF0000;',
+            2 => 'color: #21A502;',
+            3 => 'color: #FF00FF;',
+            4 => 'color: #876C00;',
+            5 => 'color: #00FF00;'
+            ),
+        'COMMENTS' => array(
+            0 => 'color: #002EB8; font-style: italic;',
+            //1 => 'color: #002EB8; font-style: italic;',
+            //2 => 'color: #002EB8; font-style: italic;',
+            'MULTI' => 'color: #002EB8; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => ''
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #FF7400;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #700000;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #FF6633;'
+            ),
+        'METHODS' => array(
+            1 => '',
+            2 => ''
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #FF7400;'
+            ),
+        'REGEXPS' => array(
+            0 => 'color: #6B1F6B;'
+            ),
+        'SCRIPT' => array(
+            0 => ''
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => '',
+        5 => ''
+        ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(),
+    'REGEXPS' => array(
+        // Variables Defined in the Panel
+        0 => '&amp;[a-zA-Z]{1,8}[0-9]{0,}',
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/inc/geshi/j.php b/vendor/easybook/geshi/geshi/j.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/j.php
rename to vendor/easybook/geshi/geshi/j.php
index 5565bb499de70b298b134fd695de6f2977dfcd7b..fe8cb11a63876eb8274f6ba48d40db93158d2da3
--- a/inc/geshi/j.php
+++ b/vendor/easybook/geshi/geshi/j.php
@@ -186,5 +186,3 @@ $language_data = array(
             )
         )
 );
-
-?>
diff --git a/inc/geshi/java.php b/vendor/easybook/geshi/geshi/java.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/java.php
rename to vendor/easybook/geshi/geshi/java.php
index 652b8ddd382c1001e7a8f79a8d6b5fb00bcb1525..f384c4d841af8331fe5ae04c5ff6dedd3e373c8a
--- a/inc/geshi/java.php
+++ b/vendor/easybook/geshi/geshi/java.php
@@ -979,5 +979,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/java5.php b/vendor/easybook/geshi/geshi/java5.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/java5.php
rename to vendor/easybook/geshi/geshi/java5.php
index af16bd1e63760d779e449959a0e2c8746a6746a0..5d74d988b4632275467f4b43a70acbf288660ac2
--- a/inc/geshi/java5.php
+++ b/vendor/easybook/geshi/geshi/java5.php
@@ -1033,5 +1033,3 @@ $language_data = array (
             )
         )
 );
-
-?>
diff --git a/inc/geshi/javascript.php b/vendor/easybook/geshi/geshi/javascript.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/javascript.php
rename to vendor/easybook/geshi/geshi/javascript.php
diff --git a/vendor/easybook/geshi/geshi/jcl.php b/vendor/easybook/geshi/geshi/jcl.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d9c548257d43cf1a947cf06044a97e9b2ef91e2
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/jcl.php
@@ -0,0 +1,155 @@
+<?php
+/*************************************************************************************
+ * jcl.php
+ * -----------
+ * Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
+ * Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
+ * Release Version: 1.0.8.11
+ * Date Started: 2011/09/16
+ *
+ * JCL (MVS), DFSORT, IDCAMS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2011/09/16 (1.0.0)
+ *   -  Internal Release (for own blog/testing)
+ * 2012/09/22 (1.0.1)
+ *   - Released with support for DFSORT, ICETOOL, IDCAMS
+ *   - Added support for Symbolic variables in JCL
+ *   - Added support for TWS OPC variables
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'JCL',
+    'COMMENT_SINGLE' => array(),
+    'COMMENT_MULTI' => array(),
+    'COMMENT_REGEXP' => array(
+        // Comments identified using REGEX
+        // Comments start with //* but should not be followed by % (TWS) or + (some JES3 stmts)
+        3 => "\/\/\*[^%](.*?)(\n)"
+        ),
+    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'KEYWORDS' => array(
+        1 => array(
+            'COMMAND', 'CNTL', 'DD', 'ENDCNTL', 'EXEC', 'IF', 'THEN', 'ELSE',
+            'ENDIF', 'JCLLIB', 'JOB', 'OUTPUT', 'PEND',
+            'PROC', 'SET', 'XMIT'
+            ),
+        2 => array (
+            'PGM','CLASS','NOTIFY','MSGCLASS','DSN','KEYLEN','LABEL','LIKE',
+            'RECFM','LRECL','DCB','DSORG','BLKSIZE','SPACE','STORCLAS',
+            'DUMMY','DYNAM','AVGREC','BURST','DISP','UNIT','VOLUME',
+            'MSGLEVEL','REGION'
+            ),
+        // Keywords set 3: DFSORT, ICETOOL
+        3 => array (
+            'ALTSEQ','DEBUG','END','INCLUDE','INREC','MERGE','MODS','OMIT',
+            'OPTION','OUTFIL','OUTREC','RECORD','SORT','SUM',
+            'COPY','COUNT','DEFAULTS','DISPLAY','MODE','OCCUR','RANGE',
+            'SELECT','STATS','UNIQUE','VERIFY'
+            ),
+        // Keywords set 4: IDCAMS
+        4 => array (
+            'ALTER','BLDINDEX','CNVTCAT','DEFINE','ALIAS','ALTERNATEINDEX',
+            'CLUSTER','GENERATIONDATAGROUP','GDG','NONVSAM','PAGESPACE','PATH',
+            /* 'SPACE',*/'USERCATALOG','DELETE','EXAMINE','EXPORT','DISCONNECT',
+            'EXPORTRA','IMPORT','CONNECT','IMPORTRA','LISTCAT','LISTCRA',
+            'PRINT','REPRO','RESETCAT'//,'VERIFY'
+            )
+        ),
+    'SYMBOLS' => array(
+        '(',')','=',',','>','<'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #FF0000;',
+            2 => 'color: #21A502;',
+            3 => 'color: #FF00FF;',
+            4 => 'color: #876C00;'
+            ),
+        'COMMENTS' => array(
+            0 => 'color: #0000FF;',
+            //1 => 'color: #0000FF;',
+            //2 => 'color: #0000FF;',
+            3 => 'color: #0000FF;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => ''
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #FF7400;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #66CC66;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #336633;'
+            ),
+        'METHODS' => array(
+            1 => '',
+            2 => ''
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #FF7400;'
+            ),
+        'REGEXPS' => array(
+            0 => 'color: #6B1F6B;',
+            1 => 'color: #6B1F6B;',
+            2 => 'color: #6B1F6B;'
+            ),
+        'SCRIPT' => array(
+            0 => ''
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        // JCL book at IBM Bookshelf is http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/handheld/Connected/BOOKS/IEA2B680/CONTENTS?SHELF=&DT=20080604022956#3.1
+        2 => '',
+        3 => '',
+        4 => ''
+        ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(),
+    'REGEXPS' => array(
+        // The following regular expressions solves three purposes
+        // - Identify Temp Variables in JCL (e.g. &&TEMP)
+        // - Symbolic variables in JCL (e.g. &SYSUID)
+        // - TWS OPC Variables (e.g. %OPC)
+        // Thanks to Simon for pointing me to this
+        0 => '&amp;&amp;[a-zA-Z]{1,8}[0-9]{0,}',
+        1 => '&amp;[a-zA-Z]{1,8}[0-9]{0,}',
+        2 => '&amp;|\?|%[a-zA-Z]{1,8}[0-9]{0,}'
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/inc/geshi/jquery.php b/vendor/easybook/geshi/geshi/jquery.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/jquery.php
rename to vendor/easybook/geshi/geshi/jquery.php
diff --git a/inc/geshi/kixtart.php b/vendor/easybook/geshi/geshi/kixtart.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/kixtart.php
rename to vendor/easybook/geshi/geshi/kixtart.php
index 5b90919892e391a2c31504c322c784042133d3b7..42ffa42ecd5923a9148fc47d6aa1dbe5b6755787
--- a/inc/geshi/kixtart.php
+++ b/vendor/easybook/geshi/geshi/kixtart.php
@@ -325,5 +325,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/klonec.php b/vendor/easybook/geshi/geshi/klonec.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/klonec.php
rename to vendor/easybook/geshi/geshi/klonec.php
index 5f86e78dca32c0344848825c1bce1def2e0e155d..4831b13b7bc6599ad249a4d29cbc3d1182ba2181
--- a/inc/geshi/klonec.php
+++ b/vendor/easybook/geshi/geshi/klonec.php
@@ -278,5 +278,3 @@ $language_data = array (
         )
     )
 );
-
-?>
diff --git a/inc/geshi/klonecpp.php b/vendor/easybook/geshi/geshi/klonecpp.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/klonecpp.php
rename to vendor/easybook/geshi/geshi/klonecpp.php
index 6564c6b7b805d32de3d28325295b47ee4be140c1..d0368202ddecaeefc0aba2f79c3e871e924d3b93
--- a/inc/geshi/klonecpp.php
+++ b/vendor/easybook/geshi/geshi/klonecpp.php
@@ -306,5 +306,3 @@ $language_data = array (
         )
     )
 );
-
-?>
diff --git a/inc/geshi/latex.php b/vendor/easybook/geshi/geshi/latex.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/latex.php
rename to vendor/easybook/geshi/geshi/latex.php
diff --git a/inc/geshi/lb.php b/vendor/easybook/geshi/geshi/lb.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/lb.php
rename to vendor/easybook/geshi/geshi/lb.php
diff --git a/inc/geshi/ldif.php b/vendor/easybook/geshi/geshi/ldif.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/ldif.php
rename to vendor/easybook/geshi/geshi/ldif.php
diff --git a/inc/geshi/lisp.php b/vendor/easybook/geshi/geshi/lisp.php
old mode 100644
new mode 100755
similarity index 94%
rename from inc/geshi/lisp.php
rename to vendor/easybook/geshi/geshi/lisp.php
index be823a4052006482e1db83da986a764c27fea0b2..a2301914e0968eea90f6967a7a3a291b9c1d6b7e
--- a/inc/geshi/lisp.php
+++ b/vendor/easybook/geshi/geshi/lisp.php
@@ -3,14 +3,16 @@
  * lisp.php
  * --------
  * Author: Roberto Rossi (rsoftware@altervista.org)
- * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter
- * Release Version: 1.0.8.11
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.12
  * Date Started: 2004/08/30
  *
  * Generic Lisp language file for GeSHi.
  *
  * CHANGES
  * -------
+ * 2013/11/13 (1.0.8.12)
+ *  -  Fixed bug where a keyword was highlighted in identifiers (Edward Hart)
  * 2005/12/9  (1.0.2)
  *  -  Added support for :keywords and ::access (Denis Mashkevich)
  * 2004/11/27 (1.0.1)
@@ -135,10 +137,11 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         ),
     'PARSER_CONTROL' => array(
+        'KEYWORDS' => array(
+            'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9-\$_\|\#|^&])',
+            ),
         'OOLANG' => array(
             'MATCH_AFTER' => '[a-zA-Z][a-zA-Z0-9_\-]*'
             )
         )
 );
-
-?>
\ No newline at end of file
diff --git a/inc/geshi/llvm.php b/vendor/easybook/geshi/geshi/llvm.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/llvm.php
rename to vendor/easybook/geshi/geshi/llvm.php
diff --git a/inc/geshi/locobasic.php b/vendor/easybook/geshi/geshi/locobasic.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/locobasic.php
rename to vendor/easybook/geshi/geshi/locobasic.php
diff --git a/inc/geshi/logtalk.php b/vendor/easybook/geshi/geshi/logtalk.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/logtalk.php
rename to vendor/easybook/geshi/geshi/logtalk.php
diff --git a/inc/geshi/lolcode.php b/vendor/easybook/geshi/geshi/lolcode.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/lolcode.php
rename to vendor/easybook/geshi/geshi/lolcode.php
diff --git a/inc/geshi/lotusformulas.php b/vendor/easybook/geshi/geshi/lotusformulas.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/lotusformulas.php
rename to vendor/easybook/geshi/geshi/lotusformulas.php
index 12257d74882079b37a0f14cbacd7a01d92b4a5ec..18d6f7822b563cce5fa63761af204a39ce75d12d
--- a/inc/geshi/lotusformulas.php
+++ b/vendor/easybook/geshi/geshi/lotusformulas.php
@@ -314,5 +314,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 2
     );
-
-?>
diff --git a/inc/geshi/lotusscript.php b/vendor/easybook/geshi/geshi/lotusscript.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/lotusscript.php
rename to vendor/easybook/geshi/geshi/lotusscript.php
index b8b65f206e9d209908e7a043134d9c4ea32e9877..5d8b6d596af09801c3e91627fe5cfbf6924e3cc8
--- a/inc/geshi/lotusscript.php
+++ b/vendor/easybook/geshi/geshi/lotusscript.php
@@ -187,5 +187,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 2
 );
-
-?>
diff --git a/inc/geshi/lscript.php b/vendor/easybook/geshi/geshi/lscript.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/lscript.php
rename to vendor/easybook/geshi/geshi/lscript.php
diff --git a/inc/geshi/lsl2.php b/vendor/easybook/geshi/geshi/lsl2.php
old mode 100644
new mode 100755
similarity index 67%
rename from inc/geshi/lsl2.php
rename to vendor/easybook/geshi/geshi/lsl2.php
index f80cf4f29f4c74c9137368a71a21b7cc956969bd..dd0bcce8bf2e30397b52c7becd0900760411fb98
--- a/inc/geshi/lsl2.php
+++ b/vendor/easybook/geshi/geshi/lsl2.php
@@ -9,15 +9,14 @@
  *
  * Linden Scripting Language (LSL2) language file for GeSHi.
  *
- *   Data derived and validated against the following:
- *      http://wiki.secondlife.com/wiki/LSL_Portal
- *      http://www.lslwiki.net/lslwiki/wakka.php?wakka=HomePage
- *      http://rpgstats.com/wiki/index.php?title=Main_Page
- *
  * CHANGES
  * -------
- * 2009/02/05 (1.0.0)
+ * 2009-02-05 (1.0.0)
  *   -  First Release
+ * 2013-01-01
+ *   -  Modified by Sei Lisa for compatibility with the geshi.py output module
+ *      which is part of the LSL2 Derived Files Generator, available at:
+ *      http://code.google.com/p/lsl-keywords
  *
  * TODO (updated 2009/02/05)
  * -------------------------
@@ -50,6 +49,7 @@ $language_data = array (
     'QUOTEMARKS' => array('"'),
     'ESCAPE_CHAR' => '\\',
     'KEYWORDS' => array(
+// Generated by LSL2 Derived Files Generator. Database version: 0.0.20130627001; output module version: 0.0.20130619000
         1 => array( // flow control
             'do',
             'else',
@@ -65,11 +65,17 @@ $language_data = array (
             'AGENT',
             'AGENT_ALWAYS_RUN',
             'AGENT_ATTACHMENTS',
+            'AGENT_AUTOPILOT',
             'AGENT_AWAY',
             'AGENT_BUSY',
+            'AGENT_BY_LEGACY_NAME',
+            'AGENT_BY_USERNAME',
             'AGENT_CROUCHING',
             'AGENT_FLYING',
             'AGENT_IN_AIR',
+            'AGENT_LIST_PARCEL',
+            'AGENT_LIST_PARCEL_OWNER',
+            'AGENT_LIST_REGION',
             'AGENT_MOUSELOOK',
             'AGENT_ON_OBJECT',
             'AGENT_SCRIPTED',
@@ -78,6 +84,7 @@ $language_data = array (
             'AGENT_WALKING',
             'ALL_SIDES',
             'ANIM_ON',
+            'ATTACH_AVATAR_CENTER',
             'ATTACH_BACK',
             'ATTACH_BELLY',
             'ATTACH_CHEST',
@@ -92,17 +99,18 @@ $language_data = array (
             'ATTACH_HUD_TOP_LEFT',
             'ATTACH_HUD_TOP_RIGHT',
             'ATTACH_LEAR',
+            'ATTACH_LEFT_PEC',
             'ATTACH_LEYE',
             'ATTACH_LFOOT',
             'ATTACH_LHAND',
             'ATTACH_LHIP',
             'ATTACH_LLARM',
             'ATTACH_LLLEG',
-            'ATTACH_LPEC',
             'ATTACH_LSHOULDER',
             'ATTACH_LUARM',
             'ATTACH_LULEG',
             'ATTACH_MOUTH',
+            'ATTACH_NECK',
             'ATTACH_NOSE',
             'ATTACH_PELVIS',
             'ATTACH_REAR',
@@ -110,12 +118,15 @@ $language_data = array (
             'ATTACH_RFOOT',
             'ATTACH_RHAND',
             'ATTACH_RHIP',
+            'ATTACH_RIGHT_PEC',
             'ATTACH_RLARM',
             'ATTACH_RLLEG',
-            'ATTACH_RPEC',
             'ATTACH_RSHOULDER',
             'ATTACH_RUARM',
             'ATTACH_RULEG',
+            'AVOID_CHARACTERS',
+            'AVOID_DYNAMIC_OBSTACLES',
+            'AVOID_NONE',
             'CAMERA_ACTIVE',
             'CAMERA_BEHINDNESS_ANGLE',
             'CAMERA_BEHINDNESS_LAG',
@@ -134,18 +145,52 @@ $language_data = array (
             'CHANGED_COLOR',
             'CHANGED_INVENTORY',
             'CHANGED_LINK',
+            'CHANGED_MEDIA',
             'CHANGED_OWNER',
             'CHANGED_REGION',
+            'CHANGED_REGION_START',
             'CHANGED_SCALE',
             'CHANGED_SHAPE',
             'CHANGED_TELEPORT',
             'CHANGED_TEXTURE',
+            'CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES',
+            'CHARACTER_AVOIDANCE_MODE',
+            'CHARACTER_CMD_JUMP',
+            'CHARACTER_CMD_SMOOTH_STOP',
+            'CHARACTER_CMD_STOP',
+            'CHARACTER_DESIRED_SPEED',
+            'CHARACTER_DESIRED_TURN_SPEED',
+            'CHARACTER_LENGTH',
+            'CHARACTER_MAX_ACCEL',
+            'CHARACTER_MAX_DECEL',
+            'CHARACTER_MAX_SPEED',
+            'CHARACTER_MAX_TURN_RADIUS',
+            'CHARACTER_ORIENTATION',
+            'CHARACTER_RADIUS',
+            'CHARACTER_STAY_WITHIN_PARCEL',
+            'CHARACTER_TYPE',
+            'CHARACTER_TYPE_A',
+            'CHARACTER_TYPE_B',
+            'CHARACTER_TYPE_C',
+            'CHARACTER_TYPE_D',
+            'CHARACTER_TYPE_NONE',
+            'CLICK_ACTION_BUY',
             'CLICK_ACTION_NONE',
             'CLICK_ACTION_OPEN',
             'CLICK_ACTION_OPEN_MEDIA',
             'CLICK_ACTION_PAY',
+            'CLICK_ACTION_PLAY',
             'CLICK_ACTION_SIT',
             'CLICK_ACTION_TOUCH',
+            'CONTENT_TYPE_ATOM',
+            'CONTENT_TYPE_FORM',
+            'CONTENT_TYPE_HTML',
+            'CONTENT_TYPE_JSON',
+            'CONTENT_TYPE_LLSD',
+            'CONTENT_TYPE_RSS',
+            'CONTENT_TYPE_TEXT',
+            'CONTENT_TYPE_XHTML',
+            'CONTENT_TYPE_XML',
             'CONTROL_BACK',
             'CONTROL_DOWN',
             'CONTROL_FWD',
@@ -160,18 +205,38 @@ $language_data = array (
             'DATA_NAME',
             'DATA_ONLINE',
             'DATA_PAYINFO',
-            'DATA_RATING',
             'DATA_SIM_POS',
             'DATA_SIM_RATING',
             'DATA_SIM_STATUS',
             'DEBUG_CHANNEL',
             'DEG_TO_RAD',
+            'DENSITY',
             'EOF',
+            'ERR_GENERIC',
+            'ERR_MALFORMED_PARAMS',
+            'ERR_PARCEL_PERMISSIONS',
+            'ERR_RUNTIME_PERMISSIONS',
+            'ERR_THROTTLED',
+            'ESTATE_ACCESS_ALLOWED_AGENT_ADD',
+            'ESTATE_ACCESS_ALLOWED_AGENT_REMOVE',
+            'ESTATE_ACCESS_ALLOWED_GROUP_ADD',
+            'ESTATE_ACCESS_ALLOWED_GROUP_REMOVE',
+            'ESTATE_ACCESS_BANNED_AGENT_ADD',
+            'ESTATE_ACCESS_BANNED_AGENT_REMOVE',
             'FALSE',
+            'FORCE_DIRECT_PATH',
+            'FRICTION',
+            'GCNP_RADIUS',
+            'GCNP_STATIC',
+            'GRAVITY_MULTIPLIER',
+            'HORIZONTAL',
             'HTTP_BODY_MAXLENGTH',
             'HTTP_BODY_TRUNCATED',
+            'HTTP_CUSTOM_HEADER',
             'HTTP_METHOD',
             'HTTP_MIMETYPE',
+            'HTTP_PRAGMA_NO_CACHE',
+            'HTTP_VERBOSE_THROTTLE',
             'HTTP_VERIFY_CERT',
             'INVENTORY_ALL',
             'INVENTORY_ANIMATION',
@@ -185,11 +250,36 @@ $language_data = array (
             'INVENTORY_SCRIPT',
             'INVENTORY_SOUND',
             'INVENTORY_TEXTURE',
+            'JSON_APPEND',
+            'JSON_ARRAY',
+            'JSON_FALSE',
+            'JSON_INVALID',
+            'JSON_NULL',
+            'JSON_NUMBER',
+            'JSON_OBJECT',
+            'JSON_STRING',
+            'JSON_TRUE',
+            'KFM_CMD_PAUSE',
+            'KFM_CMD_PLAY',
+            'KFM_CMD_SET_MODE',
+            'KFM_CMD_STOP',
+            'KFM_COMMAND',
+            'KFM_DATA',
+            'KFM_FORWARD',
+            'KFM_LOOP',
+            'KFM_MODE',
+            'KFM_PING_PONG',
+            'KFM_REVERSE',
+            'KFM_ROTATION',
+            'KFM_TRANSLATION',
+            'LAND_LARGE_BRUSH',
             'LAND_LEVEL',
             'LAND_LOWER',
+            'LAND_MEDIUM_BRUSH',
             'LAND_NOISE',
             'LAND_RAISE',
             'LAND_REVERT',
+            'LAND_SMALL_BRUSH',
             'LAND_SMOOTH',
             'LINK_ALL_CHILDREN',
             'LINK_ALL_OTHERS',
@@ -213,20 +303,54 @@ $language_data = array (
             'MASK_NEXT',
             'MASK_OWNER',
             'NULL_KEY',
+            'OBJECT_ATTACHED_POINT',
+            'OBJECT_CHARACTER_TIME',
             'OBJECT_CREATOR',
             'OBJECT_DESC',
             'OBJECT_GROUP',
             'OBJECT_NAME',
             'OBJECT_OWNER',
+            'OBJECT_PATHFINDING_TYPE',
+            'OBJECT_PHANTOM',
+            'OBJECT_PHYSICS',
+            'OBJECT_PHYSICS_COST',
             'OBJECT_POS',
+            'OBJECT_PRIM_EQUIVALENCE',
+            'OBJECT_RETURN_PARCEL',
+            'OBJECT_RETURN_PARCEL_OWNER',
+            'OBJECT_RETURN_REGION',
+            'OBJECT_ROOT',
             'OBJECT_ROT',
+            'OBJECT_RUNNING_SCRIPT_COUNT',
+            'OBJECT_SCRIPT_MEMORY',
+            'OBJECT_SCRIPT_TIME',
+            'OBJECT_SERVER_COST',
+            'OBJECT_STREAMING_COST',
+            'OBJECT_TEMP_ON_REZ',
+            'OBJECT_TOTAL_SCRIPT_COUNT',
             'OBJECT_UNKNOWN_DETAIL',
             'OBJECT_VELOCITY',
+            'OPT_AVATAR',
+            'OPT_CHARACTER',
+            'OPT_EXCLUSION_VOLUME',
+            'OPT_LEGACY_LINKSET',
+            'OPT_MATERIAL_VOLUME',
+            'OPT_OTHER',
+            'OPT_STATIC_OBSTACLE',
+            'OPT_WALKABLE',
+            'PARCEL_COUNT_GROUP',
+            'PARCEL_COUNT_OTHER',
+            'PARCEL_COUNT_OWNER',
+            'PARCEL_COUNT_SELECTED',
+            'PARCEL_COUNT_TEMP',
+            'PARCEL_COUNT_TOTAL',
             'PARCEL_DETAILS_AREA',
             'PARCEL_DETAILS_DESC',
             'PARCEL_DETAILS_GROUP',
+            'PARCEL_DETAILS_ID',
             'PARCEL_DETAILS_NAME',
             'PARCEL_DETAILS_OWNER',
+            'PARCEL_DETAILS_SEE_AVATARS',
             'PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY',
             'PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS',
             'PARCEL_FLAG_ALLOW_CREATE_OBJECTS',
@@ -246,6 +370,7 @@ $language_data = array (
             'PARCEL_MEDIA_COMMAND_AGENT',
             'PARCEL_MEDIA_COMMAND_AUTO_ALIGN',
             'PARCEL_MEDIA_COMMAND_DESC',
+            'PARCEL_MEDIA_COMMAND_LOOP',
             'PARCEL_MEDIA_COMMAND_LOOP_SET',
             'PARCEL_MEDIA_COMMAND_PAUSE',
             'PARCEL_MEDIA_COMMAND_PLAY',
@@ -254,8 +379,10 @@ $language_data = array (
             'PARCEL_MEDIA_COMMAND_TEXTURE',
             'PARCEL_MEDIA_COMMAND_TIME',
             'PARCEL_MEDIA_COMMAND_TYPE',
+            'PARCEL_MEDIA_COMMAND_UNLOAD',
             'PARCEL_MEDIA_COMMAND_URL',
             'PASSIVE',
+            'PATROL_PAUSE_AT_WAYPOINTS',
             'PAYMENT_INFO_ON_FILE',
             'PAYMENT_INFO_USED',
             'PAY_DEFAULT',
@@ -264,7 +391,11 @@ $language_data = array (
             'PERMISSION_CHANGE_LINKS',
             'PERMISSION_CONTROL_CAMERA',
             'PERMISSION_DEBIT',
+            'PERMISSION_OVERRIDE_ANIMATIONS',
+            'PERMISSION_RETURN_OBJECTS',
+            'PERMISSION_SILENT_ESTATE_MANAGEMENT',
             'PERMISSION_TAKE_CONTROLS',
+            'PERMISSION_TELEPORT',
             'PERMISSION_TRACK_CAMERA',
             'PERMISSION_TRIGGER_ANIMATION',
             'PERM_ALL',
@@ -273,6 +404,7 @@ $language_data = array (
             'PERM_MOVE',
             'PERM_TRANSFER',
             'PI',
+            'PING_PONG',
             'PI_BY_TWO',
             'PRIM_BUMP_BARK',
             'PRIM_BUMP_BLOBS',
@@ -294,39 +426,93 @@ $language_data = array (
             'PRIM_BUMP_WEAVE',
             'PRIM_BUMP_WOOD',
             'PRIM_COLOR',
+            'PRIM_DESC',
+            'PRIM_FLEXIBLE',
             'PRIM_FULLBRIGHT',
+            'PRIM_GLOW',
             'PRIM_HOLE_CIRCLE',
             'PRIM_HOLE_DEFAULT',
             'PRIM_HOLE_SQUARE',
             'PRIM_HOLE_TRIANGLE',
+            'PRIM_LINK_TARGET',
             'PRIM_MATERIAL',
             'PRIM_MATERIAL_FLESH',
             'PRIM_MATERIAL_GLASS',
-            'PRIM_MATERIAL_LIGHT',
             'PRIM_MATERIAL_METAL',
             'PRIM_MATERIAL_PLASTIC',
             'PRIM_MATERIAL_RUBBER',
             'PRIM_MATERIAL_STONE',
             'PRIM_MATERIAL_WOOD',
+            'PRIM_MEDIA_ALT_IMAGE_ENABLE',
+            'PRIM_MEDIA_AUTO_LOOP',
+            'PRIM_MEDIA_AUTO_PLAY',
+            'PRIM_MEDIA_AUTO_SCALE',
+            'PRIM_MEDIA_AUTO_ZOOM',
+            'PRIM_MEDIA_CONTROLS',
+            'PRIM_MEDIA_CONTROLS_MINI',
+            'PRIM_MEDIA_CONTROLS_STANDARD',
+            'PRIM_MEDIA_CURRENT_URL',
+            'PRIM_MEDIA_FIRST_CLICK_INTERACT',
+            'PRIM_MEDIA_HEIGHT_PIXELS',
+            'PRIM_MEDIA_HOME_URL',
+            'PRIM_MEDIA_MAX_HEIGHT_PIXELS',
+            'PRIM_MEDIA_MAX_URL_LENGTH',
+            'PRIM_MEDIA_MAX_WHITELIST_COUNT',
+            'PRIM_MEDIA_MAX_WHITELIST_SIZE',
+            'PRIM_MEDIA_MAX_WIDTH_PIXELS',
+            'PRIM_MEDIA_PARAM_MAX',
+            'PRIM_MEDIA_PERMS_CONTROL',
+            'PRIM_MEDIA_PERMS_INTERACT',
+            'PRIM_MEDIA_PERM_ANYONE',
+            'PRIM_MEDIA_PERM_GROUP',
+            'PRIM_MEDIA_PERM_NONE',
+            'PRIM_MEDIA_PERM_OWNER',
+            'PRIM_MEDIA_WHITELIST',
+            'PRIM_MEDIA_WHITELIST_ENABLE',
+            'PRIM_MEDIA_WIDTH_PIXELS',
+            'PRIM_NAME',
+            'PRIM_OMEGA',
             'PRIM_PHANTOM',
             'PRIM_PHYSICS',
+            'PRIM_PHYSICS_SHAPE_CONVEX',
+            'PRIM_PHYSICS_SHAPE_NONE',
+            'PRIM_PHYSICS_SHAPE_PRIM',
+            'PRIM_PHYSICS_SHAPE_TYPE',
+            'PRIM_POINT_LIGHT',
             'PRIM_POSITION',
+            'PRIM_POS_LOCAL',
             'PRIM_ROTATION',
+            'PRIM_ROT_LOCAL',
+            'PRIM_SCULPT_FLAG_INVERT',
+            'PRIM_SCULPT_FLAG_MIRROR',
+            'PRIM_SCULPT_TYPE_CYLINDER',
+            'PRIM_SCULPT_TYPE_MASK',
+            'PRIM_SCULPT_TYPE_PLANE',
+            'PRIM_SCULPT_TYPE_SPHERE',
+            'PRIM_SCULPT_TYPE_TORUS',
             'PRIM_SHINY_HIGH',
             'PRIM_SHINY_LOW',
             'PRIM_SHINY_MEDIUM',
             'PRIM_SHINY_NONE',
             'PRIM_SIZE',
+            'PRIM_SLICE',
             'PRIM_TEMP_ON_REZ',
+            'PRIM_TEXGEN',
+            'PRIM_TEXGEN_DEFAULT',
+            'PRIM_TEXGEN_PLANAR',
+            'PRIM_TEXT',
             'PRIM_TEXTURE',
             'PRIM_TYPE',
             'PRIM_TYPE_BOX',
             'PRIM_TYPE_CYLINDER',
             'PRIM_TYPE_PRISM',
             'PRIM_TYPE_RING',
+            'PRIM_TYPE_SCULPT',
             'PRIM_TYPE_SPHERE',
             'PRIM_TYPE_TORUS',
             'PRIM_TYPE_TUBE',
+            'PROFILE_NONE',
+            'PROFILE_SCRIPT_MEMORY',
             'PSYS_PART_BOUNCE_MASK',
             'PSYS_PART_EMISSIVE_MASK',
             'PSYS_PART_END_ALPHA',
@@ -352,10 +538,8 @@ $language_data = array (
             'PSYS_SRC_BURST_RATE',
             'PSYS_SRC_BURST_SPEED_MAX',
             'PSYS_SRC_BURST_SPEED_MIN',
-            'PSYS_SRC_INNERANGLE',
             'PSYS_SRC_MAX_AGE',
             'PSYS_SRC_OMEGA',
-            'PSYS_SRC_OUTERANGLE',
             'PSYS_SRC_PATTERN',
             'PSYS_SRC_PATTERN_ANGLE',
             'PSYS_SRC_PATTERN_ANGLE_CONE',
@@ -364,13 +548,70 @@ $language_data = array (
             'PSYS_SRC_PATTERN_EXPLODE',
             'PSYS_SRC_TARGET_KEY',
             'PSYS_SRC_TEXTURE',
+            'PUBLIC_CHANNEL',
+            'PURSUIT_FUZZ_FACTOR',
+            'PURSUIT_GOAL_TOLERANCE',
+            'PURSUIT_INTERCEPT',
+            'PURSUIT_OFFSET',
+            'PU_EVADE_HIDDEN',
+            'PU_EVADE_SPOTTED',
+            'PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED',
+            'PU_FAILURE_INVALID_GOAL',
+            'PU_FAILURE_INVALID_START',
+            'PU_FAILURE_NO_NAVMESH',
+            'PU_FAILURE_NO_VALID_DESTINATION',
+            'PU_FAILURE_OTHER',
+            'PU_FAILURE_PARCEL_UNREACHABLE',
+            'PU_FAILURE_TARGET_GONE',
+            'PU_FAILURE_UNREACHABLE',
+            'PU_GOAL_REACHED',
+            'PU_SLOWDOWN_DISTANCE_REACHED',
             'RAD_TO_DEG',
+            'RCERR_CAST_TIME_EXCEEDED',
+            'RCERR_SIM_PERF_LOW',
+            'RCERR_UNKNOWN',
+            'RC_DATA_FLAGS',
+            'RC_DETECT_PHANTOM',
+            'RC_GET_LINK_NUM',
+            'RC_GET_NORMAL',
+            'RC_GET_ROOT_KEY',
+            'RC_MAX_HITS',
+            'RC_REJECT_AGENTS',
+            'RC_REJECT_LAND',
+            'RC_REJECT_NONPHYSICAL',
+            'RC_REJECT_PHYSICAL',
+            'RC_REJECT_TYPES',
+            'REGION_FLAG_ALLOW_DAMAGE',
+            'REGION_FLAG_ALLOW_DIRECT_TELEPORT',
+            'REGION_FLAG_BLOCK_FLY',
+            'REGION_FLAG_BLOCK_TERRAFORM',
+            'REGION_FLAG_DISABLE_COLLISIONS',
+            'REGION_FLAG_DISABLE_PHYSICS',
+            'REGION_FLAG_FIXED_SUN',
+            'REGION_FLAG_RESTRICT_PUSHOBJECT',
+            'REGION_FLAG_SANDBOX',
             'REMOTE_DATA_CHANNEL',
+            'REMOTE_DATA_REPLY',
             'REMOTE_DATA_REQUEST',
+            'REQUIRE_LINE_OF_SIGHT',
+            'RESTITUTION',
+            'REVERSE',
+            'ROTATE',
+            'SCALE',
             'SCRIPTED',
+            'SIM_STAT_PCT_CHARS_STEPPED',
+            'SMOOTH',
             'SQRT2',
             'STATUS_BLOCK_GRAB',
+            'STATUS_BLOCK_GRAB_OBJECT',
+            'STATUS_BOUNDS_ERROR',
+            'STATUS_CAST_SHADOWS',
             'STATUS_DIE_AT_EDGE',
+            'STATUS_INTERNAL_ERROR',
+            'STATUS_MALFORMED_PARAMS',
+            'STATUS_NOT_FOUND',
+            'STATUS_NOT_SUPPORTED',
+            'STATUS_OK',
             'STATUS_PHANTOM',
             'STATUS_PHYSICS',
             'STATUS_RETURN_AT_EDGE',
@@ -378,8 +619,34 @@ $language_data = array (
             'STATUS_ROTATE_Y',
             'STATUS_ROTATE_Z',
             'STATUS_SANDBOX',
+            'STATUS_TYPE_MISMATCH',
+            'STATUS_WHITELIST_FAILED',
+            'STRING_TRIM',
+            'STRING_TRIM_HEAD',
+            'STRING_TRIM_TAIL',
+            'TEXTURE_BLANK',
+            'TEXTURE_DEFAULT',
+            'TEXTURE_MEDIA',
+            'TEXTURE_PLYWOOD',
+            'TEXTURE_TRANSPARENT',
+            'TOUCH_INVALID_FACE',
+            'TOUCH_INVALID_TEXCOORD',
+            'TOUCH_INVALID_VECTOR',
+            'TRAVERSAL_TYPE',
+            'TRAVERSAL_TYPE_FAST',
+            'TRAVERSAL_TYPE_NONE',
+            'TRAVERSAL_TYPE_SLOW',
             'TRUE',
             'TWO_PI',
+            'TYPE_FLOAT',
+            'TYPE_INTEGER',
+            'TYPE_INVALID',
+            'TYPE_KEY',
+            'TYPE_ROTATION',
+            'TYPE_STRING',
+            'TYPE_VECTOR',
+            'URL_REQUEST_DENIED',
+            'URL_REQUEST_GRANTED',
             'VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY',
             'VEHICLE_ANGULAR_DEFLECTION_TIMESCALE',
             'VEHICLE_ANGULAR_FRICTION_TIMESCALE',
@@ -419,13 +686,15 @@ $language_data = array (
             'VEHICLE_TYPE_SLED',
             'VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY',
             'VEHICLE_VERTICAL_ATTRACTION_TIMESCALE',
+            'VERTICAL',
+            'WANDER_PAUSE_AT_WAYPOINTS',
             'ZERO_ROTATION',
             'ZERO_VECTOR',
             ),
         3 => array( // handlers
             'at_rot_target',
             'at_target',
-            'attached',
+            'attach',
             'changed',
             'collision',
             'collision_end',
@@ -433,6 +702,7 @@ $language_data = array (
             'control',
             'dataserver',
             'email',
+            'http_request',
             'http_response',
             'land_collision',
             'land_collision_end',
@@ -447,6 +717,7 @@ $language_data = array (
             'not_at_target',
             'object_rez',
             'on_rez',
+            'path_update',
             'remote_data',
             'run_time_permissions',
             'sensor',
@@ -456,12 +727,14 @@ $language_data = array (
             'touch',
             'touch_end',
             'touch_start',
+            'transaction_result',
             ),
         4 => array( // data types
             'float',
             'integer',
             'key',
             'list',
+            'quaternion',
             'rotation',
             'string',
             'vector',
@@ -480,6 +753,8 @@ $language_data = array (
             'llAsin',
             'llAtan2',
             'llAttachToAvatar',
+            'llAttachToAvatarTemp',
+            'llAvatarOnLinkSitTarget',
             'llAvatarOnSitTarget',
             'llAxes2Rot',
             'llAxisAngle2Rot',
@@ -487,16 +762,19 @@ $language_data = array (
             'llBase64ToString',
             'llBreakAllLinks',
             'llBreakLink',
+            'llCastRay',
             'llCeil',
             'llClearCameraParams',
+            'llClearLinkMedia',
+            'llClearPrimMedia',
             'llCloseRemoteDataChannel',
-            'llCloud',
             'llCollisionFilter',
             'llCollisionSound',
-            'llCollisionSprite',
             'llCos',
+            'llCreateCharacter',
             'llCreateLink',
             'llCSV2List',
+            'llDeleteCharacter',
             'llDeleteSubList',
             'llDeleteSubString',
             'llDetachFromAvatar',
@@ -524,31 +802,42 @@ $language_data = array (
             'llEmail',
             'llEscapeURL',
             'llEuler2Rot',
+            'llEvade',
+            'llExecCharacterCmd',
             'llFabs',
+            'llFleeFrom',
             'llFloor',
             'llForceMouselook',
             'llFrand',
+            'llGenerateKey',
             'llGetAccel',
             'llGetAgentInfo',
             'llGetAgentLanguage',
+            'llGetAgentList',
             'llGetAgentSize',
             'llGetAlpha',
             'llGetAndResetTime',
             'llGetAnimation',
             'llGetAnimationList',
+            'llGetAnimationOverride',
             'llGetAttached',
             'llGetBoundingBox',
             'llGetCameraPos',
             'llGetCameraRot',
             'llGetCenterOfMass',
+            'llGetClosestNavPoint',
             'llGetColor',
             'llGetCreator',
             'llGetDate',
+            'llGetDisplayName',
             'llGetEnergy',
+            'llGetEnv',
             'llGetForce',
             'llGetFreeMemory',
+            'llGetFreeURLs',
             'llGetGeometricCenter',
             'llGetGMTclock',
+            'llGetHTTPHeader',
             'llGetInventoryCreator',
             'llGetInventoryKey',
             'llGetInventoryName',
@@ -558,13 +847,18 @@ $language_data = array (
             'llGetKey',
             'llGetLandOwnerAt',
             'llGetLinkKey',
+            'llGetLinkMedia',
             'llGetLinkName',
             'llGetLinkNumber',
+            'llGetLinkNumberOfSides',
+            'llGetLinkPrimitiveParams',
             'llGetListEntryType',
             'llGetListLength',
             'llGetLocalPos',
             'llGetLocalRot',
             'llGetMass',
+            'llGetMassMKS',
+            'llGetMemoryLimit',
             'llGetNextEmail',
             'llGetNotecardLine',
             'llGetNumberOfNotecardLines',
@@ -582,12 +876,15 @@ $language_data = array (
             'llGetParcelDetails',
             'llGetParcelFlags',
             'llGetParcelMaxPrims',
+            'llGetParcelMusicURL',
             'llGetParcelPrimCount',
             'llGetParcelPrimOwners',
             'llGetPermissions',
             'llGetPermissionsKey',
+            'llGetPhysicsMaterial',
             'llGetPos',
             'llGetPrimitiveParams',
+            'llGetPrimMediaParams',
             'llGetRegionAgentCount',
             'llGetRegionCorner',
             'llGetRegionFlags',
@@ -600,8 +897,11 @@ $language_data = array (
             'llGetScale',
             'llGetScriptName',
             'llGetScriptState',
+            'llGetSimStats',
             'llGetSimulatorHostname',
+            'llGetSPMaxMemory',
             'llGetStartParameter',
+            'llGetStaticPath',
             'llGetStatus',
             'llGetSubString',
             'llGetSunDirection',
@@ -614,6 +914,8 @@ $language_data = array (
             'llGetTimestamp',
             'llGetTorque',
             'llGetUnixTime',
+            'llGetUsedMemory',
+            'llGetUsername',
             'llGetVel',
             'llGetWallclock',
             'llGiveInventory',
@@ -625,13 +927,21 @@ $language_data = array (
             'llGroundRepel',
             'llGroundSlope',
             'llHTTPRequest',
+            'llHTTPResponse',
             'llInsertString',
             'llInstantMessage',
             'llIntegerToBase64',
+            'llJson2List',
+            'llJsonGetValue',
+            'llJsonSetValue',
+            'llJsonValueType',
             'llKey2Name',
+            'llLinkParticleSystem',
+            'llLinkSitTarget',
             'llList2CSV',
             'llList2Float',
             'llList2Integer',
+            'llList2Json',
             'llList2Key',
             'llList2List',
             'llList2ListStrided',
@@ -654,6 +964,7 @@ $language_data = array (
             'llLoopSound',
             'llLoopSoundMaster',
             'llLoopSoundSlave',
+            'llManageEstateAccess',
             'llMapDestination',
             'llMD5String',
             'llMessageLinked',
@@ -661,6 +972,7 @@ $language_data = array (
             'llModifyLand',
             'llModPow',
             'llMoveToTarget',
+            'llNavigateTo',
             'llOffsetTexture',
             'llOpenRemoteDataChannel',
             'llOverMyLand',
@@ -672,29 +984,39 @@ $language_data = array (
             'llParticleSystem',
             'llPassCollisions',
             'llPassTouches',
+            'llPatrolPoints',
             'llPlaySound',
             'llPlaySoundSlave',
             'llPow',
             'llPreloadSound',
+            'llPursue',
             'llPushObject',
             'llRegionSay',
+            'llRegionSayTo',
             'llReleaseControls',
+            'llReleaseURL',
             'llRemoteDataReply',
-            'llRemoteDataSetRegion',
             'llRemoteLoadScriptPin',
             'llRemoveFromLandBanList',
             'llRemoveFromLandPassList',
             'llRemoveInventory',
             'llRemoveVehicleFlags',
             'llRequestAgentData',
+            'llRequestDisplayName',
             'llRequestInventoryData',
             'llRequestPermissions',
+            'llRequestSecureURL',
             'llRequestSimulatorData',
+            'llRequestURL',
+            'llRequestUsername',
+            'llResetAnimationOverride',
             'llResetLandBanList',
             'llResetLandPassList',
             'llResetOtherScript',
             'llResetScript',
             'llResetTime',
+            'llReturnObjectsByID',
+            'llReturnObjectsByOwner',
             'llRezAtRoot',
             'llRezObject',
             'llRot2Angle',
@@ -713,32 +1035,45 @@ $language_data = array (
             'llSay',
             'llScaleTexture',
             'llScriptDanger',
+            'llScriptProfiler',
             'llSendRemoteData',
             'llSensor',
             'llSensorRemove',
             'llSensorRepeat',
             'llSetAlpha',
+            'llSetAngularVelocity',
+            'llSetAnimationOverride',
             'llSetBuoyancy',
             'llSetCameraAtOffset',
             'llSetCameraEyeOffset',
             'llSetCameraParams',
             'llSetClickAction',
             'llSetColor',
+            'llSetContentType',
             'llSetDamage',
             'llSetForce',
             'llSetForceAndTorque',
             'llSetHoverHeight',
+            'llSetKeyframedMotion',
             'llSetLinkAlpha',
+            'llSetLinkCamera',
             'llSetLinkColor',
+            'llSetLinkMedia',
             'llSetLinkPrimitiveParams',
+            'llSetLinkPrimitiveParamsFast',
             'llSetLinkTexture',
+            'llSetLinkTextureAnim',
             'llSetLocalRot',
+            'llSetMemoryLimit',
             'llSetObjectDesc',
             'llSetObjectName',
             'llSetParcelMusicURL',
             'llSetPayPrice',
+            'llSetPhysicsMaterial',
             'llSetPos',
             'llSetPrimitiveParams',
+            'llSetPrimMediaParams',
+            'llSetRegionPos',
             'llSetRemoteScriptAccessPin',
             'llSetRot',
             'llSetScale',
@@ -758,6 +1093,7 @@ $language_data = array (
             'llSetVehicleRotationParam',
             'llSetVehicleType',
             'llSetVehicleVectorParam',
+            'llSetVelocity',
             'llSHA1String',
             'llShout',
             'llSin',
@@ -779,32 +1115,57 @@ $language_data = array (
             'llTarget',
             'llTargetOmega',
             'llTargetRemove',
+            'llTeleportAgent',
+            'llTeleportAgentGlobalCoords',
             'llTeleportAgentHome',
+            'llTextBox',
             'llToLower',
             'llToUpper',
+            'llTransferLindenDollars',
             'llTriggerSound',
             'llTriggerSoundLimited',
             'llUnescapeURL',
             'llUnSit',
+            'llUpdateCharacter',
             'llVecDist',
             'llVecMag',
             'llVecNorm',
             'llVolumeDetect',
+            'llWanderWithin',
             'llWater',
             'llWhisper',
             'llWind',
-            'llXorBase64StringsCorrect',
+            'llXorBase64',
+            'print',
             ),
         6 => array( // deprecated
+            'ATTACH_LPEC',
+            'ATTACH_RPEC',
+            'DATA_RATING',
+            'PERMISSION_CHANGE_JOINTS',
+            'PERMISSION_CHANGE_PERMISSIONS',
+            'PERMISSION_RELEASE_OWNERSHIP',
+            'PERMISSION_REMAP_CONTROLS',
+            'PRIM_CAST_SHADOWS',
+            'PRIM_MATERIAL_LIGHT',
+            'PSYS_SRC_INNERANGLE',
+            'PSYS_SRC_OBJ_REL_MASK',
+            'PSYS_SRC_OUTERANGLE',
+            'VEHICLE_FLAG_NO_FLY_UP',
+            'llCloud',
             'llMakeExplosion',
             'llMakeFire',
             'llMakeFountain',
             'llMakeSmoke',
+            'llRemoteDataSetRegion',
             'llSound',
             'llSoundPreload',
             'llXorBase64Strings',
+            'llXorBase64StringsCorrect',
             ),
         7 => array( // unimplemented
+            'event',
+            'llCollisionSprite',
             'llPointAt',
             'llRefreshPrimURL',
             'llReleaseCamera',
@@ -812,7 +1173,6 @@ $language_data = array (
             'llSetPrimURL',
             'llStopPointAt',
             'llTakeCamera',
-            'llTextBox',
             ),
         8 => array( // God mode
             'llGodLikeRezObject',
@@ -824,9 +1184,9 @@ $language_data = array (
         '{', '}', '(', ')', '[', ']',
         '=', '+', '-', '*', '/',
         '+=', '-=', '*=', '/=', '++', '--',
-        '!', '%', '&amp;', '|', '&amp;&amp;', '||',
-        '==', '!=', '&lt;', '&gt;', '&lt;=', '&gt;=',
-        '~', '&lt;&lt;', '&gt;&gt;', '^', ':',
+        '!', '%', '&', '|', '&&', '||',
+        '==', '!=', '<', '>', '<=', '>=',
+        '~', '<<', '>>', '^', ':',
         ),
     'CASE_SENSITIVE' => array(
         GESHI_COMMENTS => true,
@@ -878,12 +1238,12 @@ $language_data = array (
     'URLS' => array(
         1 => '',
         2 => '',
-        3 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
-        4 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
-        5 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
-        6 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
-        7 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
-        8 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+        3 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+        4 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+        5 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+        6 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+        7 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+        8 => 'http://wiki.secondlife.com/wiki/{FNAME}',
         ),
     'OOLANG' => false,
     'OBJECT_SPLITTERS' => array(),
@@ -895,4 +1255,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-?>
\ No newline at end of file
diff --git a/inc/geshi/lua.php b/vendor/easybook/geshi/geshi/lua.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/lua.php
rename to vendor/easybook/geshi/geshi/lua.php
index 8a09ba20e8fc9ce1aaf09fbafae1a16fdfb5a15c..985cb8c272dad7ed7bafa12b1e19f8cbdc8a8a46
--- a/inc/geshi/lua.php
+++ b/vendor/easybook/geshi/geshi/lua.php
@@ -173,5 +173,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/m68k.php b/vendor/easybook/geshi/geshi/m68k.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/m68k.php
rename to vendor/easybook/geshi/geshi/m68k.php
index 98321577b3c927df37a0889b2bfd0ac83114df5f..983c288ecb2c8ea462c6365b1e242e3ba5e3ffd0
--- a/inc/geshi/m68k.php
+++ b/vendor/easybook/geshi/geshi/m68k.php
@@ -139,5 +139,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 8
 );
-
-?>
diff --git a/inc/geshi/magiksf.php b/vendor/easybook/geshi/geshi/magiksf.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/magiksf.php
rename to vendor/easybook/geshi/geshi/magiksf.php
diff --git a/inc/geshi/make.php b/vendor/easybook/geshi/geshi/make.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/make.php
rename to vendor/easybook/geshi/geshi/make.php
diff --git a/inc/geshi/mapbasic.php b/vendor/easybook/geshi/geshi/mapbasic.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/mapbasic.php
rename to vendor/easybook/geshi/geshi/mapbasic.php
diff --git a/inc/geshi/matlab.php b/vendor/easybook/geshi/geshi/matlab.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/matlab.php
rename to vendor/easybook/geshi/geshi/matlab.php
diff --git a/inc/geshi/mirc.php b/vendor/easybook/geshi/geshi/mirc.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/mirc.php
rename to vendor/easybook/geshi/geshi/mirc.php
diff --git a/inc/geshi/mmix.php b/vendor/easybook/geshi/geshi/mmix.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/mmix.php
rename to vendor/easybook/geshi/geshi/mmix.php
diff --git a/inc/geshi/modula2.php b/vendor/easybook/geshi/geshi/modula2.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/modula2.php
rename to vendor/easybook/geshi/geshi/modula2.php
diff --git a/inc/geshi/modula3.php b/vendor/easybook/geshi/geshi/modula3.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/modula3.php
rename to vendor/easybook/geshi/geshi/modula3.php
diff --git a/inc/geshi/mpasm.php b/vendor/easybook/geshi/geshi/mpasm.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/mpasm.php
rename to vendor/easybook/geshi/geshi/mpasm.php
index f724a9414d1ea4bbd07699de3fcd00c9f4fe9f13..a0e1ef8fffe6d7151991b07acdef5fd1742ddb9e
--- a/inc/geshi/mpasm.php
+++ b/vendor/easybook/geshi/geshi/mpasm.php
@@ -160,5 +160,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/mxml.php b/vendor/easybook/geshi/geshi/mxml.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/mxml.php
rename to vendor/easybook/geshi/geshi/mxml.php
index 0cc8287a2b1bc67e0baf69e1789a3c09190258aa..60dfe5f32c3159b8dda1445e95f62feabfa6250f
--- a/inc/geshi/mxml.php
+++ b/vendor/easybook/geshi/geshi/mxml.php
@@ -141,5 +141,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/mysql.php b/vendor/easybook/geshi/geshi/mysql.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/mysql.php
rename to vendor/easybook/geshi/geshi/mysql.php
diff --git a/inc/geshi/nagios.php b/vendor/easybook/geshi/geshi/nagios.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/nagios.php
rename to vendor/easybook/geshi/geshi/nagios.php
index 32cbaef9ecb3b7fe1130992fe3d2be55743820f5..47254311ce541c61cdc4173c604114087ed0b3a3
--- a/inc/geshi/nagios.php
+++ b/vendor/easybook/geshi/geshi/nagios.php
@@ -221,5 +221,3 @@ $language_data = array(
             )
         )
 );
-
-?>
diff --git a/inc/geshi/netrexx.php b/vendor/easybook/geshi/geshi/netrexx.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/netrexx.php
rename to vendor/easybook/geshi/geshi/netrexx.php
index 14a2d23fddcd4fdd13d0f2b35b5d92ed24084991..b038aa4d5198bc5e253ce91bdd31a83f29290255
--- a/inc/geshi/netrexx.php
+++ b/vendor/easybook/geshi/geshi/netrexx.php
@@ -159,5 +159,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/newlisp.php b/vendor/easybook/geshi/geshi/newlisp.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/newlisp.php
rename to vendor/easybook/geshi/geshi/newlisp.php
diff --git a/vendor/easybook/geshi/geshi/nginx.php b/vendor/easybook/geshi/geshi/nginx.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d4fe3b4f94b9aebbeb5d554c1bc0a11200bc8c0
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/nginx.php
@@ -0,0 +1,868 @@
+<?php
+/*************************************************************************************
+ * nginx.php
+ * ------
+ * Author: Cliff Wells (cliff@nginx.org)
+ * Copyright: (c) Cliff Wells (http://wiki.nginx.org/CliffWells)
+ * Contributors:
+ *  - Deoren Moor (http://www.whyaskwhy.org/blog/)
+ *  - Thomas Joiner
+ * Release Version: 1.0.8.12
+ * Date Started: 2010/08/24
+ *
+ * nginx language file for GeSHi.
+ *
+ * Original release found at http://forum.nginx.org/read.php?2,123194,123210
+ *
+ * CHANGES
+ * -------
+ * 2012/08/29
+ *   - Clean up the duplicate keywords
+ *
+ * 2012/08/26
+ *   - Synchronized with directives listed on wiki/doc pages
+ *   - Misc formatting tweaks and language fixes to pass langcheck
+ *
+ * 2010/08/24
+ *   - First Release
+ *
+ * TODO (updated 2012/08/26)
+ * -------------------------
+ *  - Verify PARSER_CONTROL items are correct
+ *  - Verify REGEXPS
+ *  - Verify ['STYLES']['REGEXPS'] entries
+ *
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'nginx',
+    'COMMENT_SINGLE' => array(1 => '#'),
+    'COMMENT_MULTI' => array(),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '\\',
+    'KEYWORDS' => array(
+        1 => array( // core module
+            // http://wiki.nginx.org/CoreModule
+            // http://nginx.org/en/docs/ngx_core_module.html
+            'daemon',
+            'debug_points',
+            'env',
+            'error_log',
+            'events',
+            'include',
+            'lock_file',
+            'master_process',
+            'pcre_jit',
+            'pid',
+            'ssl_engine',
+            'timer_resolution',
+            'user',
+            'worker_cpu_affinity',
+            'worker_priority',
+            'worker_processes',
+            'worker_rlimit_core',
+            'worker_rlimit_nofile',
+            'worker_rlimit_sigpending',
+            'working_directory',
+            // see EventsModule due to organization of wiki
+            //'accept_mutex',
+            //'accept_mutex_delay',
+            //'debug_connection',
+            //'multi_accept',
+            //'use',
+            //'worker_connections',
+            ),
+        2 => array( // events module
+            // http://wiki.nginx.org/EventsModule
+            // http://nginx.org/en/docs/ngx_core_module.html
+            'accept_mutex',
+            'accept_mutex_delay',
+            'debug_connection',
+            'devpoll_changes',
+            'devpoll_events',
+            'kqueue_changes',
+            'kqueue_events',
+            'epoll_events',
+            'multi_accept',
+            'rtsig_signo',
+            'rtsig_overflow_events',
+            'rtsig_overflow_test',
+            'rtsig_overflow_threshold',
+            'use',
+            'worker_connections',
+            ),
+        3 => array( // http module
+            // http://wiki.nginx.org/HttpCoreModule
+            // http://nginx.org/en/docs/http/ngx_http_core_module.html
+            'aio',
+            'alias',
+            'chunked_transfer_encoding',
+            'client_body_buffer_size',
+            'client_body_in_file_only',
+            'client_body_in_single_buffer',
+            'client_body_temp_path',
+            'client_body_timeout',
+            'client_header_buffer_size',
+            'client_header_timeout',
+            'client_max_body_size',
+            'connection_pool_size',
+            'default_type',
+            'directio',
+            'directio_alignment',
+            'disable_symlinks',
+            'error_page',
+            'etag',
+            'http',
+            'if_modified_since',
+            'ignore_invalid_headers',
+            'internal',
+            'keepalive_disable',
+            'keepalive_requests',
+            'keepalive_timeout',
+            'large_client_header_buffers',
+            'limit_except',
+            'limit_rate',
+            'limit_rate_after',
+            'lingering_close',
+            'lingering_time',
+            'lingering_timeout',
+            'listen',
+            'location',
+            'log_not_found',
+            'log_subrequest',
+            'max_ranges',
+            'merge_slashes',
+            'msie_padding',
+            'msie_refresh',
+            'open_file_cache',
+            'open_file_cache_errors',
+            'open_file_cache_min_uses',
+            'open_file_cache_valid',
+            'optimize_server_names',
+            'port_in_redirect',
+            'postpone_output',
+            'read_ahead',
+            'recursive_error_pages',
+            'request_pool_size',
+            'reset_timedout_connection',
+            'resolver',
+            'resolver_timeout',
+            'root',
+            'satisfy',
+            'satisfy_any',
+            'send_lowat',
+            'send_timeout',
+            'sendfile',
+            'sendfile_max_chunk',
+            'server',
+            'server_name',
+            'server_name_in_redirect',
+            'server_names_hash_bucket_size',
+            'server_names_hash_max_size',
+            'server_tokens',
+            'tcp_nodelay',
+            'tcp_nopush',
+            'try_files',
+            'types',
+            'types_hash_bucket_size',
+            'types_hash_max_size',
+            'underscores_in_headers',
+            'variables_hash_bucket_size',
+            'variables_hash_max_size',
+            ),
+        4 => array( // upstream module
+            // http://wiki.nginx.org/HttpUpstreamModule
+            // http://nginx.org/en/docs/http/ngx_http_upstream_module.html
+            'ip_hash',
+            'keepalive',
+            'least_conn',
+            // Use the documentation from the core module since every conf will have at least one of those.
+            //'server',
+            'upstream',
+            ),
+        5 => array( // access module
+            // http://wiki.nginx.org/HttpAccessModule
+            // http://nginx.org/en/docs/http/ngx_http_access_module.html
+            'deny',
+            'allow',
+            ),
+        6 => array( // auth basic module
+            // http://wiki.nginx.org/HttpAuthBasicModule
+            // http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
+            'auth_basic',
+            'auth_basic_user_file'
+            ),
+        7 => array( // auto index module
+            // http://wiki.nginx.org/HttpAutoindexModule
+            // http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
+            'autoindex',
+            'autoindex_exact_size',
+            'autoindex_localtime',
+            ),
+        8 => array( // browser module
+            // http://wiki.nginx.org/HttpBrowserModule
+            // http://nginx.org/en/docs/http/ngx_http_browser_module.html
+            'ancient_browser',
+            'ancient_browser_value',
+            'modern_browser',
+            'modern_browser_value',
+            ),
+        9 => array( // charset module
+            // http://wiki.nginx.org/HttpCharsetModule
+            // http://nginx.org/en/docs/http/ngx_http_charset_module.html
+            'charset',
+            'charset_map',
+            'charset_types',
+            'override_charset',
+            'source_charset',
+            ),
+        10 => array( // empty gif module
+            // http://wiki.nginx.org/HttpEmptyGifModule
+            // http://nginx.org/en/docs/http/ngx_http_empty_gif_module.html
+            'empty_gif',
+            ),
+        11 => array( // fastcgi module
+            // http://wiki.nginx.org/HttpFastcgiModule
+            // http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html
+            'fastcgi_bind',
+            'fastcgi_buffer_size',
+            'fastcgi_buffers',
+            'fastcgi_busy_buffers_size',
+            'fastcgi_cache',
+            'fastcgi_cache_bypass',
+            'fastcgi_cache_key',
+            'fastcgi_cache_lock',
+            'fastcgi_cache_lock_timeout',
+            'fastcgi_cache_methods',
+            'fastcgi_cache_min_uses',
+            'fastcgi_cache_path',
+            'fastcgi_cache_use_stale',
+            'fastcgi_cache_valid',
+            'fastcgi_connect_timeout',
+            'fastcgi_hide_header',
+            'fastcgi_ignore_client_abort',
+            'fastcgi_ignore_headers',
+            'fastcgi_index',
+            'fastcgi_intercept_errors',
+            'fastcgi_keep_conn',
+            'fastcgi_max_temp_file_size',
+            'fastcgi_next_upstream',
+            'fastcgi_no_cache',
+            'fastcgi_param',
+            'fastcgi_pass',
+            'fastcgi_pass_header',
+            'fastcgi_pass_request_body',
+            'fastcgi_pass_request_headers',
+            'fastcgi_read_timeout',
+            'fastcgi_redirect_errors',
+            'fastcgi_send_timeout',
+            'fastcgi_split_path_info',
+            'fastcgi_store',
+            'fastcgi_store_access',
+            'fastcgi_temp_file_write_size',
+            'fastcgi_temp_path',
+            ),
+        12 => array( // geo module
+            // http://wiki.nginx.org/HttpGeoModule
+            // http://nginx.org/en/docs/http/ngx_http_geo_module.html
+            'geo'
+            ),
+        13 => array( // gzip module
+            // http://wiki.nginx.org/HttpGzipModule
+            // http://nginx.org/en/docs/http/ngx_http_gzip_module.html
+            'gzip',
+            'gzip_buffers',
+            'gzip_comp_level',
+            'gzip_disable',
+            'gzip_min_length',
+            'gzip_http_version',
+            'gzip_proxied',
+            'gzip_types',
+            'gzip_vary',
+            ),
+        14 => array( // headers module
+            // http://wiki.nginx.org/HttpHeadersModule
+            // http://nginx.org/en/docs/http/ngx_http_headers_module.html
+            'add_header',
+            'expires',
+            ),
+        15 => array( // index module
+            // http://wiki.nginx.org/HttpIndexModule
+            // http://nginx.org/en/docs/http/ngx_http_index_module.html
+            'index',
+            ),
+        16 => array( // limit requests module
+            // http://wiki.nginx.org/HttpLimitReqModule
+            // http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
+            'limit_req',
+            'limit_req_log_level',
+            'limit_req_zone',
+            ),
+        17 => array( // referer module
+            // http://wiki.nginx.org/HttpRefererModule
+            // http://nginx.org/en/docs/http/ngx_http_referer_module.html
+            'referer_hash_bucket_size',
+            'referer_hash_max_size',
+            'valid_referers',
+            ),
+        18 => array( // limit zone module
+            // deprecated in 1.1.8
+            // http://wiki.nginx.org/HttpLimitZoneModule
+            'limit_zone',
+            // Covered by documentation for ngx_http_limit_conn_module
+            //'limit_conn',
+            ),
+        19 => array( // limit connection module
+            // http://wiki.nginx.org/HttpLimitConnModule
+            // http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
+            'limit_conn',
+            'limit_conn_zone',
+            'limit_conn_log_level',
+            ),
+        20 => array( // log module
+            // http://wiki.nginx.org/HttpLogModule
+            // http://nginx.org/en/docs/http/ngx_http_log_module.html
+            'access_log',
+            'log_format',
+            // Appears to be deprecated
+            'log_format_combined',
+            'open_log_file_cache',
+            ),
+        21 => array( // map module
+            // http://wiki.nginx.org/HttpMapModule
+            // http://nginx.org/en/docs/http/ngx_http_map_module.html
+            'map',
+            'map_hash_max_size',
+            'map_hash_bucket_size',
+            ),
+        22 => array( // memcached module
+            // http://wiki.nginx.org/HttpMemcachedModule
+            // http://nginx.org/en/docs/http/ngx_http_memcached_module.html
+            'memcached_buffer_size',
+            'memcached_connect_timeout',
+            'memcached_next_upstream',
+            'memcached_pass',
+            'memcached_read_timeout',
+            'memcached_send_timeout',
+            ),
+        23 => array( // proxy module
+            // http://wiki.nginx.org/HttpProxyModule
+            // http://nginx.org/en/docs/http/ngx_http_proxy_module.html
+            'proxy_bind',
+            'proxy_buffer_size',
+            'proxy_buffering',
+            'proxy_buffers',
+            'proxy_busy_buffers_size',
+            'proxy_cache',
+            'proxy_cache_bypass',
+            'proxy_cache_key',
+            'proxy_cache_lock',
+            'proxy_cache_lock_timeout',
+            'proxy_cache_methods',
+            'proxy_cache_min_uses',
+            'proxy_cache_path',
+            'proxy_cache_use_stale',
+            'proxy_cache_valid',
+            'proxy_connect_timeout',
+            'proxy_cookie_domain',
+            'proxy_cookie_path',
+            'proxy_headers_hash_bucket_size',
+            'proxy_headers_hash_max_size',
+            'proxy_hide_header',
+            'proxy_http_version',
+            'proxy_ignore_client_abort',
+            'proxy_ignore_headers',
+            'proxy_intercept_errors',
+            'proxy_max_temp_file_size',
+            'proxy_method',
+            'proxy_next_upstream',
+            'proxy_no_cache',
+            'proxy_pass',
+            'proxy_pass_header',
+            'proxy_pass_request_body',
+            'proxy_pass_request_headers',
+            'proxy_redirect',
+            'proxy_read_timeout',
+            'proxy_redirect_errors',
+            'proxy_send_lowat',
+            'proxy_send_timeout',
+            'proxy_set_body',
+            'proxy_set_header',
+            'proxy_ssl_session_reuse',
+            'proxy_store',
+            'proxy_store_access',
+            'proxy_temp_file_write_size',
+            'proxy_temp_path',
+            'proxy_upstream_fail_timeout',
+            'proxy_upstream_max_fails',
+            ),
+        24 => array( // rewrite module
+            // http://wiki.nginx.org/HttpRewriteModule
+            // http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
+            'break',
+            'if',
+            'return',
+            'rewrite',
+            'rewrite_log',
+            'set',
+            'uninitialized_variable_warn',
+            ),
+        25 => array( // ssi module
+            // http://wiki.nginx.org/HttpSsiModule
+            // http://nginx.org/en/docs/http/ngx_http_ssi_module.html
+            'ssi',
+            'ssi_silent_errors',
+            'ssi_types',
+            'ssi_value_length',
+            ),
+        26 => array( // user id module
+            // http://wiki.nginx.org/HttpUseridModule
+            // http://nginx.org/en/docs/http/ngx_http_userid_module.html
+            'userid',
+            'userid_domain',
+            'userid_expires',
+            'userid_name',
+            'userid_p3p',
+            'userid_path',
+            'userid_service',
+            ),
+        27 => array( // addition module
+            // http://wiki.nginx.org/HttpAdditionModule
+            // http://nginx.org/en/docs/http/ngx_http_addition_module.html
+            'add_before_body',
+            'add_after_body',
+            'addition_types',
+            ),
+        28 => array( // embedded Perl module
+            // http://wiki.nginx.org/HttpPerlModule
+            // http://nginx.org/en/docs/http/ngx_http_perl_module.html
+            'perl',
+            'perl_modules',
+            'perl_require',
+            'perl_set',
+            ),
+        29 => array( // flash video files module
+            // http://wiki.nginx.org/HttpFlvModule
+            // http://nginx.org/en/docs/http/ngx_http_flv_module.html
+            'flv',
+            ),
+        30 => array( // gzip precompression module
+            // http://wiki.nginx.org/HttpGzipStaticModule
+            // http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html
+            'gzip_static',
+            // Removed to remove duplication with ngx_http_gzip_module
+            //'gzip_http_version',
+            //'gzip_proxied',
+            //'gzip_disable',
+            //'gzip_vary',
+            ),
+        31 => array( // random index module
+            // http://wiki.nginx.org/HttpRandomIndexModule
+            // http://nginx.org/en/docs/http/ngx_http_random_index_module.html
+            'random_index',
+            ),
+        32 => array( // real ip module
+            // http://wiki.nginx.org/HttpRealipModule
+            // http://nginx.org/en/docs/http/ngx_http_realip_module.html
+            'set_real_ip_from',
+            'real_ip_header',
+            'real_ip_recursive',
+            ),
+        33 => array( // https module
+            // http://wiki.nginx.org/HttpSslModule
+            // http://nginx.org/en/docs/http/ngx_http_ssl_module.html
+            'ssl',
+            'ssl_certificate',
+            'ssl_certificate_key',
+            'ssl_ciphers',
+            'ssl_client_certificate',
+            'ssl_crl',
+            'ssl_dhparam',
+            // Use the documentation for the core module since it links to the
+            // original properly
+            //'ssl_engine',
+            'ssl_prefer_server_ciphers',
+            'ssl_protocols',
+            'ssl_session_cache',
+            'ssl_session_timeout',
+            'ssl_verify_client',
+            'ssl_verify_depth',
+            ),
+        34 => array( // status module
+            // http://wiki.nginx.org/HttpStubStatusModule
+            'stub_status',
+            ),
+        35 => array( // substitution module
+            // http://wiki.nginx.org/HttpSubModule
+            // http://nginx.org/en/docs/http/ngx_http_sub_module.html
+            'sub_filter',
+            'sub_filter_once',
+            'sub_filter_types',
+            ),
+        36 => array( // NginxHttpDavModule
+            // http://wiki.nginx.org/HttpDavModule
+            // http://nginx.org/en/docs/http/ngx_http_dav_module.html
+            'dav_access',
+            'dav_methods',
+            'create_full_put_path',
+            'min_delete_depth',
+            ),
+        37 => array( // Google performance tools module
+            // http://wiki.nginx.org/GooglePerftoolsModule
+            'google_perftools_profiles',
+            ),
+        38 => array( // xslt module
+            // http://wiki.nginx.org/HttpXsltModule
+            // http://nginx.org/en/docs/http/ngx_http_xslt_module.html
+            'xslt_entities',
+            'xslt_param',
+            'xslt_string_param',
+            'xslt_stylesheet',
+            'xslt_types',
+            ),
+        39 => array( // uWSGI module
+            // http://wiki.nginx.org/HttpUwsgiModule
+            'uwsgi_bind',
+            'uwsgi_buffer_size',
+            'uwsgi_buffering',
+            'uwsgi_buffers',
+            'uwsgi_busy_buffers_size',
+            'uwsgi_cache',
+            'uwsgi_cache_bypass',
+            'uwsgi_cache_key',
+            'uwsgi_cache_lock',
+            'uwsgi_cache_lock_timeout',
+            'uwsgi_cache_methods',
+            'uwsgi_cache_min_uses',
+            'uwsgi_cache_path',
+            'uwsgi_cache_use_stale',
+            'uwsgi_cache_valid',
+            'uwsgi_connect_timeout',
+            'uwsgi_hide_header',
+            'uwsgi_ignore_client_abort',
+            'uwsgi_ignore_headers',
+            'uwsgi_intercept_errors',
+            'uwsgi_max_temp_file_size',
+            'uwsgi_modifier',
+            'uwsgi_next_upstream',
+            'uwsgi_no_cache',
+            'uwsgi_param',
+            'uwsgi_pass',
+            'uwsgi_pass_header',
+            'uwsgi_pass_request_body',
+            'uwsgi_pass_request_headers',
+            'uwsgi_read_timeout',
+            'uwsgi_send_timeout',
+            'uwsgi_store',
+            'uwsgi_store_access',
+            'uwsgi_string',
+            'uwsgi_temp_file_write_size',
+            'uwsgi_temp_path',
+            ),
+        40 => array( // SCGI module
+            // http://wiki.nginx.org/HttpScgiModule
+            // Note: These directives were pulled from nginx 1.2.3
+            //       ngx_http_scgi_module.c source file.
+            'scgi_bind',
+            'scgi_buffering',
+            'scgi_buffers',
+            'scgi_buffer_size',
+            'scgi_busy_buffers_size',
+            'scgi_cache',
+            'scgi_cache_bypass',
+            'scgi_cache_key',
+            'scgi_cache_lock',
+            'scgi_cache_lock_timeout',
+            'scgi_cache_methods',
+            'scgi_cache_min_uses',
+            'scgi_cache_path',
+            'scgi_cache_use_stale',
+            'scgi_cache_valid',
+            'scgi_connect_timeout',
+            'scgi_hide_header',
+            'scgi_ignore_client_abort',
+            'scgi_ignore_headers',
+            'scgi_intercept_errors',
+            'scgi_max_temp_file_size',
+            'scgi_next_upstream',
+            'scgi_no_cache',
+            'scgi_param',
+            'scgi_pass',
+            'scgi_pass_header',
+            'scgi_pass_request_body',
+            'scgi_pass_request_headers',
+            'scgi_read_timeout',
+            'scgi_send_timeout',
+            'scgi_store',
+            'scgi_store_access',
+            'scgi_temp_file_write_size',
+            'scgi_temp_path',
+            ),
+        41 => array( // split clients module
+            // http://wiki.nginx.org/HttpSplitClientsModule
+            // http://nginx.org/en/docs/http/ngx_http_split_clients_module.html
+            'split_clients',
+            ),
+        42 => array( // X-Accel module
+            // http://wiki.nginx.org/X-accel
+            'X-Accel-Redirect',
+            'X-Accel-Buffering',
+            'X-Accel-Charset',
+            'X-Accel-Expires',
+            'X-Accel-Limit-Rate',
+            ),
+        43 => array( // degradation module
+            // http://wiki.nginx.org/HttpDegradationModule
+            'degradation',
+            'degrade',
+            ),
+        44 => array( // GeoIP module
+            // http://wiki.nginx.org/HttpGeoipModule
+            // http://nginx.org/en/docs/http/ngx_http_geoip_module.html
+            'geoip_country',
+            'geoip_city',
+            'geoip_proxy',
+            'geoip_proxy_recursive',
+            ),
+        45 => array( // Image filter module
+            // http://wiki.nginx.org/HttpImageFilterModule
+            // http://nginx.org/en/docs/http/ngx_http_image_filter_module.html
+            'image_filter',
+            'image_filter_buffer',
+            'image_filter_jpeg_quality',
+            'image_filter_sharpen',
+            'image_filter_transparency',
+            ),
+        46 => array( // MP4 module
+            // http://wiki.nginx.org/HttpMp4Module
+            // http://nginx.org/en/docs/http/ngx_http_mp4_module.html
+            'mp4',
+            'mp4_buffer_size',
+            'mp4_max_buffer_size',
+            ),
+        47 => array( // Secure Link module
+            // http://wiki.nginx.org/HttpSecureLinkModule
+            // http://nginx.org/en/docs/http/ngx_http_secure_link_module.html
+            'secure_link',
+            'secure_link_md',
+            'secure_link_secret',
+            ),
+        48 => array( // Mail Core module
+            // http://wiki.nginx.org/MailCoreModule
+            'auth',
+            'imap_capabilities',
+            'imap_client_buffer',
+            'pop_auth',
+            'pop_capabilities',
+            'protocol',
+            'smtp_auth',
+            'smtp_capabilities',
+            'so_keepalive',
+            'timeout',
+            // Removed to prioritize documentation for core module
+            //'listen',
+            //'server',
+            //'server_name',
+            ),
+        49 => array( // Mail Auth module
+            // http://wiki.nginx.org/MailAuthModule
+            'auth_http',
+            'auth_http_header',
+            'auth_http_timeout',
+            ),
+        50 => array( // Mail Proxy module
+            // http://wiki.nginx.org/MailProxyModule
+            'proxy',
+            'proxy_buffer',
+            'proxy_pass_error_message',
+            'proxy_timeout',
+            'xclient',
+            ),
+        51 => array( // Mail SSL module
+            // http://wiki.nginx.org/MailSslModule
+            // Removed to prioritize documentation for http
+            //'ssl',
+            //'ssl_certificate',
+            //'ssl_certificate_key',
+            //'ssl_ciphers',
+            //'ssl_prefer_server_ciphers',
+            //'ssl_protocols',
+            //'ssl_session_cache',
+            //'ssl_session_timeout',
+            'starttls',
+            ),
+        ),
+    'SYMBOLS' => array(
+        '(', ')', '{', '}', '=', '~', ';'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => true,
+        1 => true,
+        2 => true,
+        3 => true,
+        4 => true,
+        5 => true,
+        6 => true,
+        7 => true,
+        8 => true,
+        9 => true,
+        10 => true,
+        11 => true,
+        12 => true,
+        13 => true,
+        14 => true,
+        15 => true,
+        16 => true,
+        17 => true,
+        18 => true,
+        19 => true,
+        20 => true,
+        21 => true,
+        22 => true,
+        23 => true,
+        24 => true,
+        25 => true,
+        26 => true,
+        27 => true,
+        28 => true,
+        29 => true,
+        30 => true,
+        31 => true,
+        32 => true,
+        33 => true,
+        34 => true,
+        35 => true,
+        36 => true,
+        37 => true,
+        38 => true,
+        39 => true,
+        40 => true,
+        41 => true,
+        42 => true,
+        43 => true,
+        44 => true,
+        45 => true,
+        46 => true,
+        47 => true,
+        48 => true,
+        49 => true,
+        50 => true,
+        51 => true,
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #b1b100;',
+            2 => 'color: #000000; font-weight: bold;',
+            3 => 'color: #000066;',
+            4 => 'color: #993333;'
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #808080; font-style: italic;',
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #000099; font-weight: bold;'
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #66cc66;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #ff0000;'
+            ),
+        'NUMBERS' => array(
+            ),
+        'METHODS' => array(
+            1 => 'color: #202020;',
+            2 => 'color: #202020;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #66cc66;'
+            ),
+        'REGEXPS' => array(
+            0 => 'color: #000066;',
+            4 => 'color: #000000; font-weight: bold;',
+        ),
+        'SCRIPT' => array()
+        ),
+    'URLS' => array(
+        1 => 'http://wiki.nginx.org/CoreModule#{FNAME}',
+        2 => 'http://wiki.nginx.org/NginxHttpEventsModule#{FNAME}',
+        3 => 'http://wiki.nginx.org/NginxHttpCoreModule#{FNAME}',
+        4 => 'http://wiki.nginx.org/NginxHttpUpstreamModule#{FNAME}',
+        5 => 'http://wiki.nginx.org/NginxHttpAccessModule#{FNAME}',
+        6 => 'http://wiki.nginx.org/NginxHttpAuthBasicModule#{FNAME}',
+        7 => 'http://wiki.nginx.org/NginxHttpAutoIndexModule#{FNAME}',
+        8 => 'http://wiki.nginx.org/NginxHttpBrowserModule#{FNAME}',
+        9 => 'http://wiki.nginx.org/NginxHttpCharsetModule#{FNAME}',
+        10 => 'http://wiki.nginx.org/NginxHttpEmptyGifModule#{FNAME}',
+        11 => 'http://wiki.nginx.org/NginxHttpFcgiModule#{FNAME}',
+        12 => 'http://wiki.nginx.org/NginxHttpGeoModule#{FNAME}',
+        13 => 'http://wiki.nginx.org/NginxHttpGzipModule#{FNAME}',
+        14 => 'http://wiki.nginx.org/NginxHttpHeadersModule#{FNAME}',
+        15 => 'http://wiki.nginx.org/NginxHttpIndexModule#{FNAME}',
+        16 => 'http://wiki.nginx.org/HttpLimitReqModule#{FNAME}',
+        17 => 'http://wiki.nginx.org/NginxHttpRefererModule#{FNAME}',
+        18 => 'http://wiki.nginx.org/NginxHttpLimitZoneModule#{FNAME}',
+        19 => 'http://wiki.nginx.org/HttpLimitConnModule#{FNAME}',
+        20 => 'http://wiki.nginx.org/NginxHttpLogModule#{FNAME}',
+        21 => 'http://wiki.nginx.org/NginxHttpMapModule#{FNAME}',
+        22 => 'http://wiki.nginx.org/NginxHttpMemcachedModule#{FNAME}',
+        23 => 'http://wiki.nginx.org/NginxHttpProxyModule#{FNAME}',
+        24 => 'http://wiki.nginx.org/NginxHttpRewriteModule#{FNAME}',
+        25 => 'http://wiki.nginx.org/NginxHttpSsiModule#{FNAME}',
+        26 => 'http://wiki.nginx.org/NginxHttpUserIdModule#{FNAME}',
+        27 => 'http://wiki.nginx.org/NginxHttpAdditionModule#{FNAME}',
+        28 => 'http://wiki.nginx.org/NginxHttpEmbeddedPerlModule#{FNAME}',
+        29 => 'http://wiki.nginx.org/NginxHttpFlvStreamModule#{FNAME}',
+        30 => 'http://wiki.nginx.org/NginxHttpGzipStaticModule#{FNAME}',
+        31 => 'http://wiki.nginx.org/NginxHttpRandomIndexModule#{FNAME}',
+        32 => 'http://wiki.nginx.org/NginxHttpRealIpModule#{FNAME}',
+        33 => 'http://wiki.nginx.org/NginxHttpSslModule#{FNAME}',
+        34 => 'http://wiki.nginx.org/NginxHttpStubStatusModule#{FNAME}',
+        35 => 'http://wiki.nginx.org/NginxHttpSubModule#{FNAME}',
+        36 => 'http://wiki.nginx.org/NginxHttpDavModule#{FNAME}',
+        37 => 'http://wiki.nginx.org/NginxHttpGooglePerfToolsModule#{FNAME}',
+        38 => 'http://wiki.nginx.org/NginxHttpXsltModule#{FNAME}',
+        39 => 'http://wiki.nginx.org/NginxHttpUwsgiModule#{FNAME}',
+        40 => 'http://wiki.nginx.org/HttpScgiModule',
+        41 => 'http://wiki.nginx.org/HttpSplitClientsModule#{FNAME}',
+        42 => 'http://wiki.nginx.org/X-accel#{FNAME}',
+        43 => 'http://wiki.nginx.org/HttpDegradationModule#{FNAME}',
+        44 => 'http://wiki.nginx.org/HttpGeoipModule#{FNAME}',
+        45 => 'http://wiki.nginx.org/HttpImageFilterModule#{FNAME}',
+        46 => 'http://wiki.nginx.org/HttpMp4Module#{FNAME}',
+        47 => 'http://wiki.nginx.org/HttpSecureLinkModule#{FNAME}',
+        48 => 'http://wiki.nginx.org/MailCoreModule#{FNAME}',
+        49 => 'http://wiki.nginx.org/MailAuthModule#{FNAME}',
+        50 => 'http://wiki.nginx.org/MailProxyModule#{FNAME}',
+        51 => 'http://wiki.nginx.org/MailSslModule#{FNAME}',
+        ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(),
+    'REGEXPS' => array(
+        0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*',
+        4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(),
+    'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/inc/geshi/nsis.php b/vendor/easybook/geshi/geshi/nsis.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/nsis.php
rename to vendor/easybook/geshi/geshi/nsis.php
index 35df9b4b8113daf38271420215b734daf7b2055e..29ba952b4aecdfa99772e11c9988d67004a4cbcd
--- a/inc/geshi/nsis.php
+++ b/vendor/easybook/geshi/geshi/nsis.php
@@ -347,5 +347,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/oberon2.php b/vendor/easybook/geshi/geshi/oberon2.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/oberon2.php
rename to vendor/easybook/geshi/geshi/oberon2.php
diff --git a/inc/geshi/objc.php b/vendor/easybook/geshi/geshi/objc.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/objc.php
rename to vendor/easybook/geshi/geshi/objc.php
index 2f5162d76f69e000404631905b3d6bf08a74546a..52576c16a547ca01d19ff42e4446c0eb2683458b
--- a/inc/geshi/objc.php
+++ b/vendor/easybook/geshi/geshi/objc.php
@@ -354,5 +354,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/objeck.php b/vendor/easybook/geshi/geshi/objeck.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/objeck.php
rename to vendor/easybook/geshi/geshi/objeck.php
diff --git a/inc/geshi/ocaml-brief.php b/vendor/easybook/geshi/geshi/ocaml-brief.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/ocaml-brief.php
rename to vendor/easybook/geshi/geshi/ocaml-brief.php
index b518adf8775016f46f92410fb5ad7f9284ac73bc..c5fee2feca83cb939a28e2ef595bd66a116fbe18
--- a/inc/geshi/ocaml-brief.php
+++ b/vendor/easybook/geshi/geshi/ocaml-brief.php
@@ -108,5 +108,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/ocaml.php b/vendor/easybook/geshi/geshi/ocaml.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/ocaml.php
rename to vendor/easybook/geshi/geshi/ocaml.php
diff --git a/inc/geshi/octave.php b/vendor/easybook/geshi/geshi/octave.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/octave.php
rename to vendor/easybook/geshi/geshi/octave.php
index ccffcd97aa466070464f06b225428b52d1193ac4..7bab9b1389c865a557d38ac1ac61d5ecfeb1054b
--- a/inc/geshi/octave.php
+++ b/vendor/easybook/geshi/geshi/octave.php
@@ -511,5 +511,3 @@ $language_data = array (
         'SCRIPT' => array(),
         )
 );
-
-?>
diff --git a/inc/geshi/oobas.php b/vendor/easybook/geshi/geshi/oobas.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/oobas.php
rename to vendor/easybook/geshi/geshi/oobas.php
index ff75af65f3b376be3c4b9b85e88c4d16816910bc..25c345bbb9601b7b5c952e261cc3d61d3b5e1873
--- a/inc/geshi/oobas.php
+++ b/vendor/easybook/geshi/geshi/oobas.php
@@ -131,5 +131,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/oorexx.php b/vendor/easybook/geshi/geshi/oorexx.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/oorexx.php
rename to vendor/easybook/geshi/geshi/oorexx.php
index 62c6cc46341c8333140956df66828037184fdb54..15cdd92e7cf14a8bc45a9a74a7e2d456d1967a13
--- a/inc/geshi/oorexx.php
+++ b/vendor/easybook/geshi/geshi/oorexx.php
@@ -167,5 +167,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/oracle11.php b/vendor/easybook/geshi/geshi/oracle11.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/oracle11.php
rename to vendor/easybook/geshi/geshi/oracle11.php
index 16259e6953065675a0dd992371e644ff615e85b4..97b147f5d188192c2e4047ae395f0d173a1c5360
--- a/inc/geshi/oracle11.php
+++ b/vendor/easybook/geshi/geshi/oracle11.php
@@ -610,5 +610,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/oracle8.php b/vendor/easybook/geshi/geshi/oracle8.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/oracle8.php
rename to vendor/easybook/geshi/geshi/oracle8.php
index 145bda407751b48350cffaaded565459f4fbd8b6..b49390806c646451ad094dd7c989d409f8dfc132
--- a/inc/geshi/oracle8.php
+++ b/vendor/easybook/geshi/geshi/oracle8.php
@@ -492,5 +492,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/oxygene.php b/vendor/easybook/geshi/geshi/oxygene.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/oxygene.php
rename to vendor/easybook/geshi/geshi/oxygene.php
diff --git a/inc/geshi/oz.php b/vendor/easybook/geshi/geshi/oz.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/oz.php
rename to vendor/easybook/geshi/geshi/oz.php
diff --git a/inc/geshi/parasail.php b/vendor/easybook/geshi/geshi/parasail.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/parasail.php
rename to vendor/easybook/geshi/geshi/parasail.php
diff --git a/vendor/easybook/geshi/geshi/parigp.php b/vendor/easybook/geshi/geshi/parigp.php
new file mode 100755
index 0000000000000000000000000000000000000000..1a5d4a73ec5c5467293da2beebec5783dddc918d
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/parigp.php
@@ -0,0 +1,293 @@
+<?php
+/*************************************************************************************
+ * parigp.php
+ * --------
+ * Author: Charles R Greathouse IV (charles@crg4.com)
+ * Copyright: 2011-2013 Charles R Greathouse IV (http://math.crg4.com/)
+ * Release Version: 1.0.8.12
+ * Date Started: 2011/05/11
+ *
+ * PARI/GP language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2011/07/09 (1.0.8.11)
+ *  -  First Release
+ * 2013/02/05 (1.0.8.12)
+ *  -  Added 2.6.0 commands, default, member functions, and error-handling
+ *
+ * TODO (updated 2011/07/09)
+ * -------------------------
+ *
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+    'LANG_NAME' => 'PARI/GP',
+    'COMMENT_SINGLE' => array(1 => '\\\\'),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array('"'),
+    'ESCAPE_CHAR' => '\\',
+    'NUMBERS' => array(
+        # Integers
+        1 => GESHI_NUMBER_INT_BASIC,
+        # Reals
+        2 => GESHI_NUMBER_FLT_SCI_ZERO
+        ),
+    'KEYWORDS' => array(
+        1 => array(
+            'abs','acos','acosh','addhelp','addprimes','agm','alarm','algdep',
+            'alias','allocatemem','apply','arg','asin','asinh','atan','atanh',
+            'bernfrac','bernpol','bernreal','bernvec','besselh1','besselh2',
+            'besseli','besselj','besseljh','besselk','besseln','bestappr',
+            'bestapprPade','bezout','bezoutres','bigomega','binary','binomial',
+            'bitand','bitneg','bitnegimply','bitor','bittest','bitxor',
+            'bnfcertify','bnfcompress','bnfdecodemodule','bnfinit',
+            'bnfisintnorm','bnfisnorm','bnfisprincipal','bnfissunit',
+            'bnfisunit','bnfnarrow','bnfsignunit','bnfsunit','bnrclassno',
+            'bnrclassnolist','bnrconductor','bnrconductorofchar','bnrdisc',
+            'bnrdisclist','bnrinit','bnrisconductor','bnrisprincipal','bnrL1',
+            'bnrrootnumber','bnrstark','break','breakpoint','Catalan','ceil',
+            'centerlift','charpoly','chinese','cmp','Col','component','concat',
+            'conj','conjvec','content','contfrac','contfracpnqn','core',
+            'coredisc','cos','cosh','cotan','dbg_down','dbg_err','dbg_up',
+            'dbg_x','default','denominator','deriv','derivnum','diffop',
+            'digits','dilog','dirdiv','direuler','dirmul','dirzetak','divisors',
+            'divrem','eint1','elladd','ellak','ellan','ellanalyticrank','ellap',
+            'ellbil','ellcard','ellchangecurve','ellchangepoint',
+            'ellconvertname','elldivpol','elleisnum','elleta','ellffinit',
+            'ellfromj','ellgenerators','ellglobalred','ellgroup','ellheegner',
+            'ellheight','ellheightmatrix','ellidentify','ellinit',
+            'ellisoncurve','ellj','ellL1','elllocalred','elllog','elllseries',
+            'ellminimalmodel','ellmodulareqn','ellmul','ellneg','ellorder',
+            'ellordinate','ellpointtoz','ellrootno','ellsearch','ellsigma',
+            'ellsub','elltaniyama','elltatepairing','elltors','ellweilpairing',
+            'ellwp','ellzeta','ellztopoint','erfc','errname','error','eta','Euler',
+            'eulerphi','eval','exp','extern','externstr','factor','factorback',
+            'factorcantor','factorff','factorial','factorint','factormod',
+            'factornf','factorpadic','ffgen','ffinit','fflog','ffnbirred',
+            'fforder','ffprimroot','fibonacci','floor','for','forcomposite','fordiv','forell',
+            'forprime','forqfvec','forstep','forsubgroup','forvec','frac','galoisexport',
+            'galoisfixedfield','galoisgetpol','galoisidentify','galoisinit',
+            'galoisisabelian','galoisisnormal','galoispermtopol',
+            'galoissubcyclo','galoissubfields','galoissubgroups','gamma',
+            'gammah','gcd','getenv','getheap','getrand','getstack','gettime',
+            'global','hammingweight','hilbert','hyperu','I','idealadd',
+            'idealaddtoone','idealappr','idealchinese','idealcoprime',
+            'idealdiv','idealfactor','idealfactorback','idealfrobenius',
+            'idealhnf','idealintersect','idealinv','ideallist','ideallistarch',
+            'ideallog','idealmin','idealmul','idealnorm','idealnumden',
+            'idealpow','idealprimedec','idealramgroups','idealred','idealstar',
+            'idealtwoelt','idealval','if','iferr','iferrname','imag','incgam','incgamc','input',
+            'install','intcirc','intformal','intfouriercos','intfourierexp',
+            'intfouriersin','intfuncinit','intlaplaceinv','intmellininv',
+            'intmellininvshort','intnum','intnuminit','intnuminitgen',
+            'intnumromb','intnumstep','isfundamental','ispolygonal','ispower','ispowerful',
+            'isprime','isprimepower','ispseudoprime','issquare','issquarefree','istotient',
+            'kill','kronecker','lcm','length','lex','lift','lindep','List',
+            'listcreate','listinsert','listkill','listpop','listput','listsort',
+            'lngamma','local','log','Mat','matadjoint','matalgtobasis',
+            'matbasistoalg','matcompanion','matconcat','matcontent','matdet','matdetint',
+            'matdiagonal','mateigen','matfrobenius','mathess','mathilbert',
+            'mathnf','mathnfmod','mathnfmodid','matid','matimage',
+            'matimagecompl','matindexrank','matintersect','matinverseimage',
+            'matisdiagonal','matker','matkerint','matmuldiagonal',
+            'matmultodiagonal','matpascal','matrank','matrix','matrixqz',
+            'matsize','matsnf','matsolve','matsolvemod','matsupplement',
+            'mattranspose','max','min','minpoly','Mod','modreverse','moebius',
+            'my','newtonpoly','next','nextprime','nfalgtobasis','nfbasis',
+            'nfbasistoalg','nfdetint','nfdisc','nfeltadd','nfeltdiv',
+            'nfeltdiveuc','nfeltdivmodpr','nfeltdivrem','nfeltmod','nfeltmul',
+            'nfeltmulmodpr','nfeltnorm','nfeltpow','nfeltpowmodpr',
+            'nfeltreduce','nfeltreducemodpr','nfelttrace','nfeltval','nffactor',
+            'nffactorback','nffactormod','nfgaloisapply','nfgaloisconj',
+            'nfhilbert','nfhnf','nfhnfmod','nfinit','nfisideal','nfisincl',
+            'nfisisom','nfkermodpr','nfmodprinit','nfnewprec','nfroots',
+            'nfrootsof1','nfsnf','nfsolvemodpr','nfsubfields','norm','norml2',
+            'numbpart','numdiv','numerator','numtoperm','O','omega','padicappr',
+            'padicfields','padicprec','partitions','permtonum','Pi','plot',
+            'plotbox','plotclip','plotcolor','plotcopy','plotcursor','plotdraw',
+            'ploth','plothraw','plothsizes','plotinit','plotkill','plotlines',
+            'plotlinetype','plotmove','plotpoints','plotpointsize',
+            'plotpointtype','plotrbox','plotrecth','plotrecthraw','plotrline',
+            'plotrmove','plotrpoint','plotscale','plotstring','Pol',
+            'polchebyshev','polcoeff','polcompositum','polcyclo','polcyclofactors','poldegree',
+            'poldisc','poldiscreduced','polgalois','polgraeffe','polhensellift',
+            'polhermite','polinterpolate','poliscyclo','poliscycloprod',
+            'polisirreducible','pollead','pollegendre','polrecip','polred',
+            'polredabs','polredbest','polredord','polresultant','Polrev','polroots',
+            'polrootsff','polrootsmod','polrootspadic','polsturm','polsubcyclo',
+            'polsylvestermatrix','polsym','poltchebi','poltschirnhaus',
+            'polylog','polzagier','precision','precprime','prime','primepi',
+            'primes','print','print1','printf','printsep','printtex','prod','prodeuler',
+            'prodinf','psdraw','psi','psploth','psplothraw','Qfb','qfbclassno',
+            'qfbcompraw','qfbhclassno','qfbnucomp','qfbnupow','qfbpowraw',
+            'qfbprimeform','qfbred','qfbsolve','qfgaussred','qfjacobi','qflll',
+            'qflllgram','qfminim','qfperfection','qfrep','qfsign',
+            'quadclassunit','quaddisc','quadgen','quadhilbert','quadpoly',
+            'quadray','quadregulator','quadunit','quit','random','randomprime','read',
+            'readvec','real','removeprimes','return','rnfalgtobasis','rnfbasis',
+            'rnfbasistoalg','rnfcharpoly','rnfconductor','rnfdedekind','rnfdet',
+            'rnfdisc','rnfeltabstorel','rnfeltdown','rnfeltreltoabs','rnfeltup',
+            'rnfequation','rnfhnfbasis','rnfidealabstorel','rnfidealdown',
+            'rnfidealhnf','rnfidealmul','rnfidealnormabs','rnfidealnormrel',
+            'rnfidealreltoabs','rnfidealtwoelt','rnfidealup','rnfinit',
+            'rnfisabelian','rnfisfree','rnfisnorm','rnfisnorminit','rnfkummer',
+            'rnflllgram','rnfnormgroup','rnfpolred','rnfpolredabs',
+            'rnfpseudobasis','rnfsteinitz','round','select','Ser','serconvol',
+            'serlaplace','serreverse','Set','setbinop','setintersect',
+            'setisset','setminus','setrand','setsearch','setunion','shift',
+            'shiftmul','sigma','sign','simplify','sin','sinh','sizebyte',
+            'sizedigit','solve','sqr','sqrt','sqrtint','sqrtn','sqrtnint','stirling','Str',
+            'Strchr','Strexpand','Strprintf','Strtex','subgrouplist','subst',
+            'substpol','substvec','sum','sumalt','sumdedekind','sumdiv','sumdivmult','sumdigits',
+            'sumformal','suminf','sumnum','sumnumalt','sumnuminit','sumpos','system','tan',
+            'tanh','taylor','teichmuller','theta','thetanullk','thue',
+            'thueinit','trace','trap','truncate','type','until','valuation',
+            'variable','Vec','vecextract','vecmax','vecmin','Vecrev',
+            'vecsearch','Vecsmall','vecsort','vector','vectorsmall','vectorv',
+            'version','warning','weber','whatnow','while','write','write1',
+            'writebin','writetex','zeta','zetak','zetakinit','zncoppersmith',
+            'znlog','znorder','znprimroot','znstar'
+            ),
+
+        2 => array(
+            'void','bool','negbool','small','int',/*'real',*/'mp','var','lg','pol',
+            'vecsmall','vec','list','str','genstr','gen','typ'
+            ),
+
+        3 => array(
+            'TeXstyle','breakloop','colors','compatible','datadir','debug',
+            'debugfiles','debugmem','echo','factor_add_primes','factor_proven',
+            'format','graphcolormap','graphcolors','help','histfile','histsize',
+            'lines','linewrap',/*'log',*/'logfile','new_galois_format','output',
+            'parisize','path','prettyprinter','primelimit','prompt_cont',
+            'prompt','psfile','readline','realprecision','recover','secure',
+            'seriesprecision',/*'simplify',*/'sopath','strictmatch','timer'
+            ),
+
+        4 => array(
+            '"e_ARCH"','"e_BUG"','"e_FILE"','"e_IMPL"','"e_PACKAGE"','"e_DIM"',
+            '"e_FLAG"','"e_NOTFUNC"','"e_OP"','"e_TYPE"','"e_TYPE2"',
+            '"e_PRIORITY"','"e_VAR"','"e_DOMAIN"','"e_MAXPRIME"','"e_MEM"',
+            '"e_OVERFLOW"','"e_PREC"','"e_STACK"','"e_ALARM"','"e_USER"',
+            '"e_CONSTPOL"','"e_COPRIME"','"e_INV"','"e_IRREDPOL"','"e_MISC"',
+            '"e_MODULUS"','"e_NEGVAL"','"e_PRIME"','"e_ROOTS0"','"e_SQRTN"'
+            )
+        ),
+    'SYMBOLS' => array(
+        1 => array(
+            '(',')','{','}','[',']','+','-','*','/','%','=','<','>','!','^','&','|','?',';',':',',','\\','\''
+            )
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => true,
+        2 => true,
+        3 => true,
+        4 => true
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #0000ff;',
+            2 => 'color: #e07022;',
+            3 => 'color: #00d2d2;',
+            4 => 'color: #00d2d2;'
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #008000;',
+            'MULTI' => 'color: #008000;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #111111; font-weight: bold;'
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #002222;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #800080;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #666666;',
+            1 => 'color: #666666;',
+            2 => 'color: #666666;'
+            ),
+        'METHODS' => array(
+            0 => 'color: #004000;'
+            ),
+        'SYMBOLS' => array(
+            1 => 'color: #339933;'
+            ),
+        'REGEXPS' => array(
+            0 => 'color: #e07022',    # Should be the same as keyword group 2
+            1 => 'color: #555555',
+            2 => 'color: #0000ff'     # Should be the same as keyword group 1
+            ),
+        'SCRIPT' => array()
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => ''
+        ),
+    'OOLANG' => true,
+    'OBJECT_SPLITTERS' => array(
+        1 => '.'
+        ),
+    'REGEXPS' => array(
+        0 => array( # types marked on variables
+            GESHI_SEARCH => '(?<!\\\\ )"(t_(?:INT|REAL|INTMOD|FRAC|FFELT|COMPLEX|PADIC|QUAD|POLMOD|POL|SER|RFRAC|QFR|QFI|VEC|COL|MAT|LIST|STR|VECSMALL|CLOSURE|ERROR))"',
+            GESHI_REPLACE => '\\1',
+            GESHI_MODIFIERS => '',
+            GESHI_BEFORE => '"',
+            GESHI_AFTER => '"'
+            ),
+        1 => array( # literal variables
+            GESHI_SEARCH => '(?<!\\\\)(\'[a-zA-Z][a-zA-Z0-9_]*)',
+            GESHI_REPLACE => '\\1',
+            GESHI_MODIFIERS => '',
+            GESHI_BEFORE => '',
+            GESHI_AFTER => ''
+            ),
+        2 => array( # member functions
+            GESHI_SEARCH => '(?<=[.])(a[1-6]|b[2-8]|c[4-6]|area|bid|bnf|clgp|cyc|diff|disc|[efjp]|fu|gen|index|mod|nf|no|omega|pol|reg|roots|sign|r[12]|t2|tate|tu|zk|zkst)\b',
+            GESHI_REPLACE => '\\1',
+            GESHI_MODIFIERS => '',
+            GESHI_BEFORE => '',
+            GESHI_AFTER => ''
+            )
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        2 => array(
+            '[a-zA-Z][a-zA-Z0-9_]*:' => ''
+            ),
+        3 => array(
+            'default(' => ''
+            ),
+        4 => array(
+            'iferrname(' => ''
+            ),
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/inc/geshi/pascal.php b/vendor/easybook/geshi/geshi/pascal.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/pascal.php
rename to vendor/easybook/geshi/geshi/pascal.php
diff --git a/inc/geshi/pcre.php b/vendor/easybook/geshi/geshi/pcre.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/pcre.php
rename to vendor/easybook/geshi/geshi/pcre.php
diff --git a/inc/geshi/per.php b/vendor/easybook/geshi/geshi/per.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/per.php
rename to vendor/easybook/geshi/geshi/per.php
index c42ddb58a76e6b28054e978cb8ca4581fa995bc1..c3b5d15082c814b0dcdb2ec25b295b89985d38ef
--- a/inc/geshi/per.php
+++ b/vendor/easybook/geshi/geshi/per.php
@@ -298,5 +298,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/perl.php b/vendor/easybook/geshi/geshi/perl.php
old mode 100644
new mode 100755
similarity index 89%
rename from inc/geshi/perl.php
rename to vendor/easybook/geshi/geshi/perl.php
index 309ebd86120fdccd1a3b1d6ec8199bc712e404e7..2c3dc92fe6423a144c7eb2cfbf47dd8e5a7e3e05
--- a/inc/geshi/perl.php
+++ b/vendor/easybook/geshi/geshi/perl.php
@@ -74,6 +74,12 @@ $language_data = array (
         //Predefined variables
         5 => '/\$(\^[a-zA-Z]?|[\*\$`\'&_\.,+\-~:;\\\\\/"\|%=\?!@#<>\(\)\[\]])(?!\w)|@[_+\-]|%[!]|\$(?=\{)/',
         ),
+    'NUMBERS' => array(
+        // Includes rules for decimal, octal (0777), hexidecimal (0xDEADBEEF),
+        // binary (0b101010) numbers, amended to work with underscores (since
+        // Perl allows you to use underscores in number literals)
+        0 => '(?:(?<![0-9a-z_\.%$@])|(?<=\.\.))(?<![\d\._]e[+\-])([1-9][\d_]*?|0)(?![0-9a-z_]|\.(?:[eE][+\-]?)?[\d_])|(?<![0-9a-z_\.%])(?<![\d\._]e[+\-])0b[01_]+?(?![0-9a-z_]|\.(?:[eE][+\-]?)?[\d_])|(?<![0-9a-z_\.])(?<![\d\._]e[+\-])0[0-7_]+?(?![0-9a-z_]|\.(?:[eE][+\-]?)?[\d_])|(?<![0-9a-z_\.])(?<![\d\._]e[+\-])0x[0-9a-fA-F_]+?(?![0-9a-z_]|\.(?:[eE][+\-]?)?[\d_])|(?<![0-9a-z_\.])(?<![\d\._]e[+\-])[\d_]+?\.[\d_]+?(?![0-9a-z_]|\.(?:[eE][+\-]?)?[\d_])',
+        ),
     'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
     'QUOTEMARKS' => array('"','`'),
     'HARDQUOTE' => array("'", "'"),            // An optional 2-element array defining the beginning and end of a hard-quoted string
@@ -106,7 +112,7 @@ $language_data = array (
             'getnetent', 'getpeername', 'getpgrp', 'getppid', 'getpriority',
             'getprotobyname', 'getprotobynumber', 'getprotoent', 'getpwent',
             'getpwnam', 'getpwuid', 'getservbyname', 'getservbyport', 'getservent',
-            'getsockname', 'getsockopt', 'glob', 'gmtime', 'goto', 'grep',
+            'getsockname', 'getsockopt', 'given', 'glob', 'gmtime', 'goto', 'grep',
             'hex', 'import', 'index', 'int', 'ioctl', 'join', 'keys', 'kill',
             'lc', 'lcfirst', 'length', 'link', 'listen', 'local',
             'localtime', 'log', 'lstat', 'm', 'map', 'mkdir', 'msgctl', 'msgget',
@@ -115,17 +121,17 @@ $language_data = array (
             'printf', 'prototype', 'push', 'qq', 'qr', 'quotemeta', 'qw',
             'qx', 'q', 'rand', 'read', 'readdir', 'readline', 'readlink', 'readpipe',
             'recv', 'ref', 'rename', 'require', 'return',
-            'reverse', 'rewinddir', 'rindex', 'rmdir', 's', 'scalar', 'seek',
+            'reverse', 'rewinddir', 'rindex', 'rmdir', 's', 'say', 'scalar', 'seek',
             'seekdir', 'select', 'semctl', 'semget', 'semop', 'send', 'setgrent',
             'sethostent', 'setnetent', 'setpgrp', 'setpriority', 'setprotoent',
             'setpwent', 'setservent', 'setsockopt', 'shift', 'shmctl', 'shmget',
             'shmread', 'shmwrite', 'shutdown', 'sin', 'sleep', 'socket', 'socketpair',
-            'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', 'stat',
+            'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', 'stat', 'state',
             'study', 'substr', 'symlink', 'syscall', 'sysopen', 'sysread',
             'sysseek', 'system', 'syswrite', 'tell', 'telldir', 'tie', 'tied',
             'time', 'times', 'tr', 'truncate', 'uc', 'ucfirst', 'umask', 'undef',
             'unlink', 'unpack', 'unshift', 'untie', 'utime', 'values',
-            'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'write', 'y'
+            'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'when', 'write', 'y'
             )
         ),
     'SYMBOLS' => array(
diff --git a/inc/geshi/perl6.php b/vendor/easybook/geshi/geshi/perl6.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/perl6.php
rename to vendor/easybook/geshi/geshi/perl6.php
diff --git a/inc/geshi/pf.php b/vendor/easybook/geshi/geshi/pf.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/pf.php
rename to vendor/easybook/geshi/geshi/pf.php
diff --git a/inc/geshi/php-brief.php b/vendor/easybook/geshi/geshi/php-brief.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/php-brief.php
rename to vendor/easybook/geshi/geshi/php-brief.php
diff --git a/inc/geshi/php.php b/vendor/easybook/geshi/geshi/php.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/php.php
rename to vendor/easybook/geshi/geshi/php.php
index 2827457b17db416b36ebf1f80a6e4da83e9de175..7b5c16e189763608f8cd379f589befa829172fac
--- a/inc/geshi/php.php
+++ b/vendor/easybook/geshi/geshi/php.php
@@ -1113,5 +1113,3 @@ $language_data = array(
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/pic16.php b/vendor/easybook/geshi/geshi/pic16.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/pic16.php
rename to vendor/easybook/geshi/geshi/pic16.php
index 46d7ac94db2f3c8a697375a88daae7b47e7c2867..2e28f17b62ab80df8367f0f4772ce55535342ae5
--- a/inc/geshi/pic16.php
+++ b/vendor/easybook/geshi/geshi/pic16.php
@@ -137,5 +137,3 @@ $language_data = array (
             )
         )
 );
-
-?>
diff --git a/inc/geshi/pike.php b/vendor/easybook/geshi/geshi/pike.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/pike.php
rename to vendor/easybook/geshi/geshi/pike.php
index 743f711b15b42e0b220dbc997ba039b478c9863e..dcc53092d37bd4fa86a27859109039f24ffb1fb8
--- a/inc/geshi/pike.php
+++ b/vendor/easybook/geshi/geshi/pike.php
@@ -99,5 +99,3 @@ $language_data = array(
     'SCRIPT_DELIMITERS' => array(),
     'HIGHLIGHT_STRICT_BLOCK' => array()
 );
-
-?>
diff --git a/inc/geshi/pixelbender.php b/vendor/easybook/geshi/geshi/pixelbender.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/pixelbender.php
rename to vendor/easybook/geshi/geshi/pixelbender.php
index 7b29ee6c3d82bd40d2ff433b166ae6e686ca15c0..6a2c8dea09670837d323910da286917ac7548672
--- a/inc/geshi/pixelbender.php
+++ b/vendor/easybook/geshi/geshi/pixelbender.php
@@ -172,5 +172,3 @@ $language_data = array(
     'HIGHLIGHT_STRICT_BLOCK' => array()
 );
 
-
-?>
diff --git a/inc/geshi/pli.php b/vendor/easybook/geshi/geshi/pli.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/pli.php
rename to vendor/easybook/geshi/geshi/pli.php
diff --git a/inc/geshi/plsql.php b/vendor/easybook/geshi/geshi/plsql.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/plsql.php
rename to vendor/easybook/geshi/geshi/plsql.php
index 09f90a225c6c1f147afd2fe7b999474f4b220c96..58f7c90f4b742b6f6328d48720b3094313b64f6b
--- a/inc/geshi/plsql.php
+++ b/vendor/easybook/geshi/geshi/plsql.php
@@ -252,5 +252,3 @@ $language_data = array (
     'SCRIPT_DELIMITERS' => array(),
     'HIGHLIGHT_STRICT_BLOCK' => array()
 );
-
-?>
diff --git a/inc/geshi/postgresql.php b/vendor/easybook/geshi/geshi/postgresql.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/postgresql.php
rename to vendor/easybook/geshi/geshi/postgresql.php
diff --git a/inc/geshi/povray.php b/vendor/easybook/geshi/geshi/povray.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/povray.php
rename to vendor/easybook/geshi/geshi/povray.php
diff --git a/inc/geshi/powerbuilder.php b/vendor/easybook/geshi/geshi/powerbuilder.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/powerbuilder.php
rename to vendor/easybook/geshi/geshi/powerbuilder.php
diff --git a/inc/geshi/powershell.php b/vendor/easybook/geshi/geshi/powershell.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/powershell.php
rename to vendor/easybook/geshi/geshi/powershell.php
diff --git a/inc/geshi/proftpd.php b/vendor/easybook/geshi/geshi/proftpd.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/proftpd.php
rename to vendor/easybook/geshi/geshi/proftpd.php
diff --git a/inc/geshi/progress.php b/vendor/easybook/geshi/geshi/progress.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/progress.php
rename to vendor/easybook/geshi/geshi/progress.php
diff --git a/inc/geshi/prolog.php b/vendor/easybook/geshi/geshi/prolog.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/prolog.php
rename to vendor/easybook/geshi/geshi/prolog.php
diff --git a/inc/geshi/properties.php b/vendor/easybook/geshi/geshi/properties.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/properties.php
rename to vendor/easybook/geshi/geshi/properties.php
diff --git a/inc/geshi/providex.php b/vendor/easybook/geshi/geshi/providex.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/providex.php
rename to vendor/easybook/geshi/geshi/providex.php
index 1e735bd0f47fcb8da88ddd438b2ba2597fb6e0b4..1a7b08bbee976ca693f5cb93629257aaab0e49d9
--- a/inc/geshi/providex.php
+++ b/vendor/easybook/geshi/geshi/providex.php
@@ -295,5 +295,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/purebasic.php b/vendor/easybook/geshi/geshi/purebasic.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/purebasic.php
rename to vendor/easybook/geshi/geshi/purebasic.php
diff --git a/inc/geshi/pycon.php b/vendor/easybook/geshi/geshi/pycon.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/pycon.php
rename to vendor/easybook/geshi/geshi/pycon.php
diff --git a/inc/geshi/pys60.php b/vendor/easybook/geshi/geshi/pys60.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/pys60.php
rename to vendor/easybook/geshi/geshi/pys60.php
index 59c67fac73f62c5cdfff370d9ee863c7a084116f..865b59adbd0e5810a6225cc269671a6b34330f0b
--- a/inc/geshi/pys60.php
+++ b/vendor/easybook/geshi/geshi/pys60.php
@@ -269,5 +269,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/python.php b/vendor/easybook/geshi/geshi/python.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/python.php
rename to vendor/easybook/geshi/geshi/python.php
diff --git a/inc/geshi/q.php b/vendor/easybook/geshi/geshi/q.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/q.php
rename to vendor/easybook/geshi/geshi/q.php
diff --git a/inc/geshi/qbasic.php b/vendor/easybook/geshi/geshi/qbasic.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/qbasic.php
rename to vendor/easybook/geshi/geshi/qbasic.php
diff --git a/vendor/easybook/geshi/geshi/racket.php b/vendor/easybook/geshi/geshi/racket.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0d931b41f8c0c4ead844cb7b32474d9fdd577ce
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/racket.php
@@ -0,0 +1,964 @@
+<?php
+/*************************************************************************************
+ * racket.php
+ * ----------
+ * Author:          Tim Brown (tim@timb.net)
+ * Copyright:   (c) 2013 Tim Brown ((https://github.com/tim-brown/geshi-racket))
+ * Release Version: 1.0.8.12
+ * Date Started:    2013-03-01
+ *
+ * Racket language file for GeSHi.
+ *
+ * This file was built automatically from the scripts in
+ * https://github.com/tim-brown/geshi-racket (you didn't think
+ * I typed those NUMBER regular expressions in myself, did you?).
+ * Use those scripts to regenerate the file.
+ *
+ * CHANGES
+ * -------
+ *   1.0 (2013-03-31)
+ *   - Initial Release1.1 (2013-03-31)
+ *   - Added URLs, "symbol"-like identifiers moved to SYMBOLS*
+ *
+ * TODO (updated 2013-04-25)
+ * -------------------------
+ *   * better handling of empty and short arrays
+ *   * care more about indentation and line lengths
+ *   * most compound regexps are possibly over-bracketed: (or ...)
+ *   * most compound regexps are possibly over-bracketed: (: ...)
+ *   * URLs should be formed more smartly by discovering which module they came from.
+ *   * '|...| identifiers
+ *   * #<<HERE strings
+ *   * #;(...) comments -- (note: requires balanced parenthesis regexp)
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+    'LANG_NAME' => 'Racket',
+    'COMMENT_SINGLE' => array(
+        1 => ';',
+        ),
+    'COMMENT_MULTI' => array(
+        '#|' => '|#',
+        ),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array('"',
+        ),
+    'ESCAPE_CHAR' => '\\',
+    'KEYWORDS' => array(
+        1 => array(
+            'abort-current-continuation', 'abs', 'absolute-path?', 'acos', 'add1',
+            'alarm-evt', 'always-evt', 'andmap', 'angle', 'append',
+            'arithmetic-shift', 'arity-at-least-value', 'arity-at-least?',
+            'asin', 'assf', 'assoc', 'assq', 'assv', 'atan', 'banner',
+            'bitwise-and', 'bitwise-bit-field', 'bitwise-bit-set?',
+            'bitwise-ior', 'bitwise-not', 'bitwise-xor', 'boolean?',
+            'bound-identifier=?', 'box', 'box-cas!', 'box-immutable', 'box?',
+            'break-enabled', 'break-thread', 'build-list', 'build-path',
+            'build-path/convention-type', 'build-string', 'build-vector',
+            'byte-pregexp', 'byte-pregexp?', 'byte-ready?', 'byte-regexp',
+            'byte-regexp?', 'byte?', 'bytes', 'bytes&gt;?', 'bytes&lt;?',
+            'bytes-&gt;immutable-bytes', 'bytes-&gt;list', 'bytes-&gt;path',
+            'bytes-&gt;path-element', 'bytes-&gt;string/latin-1',
+            'bytes-&gt;string/locale', 'bytes-&gt;string/utf-8',
+            'bytes-append', 'bytes-close-converter', 'bytes-convert',
+            'bytes-convert-end', 'bytes-converter?', 'bytes-copy',
+            'bytes-copy!', 'bytes-fill!', 'bytes-length',
+            'bytes-open-converter', 'bytes-ref', 'bytes-set!',
+            'bytes-utf-8-index', 'bytes-utf-8-length', 'bytes-utf-8-ref',
+            'bytes=?', 'bytes?', 'caaaar', 'caaadr', 'caaar', 'caadar',
+            'caaddr', 'caadr', 'caar', 'cadaar', 'cadadr', 'cadar', 'caddar',
+            'cadddr', 'caddr', 'cadr', 'call-in-nested-thread',
+            'call-with-break-parameterization',
+            'call-with-composable-continuation',
+            'call-with-continuation-barrier', 'call-with-continuation-prompt',
+            'call-with-current-continuation', 'call-with-escape-continuation',
+            'call-with-exception-handler',
+            'call-with-immediate-continuation-mark',
+            'call-with-parameterization', 'call-with-semaphore',
+            'call-with-semaphore/enable-break', 'call-with-values', 'call/cc',
+            'call/ec', 'car', 'cdaaar', 'cdaadr', 'cdaar', 'cdadar', 'cdaddr',
+            'cdadr', 'cdar', 'cddaar', 'cddadr', 'cddar', 'cdddar', 'cddddr',
+            'cdddr', 'cddr', 'cdr', 'ceiling', 'channel-get', 'channel-put',
+            'channel-put-evt', 'channel-put-evt?', 'channel-try-get',
+            'channel?', 'chaperone-box', 'chaperone-continuation-mark-key',
+            'chaperone-evt', 'chaperone-hash', 'chaperone-of?',
+            'chaperone-procedure', 'chaperone-prompt-tag', 'chaperone-struct',
+            'chaperone-struct-type', 'chaperone-vector', 'chaperone?',
+            'char&gt;=?', 'char&gt;?', 'char&lt;=?', 'char&lt;?',
+            'char-&gt;integer', 'char-alphabetic?', 'char-blank?',
+            'char-ci&gt;=?', 'char-ci&gt;?', 'char-ci&lt;=?', 'char-ci&lt;?',
+            'char-ci=?', 'char-downcase', 'char-foldcase',
+            'char-general-category', 'char-graphic?', 'char-iso-control?',
+            'char-lower-case?', 'char-numeric?', 'char-punctuation?',
+            'char-ready?', 'char-symbolic?', 'char-title-case?',
+            'char-titlecase', 'char-upcase', 'char-upper-case?',
+            'char-utf-8-length', 'char-whitespace?', 'char=?', 'char?',
+            'check-duplicate-identifier',
+            'checked-procedure-check-and-extract', 'choice-evt',
+            'cleanse-path', 'close-input-port', 'close-output-port',
+            'collect-garbage', 'collection-file-path', 'collection-path',
+            'compile', 'compile-allow-set!-undefined',
+            'compile-context-preservation-enabled',
+            'compile-enforce-module-constants', 'compile-syntax',
+            'compiled-expression?', 'compiled-module-expression?',
+            'complete-path?', 'complex?', 'compose', 'compose1', 'cons',
+            'continuation-mark-key?', 'continuation-mark-set-&gt;context',
+            'continuation-mark-set-&gt;list',
+            'continuation-mark-set-&gt;list*', 'continuation-mark-set-first',
+            'continuation-mark-set?', 'continuation-marks',
+            'continuation-prompt-available?', 'continuation-prompt-tag?',
+            'continuation?', 'copy-file', 'cos',
+            'current-break-parameterization', 'current-code-inspector',
+            'current-command-line-arguments', 'current-compile',
+            'current-compiled-file-roots', 'current-continuation-marks',
+            'current-custodian', 'current-directory', 'current-drive',
+            'current-error-port', 'current-eval',
+            'current-evt-pseudo-random-generator', 'current-gc-milliseconds',
+            'current-get-interaction-input-port',
+            'current-inexact-milliseconds', 'current-input-port',
+            'current-inspector', 'current-library-collection-paths',
+            'current-load', 'current-load-extension',
+            'current-load-relative-directory', 'current-load/use-compiled',
+            'current-locale', 'current-logger', 'current-memory-use',
+            'current-milliseconds', 'current-module-declare-name',
+            'current-module-declare-source', 'current-module-name-resolver',
+            'current-namespace', 'current-output-port',
+            'current-parameterization', 'current-preserved-thread-cell-values',
+            'current-print', 'current-process-milliseconds',
+            'current-prompt-read', 'current-pseudo-random-generator',
+            'current-read-interaction', 'current-reader-guard',
+            'current-readtable', 'current-seconds', 'current-security-guard',
+            'current-subprocess-custodian-mode', 'current-thread',
+            'current-thread-group', 'current-thread-initial-stack-size',
+            'current-write-relative-directory', 'custodian-box-value',
+            'custodian-box?', 'custodian-limit-memory',
+            'custodian-managed-list', 'custodian-memory-accounting-available?',
+            'custodian-require-memory', 'custodian-shutdown-all', 'custodian?',
+            'custom-print-quotable-accessor', 'custom-print-quotable?',
+            'custom-write-accessor', 'custom-write?', 'date*-nanosecond',
+            'date*-time-zone-name', 'date*?', 'date-day', 'date-dst?',
+            'date-hour', 'date-minute', 'date-month', 'date-second',
+            'date-time-zone-offset', 'date-week-day', 'date-year',
+            'date-year-day', 'date?', 'datum-&gt;syntax',
+            'datum-intern-literal', 'default-continuation-prompt-tag',
+            'delete-directory', 'delete-file', 'denominator',
+            'directory-exists?', 'directory-list', 'display', 'displayln',
+            'double-flonum?', 'dump-memory-stats', 'dynamic-require',
+            'dynamic-require-for-syntax', 'dynamic-wind', 'eof', 'eof-object?',
+            'ephemeron-value', 'ephemeron?', 'eprintf', 'eq-hash-code', 'eq?',
+            'equal-hash-code', 'equal-secondary-hash-code', 'equal?',
+            'equal?/recur', 'eqv-hash-code', 'eqv?', 'error',
+            'error-display-handler', 'error-escape-handler',
+            'error-print-context-length', 'error-print-source-location',
+            'error-print-width', 'error-value-&gt;string-handler', 'eval',
+            'eval-jit-enabled', 'eval-syntax', 'even?', 'evt?',
+            'exact-&gt;inexact', 'exact-integer?',
+            'exact-nonnegative-integer?', 'exact-positive-integer?', 'exact?',
+            'executable-yield-handler', 'exit', 'exit-handler',
+            'exn-continuation-marks', 'exn-message', 'exn:break-continuation',
+            'exn:break:hang-up?', 'exn:break:terminate?', 'exn:break?',
+            'exn:fail:contract:arity?', 'exn:fail:contract:continuation?',
+            'exn:fail:contract:divide-by-zero?',
+            'exn:fail:contract:non-fixnum-result?',
+            'exn:fail:contract:variable-id', 'exn:fail:contract:variable?',
+            'exn:fail:contract?', 'exn:fail:filesystem:errno-errno',
+            'exn:fail:filesystem:errno?', 'exn:fail:filesystem:exists?',
+            'exn:fail:filesystem:version?', 'exn:fail:filesystem?',
+            'exn:fail:network:errno-errno', 'exn:fail:network:errno?',
+            'exn:fail:network?', 'exn:fail:out-of-memory?',
+            'exn:fail:read-srclocs', 'exn:fail:read:eof?',
+            'exn:fail:read:non-char?', 'exn:fail:read?',
+            'exn:fail:syntax-exprs', 'exn:fail:syntax:unbound?',
+            'exn:fail:syntax?', 'exn:fail:unsupported?', 'exn:fail:user?',
+            'exn:fail?', 'exn:srclocs-accessor', 'exn:srclocs?', 'exn?', 'exp',
+            'expand', 'expand-once', 'expand-syntax', 'expand-syntax-once',
+            'expand-syntax-to-top-form', 'expand-to-top-form',
+            'expand-user-path', 'expt', 'file-exists?',
+            'file-or-directory-identity', 'file-or-directory-modify-seconds',
+            'file-or-directory-permissions', 'file-position', 'file-position*',
+            'file-size', 'file-stream-buffer-mode', 'file-stream-port?',
+            'filesystem-root-list', 'filter', 'find-executable-path',
+            'find-library-collection-paths', 'find-system-path', 'findf',
+            'fixnum?', 'floating-point-bytes-&gt;real', 'flonum?', 'floor',
+            'flush-output', 'foldl', 'foldr', 'for-each', 'format', 'fprintf',
+            'free-identifier=?', 'free-label-identifier=?',
+            'free-template-identifier=?', 'free-transformer-identifier=?',
+            'gcd', 'generate-temporaries', 'gensym', 'get-output-bytes',
+            'get-output-string', 'getenv', 'global-port-print-handler',
+            'guard-evt', 'handle-evt', 'handle-evt?', 'hash', 'hash-&gt;list',
+            'hash-copy', 'hash-count', 'hash-eq?', 'hash-equal?', 'hash-eqv?',
+            'hash-for-each', 'hash-has-key?', 'hash-iterate-first',
+            'hash-iterate-key', 'hash-iterate-next', 'hash-iterate-value',
+            'hash-keys', 'hash-map', 'hash-placeholder?', 'hash-ref',
+            'hash-ref!', 'hash-remove', 'hash-remove!', 'hash-set',
+            'hash-set!', 'hash-set*', 'hash-set*!', 'hash-update',
+            'hash-update!', 'hash-values', 'hash-weak?', 'hash?', 'hasheq',
+            'hasheqv', 'identifier-binding', 'identifier-label-binding',
+            'identifier-prune-lexical-context',
+            'identifier-prune-to-source-module',
+            'identifier-remove-from-definition-context',
+            'identifier-template-binding', 'identifier-transformer-binding',
+            'identifier?', 'imag-part', 'immutable?', 'impersonate-box',
+            'impersonate-continuation-mark-key', 'impersonate-hash',
+            'impersonate-procedure', 'impersonate-prompt-tag',
+            'impersonate-struct', 'impersonate-vector', 'impersonator-of?',
+            'impersonator-prop:application-mark',
+            'impersonator-property-accessor-procedure?',
+            'impersonator-property?', 'impersonator?', 'in-cycle',
+            'in-directory', 'in-hash', 'in-hash-keys', 'in-hash-pairs',
+            'in-hash-values', 'in-parallel', 'in-sequences',
+            'in-values*-sequence', 'in-values-sequence', 'inexact-&gt;exact',
+            'inexact-real?', 'inexact?', 'input-port?', 'inspector?',
+            'integer-&gt;char', 'integer-&gt;integer-bytes',
+            'integer-bytes-&gt;integer', 'integer-length', 'integer-sqrt',
+            'integer-sqrt/remainder', 'integer?',
+            'internal-definition-context-seal', 'internal-definition-context?',
+            'keyword&lt;?', 'keyword-&gt;string', 'keyword-apply', 'keyword?',
+            'kill-thread', 'lcm', 'length', 'liberal-define-context?',
+            'link-exists?', 'list', 'list*', 'list-&gt;bytes',
+            'list-&gt;string', 'list-&gt;vector', 'list-ref', 'list-tail',
+            'list?', 'load', 'load-extension', 'load-on-demand-enabled',
+            'load-relative', 'load-relative-extension', 'load/cd',
+            'load/use-compiled', 'local-expand', 'local-expand/capture-lifts',
+            'local-transformer-expand',
+            'local-transformer-expand/capture-lifts', 'locale-string-encoding',
+            'log', 'log-level?', 'log-max-level', 'log-message',
+            'log-receiver?', 'logger-name', 'logger?', 'magnitude',
+            'make-arity-at-least', 'make-base-empty-namespace',
+            'make-base-namespace', 'make-bytes', 'make-channel',
+            'make-continuation-mark-key', 'make-continuation-prompt-tag',
+            'make-custodian', 'make-custodian-box', 'make-date', 'make-date*',
+            'make-derived-parameter', 'make-directory', 'make-do-sequence',
+            'make-empty-namespace', 'make-ephemeron', 'make-exn',
+            'make-exn:break', 'make-exn:break:hang-up',
+            'make-exn:break:terminate', 'make-exn:fail',
+            'make-exn:fail:contract', 'make-exn:fail:contract:arity',
+            'make-exn:fail:contract:continuation',
+            'make-exn:fail:contract:divide-by-zero',
+            'make-exn:fail:contract:non-fixnum-result',
+            'make-exn:fail:contract:variable', 'make-exn:fail:filesystem',
+            'make-exn:fail:filesystem:errno',
+            'make-exn:fail:filesystem:exists',
+            'make-exn:fail:filesystem:version', 'make-exn:fail:network',
+            'make-exn:fail:network:errno', 'make-exn:fail:out-of-memory',
+            'make-exn:fail:read', 'make-exn:fail:read:eof',
+            'make-exn:fail:read:non-char', 'make-exn:fail:syntax',
+            'make-exn:fail:syntax:unbound', 'make-exn:fail:unsupported',
+            'make-exn:fail:user', 'make-file-or-directory-link', 'make-hash',
+            'make-hash-placeholder', 'make-hasheq', 'make-hasheq-placeholder',
+            'make-hasheqv', 'make-hasheqv-placeholder', 'make-immutable-hash',
+            'make-immutable-hasheq', 'make-immutable-hasheqv',
+            'make-impersonator-property', 'make-input-port', 'make-inspector',
+            'make-keyword-procedure', 'make-known-char-range-list',
+            'make-log-receiver', 'make-logger', 'make-output-port',
+            'make-parameter', 'make-phantom-bytes', 'make-pipe',
+            'make-placeholder', 'make-polar', 'make-prefab-struct',
+            'make-pseudo-random-generator', 'make-reader-graph',
+            'make-readtable', 'make-rectangular', 'make-rename-transformer',
+            'make-resolved-module-path', 'make-security-guard',
+            'make-semaphore', 'make-set!-transformer', 'make-shared-bytes',
+            'make-sibling-inspector', 'make-special-comment', 'make-srcloc',
+            'make-string', 'make-struct-field-accessor',
+            'make-struct-field-mutator', 'make-struct-type',
+            'make-struct-type-property', 'make-syntax-delta-introducer',
+            'make-syntax-introducer', 'make-thread-cell', 'make-thread-group',
+            'make-vector', 'make-weak-box', 'make-weak-hash',
+            'make-weak-hasheq', 'make-weak-hasheqv', 'make-will-executor',
+            'map', 'max', 'mcar', 'mcdr', 'mcons', 'member', 'memf', 'memq',
+            'memv', 'min', 'module-&gt;exports', 'module-&gt;imports',
+            'module-&gt;language-info', 'module-&gt;namespace',
+            'module-compiled-exports', 'module-compiled-imports',
+            'module-compiled-language-info', 'module-compiled-name',
+            'module-compiled-submodules', 'module-declared?',
+            'module-path-index-join', 'module-path-index-resolve',
+            'module-path-index-split', 'module-path-index-submodule',
+            'module-path-index?', 'module-path?', 'module-predefined?',
+            'module-provide-protected?', 'modulo', 'mpair?', 'nack-guard-evt',
+            'namespace-anchor-&gt;empty-namespace',
+            'namespace-anchor-&gt;namespace', 'namespace-anchor?',
+            'namespace-attach-module', 'namespace-attach-module-declaration',
+            'namespace-base-phase', 'namespace-mapped-symbols',
+            'namespace-module-identifier', 'namespace-module-registry',
+            'namespace-require', 'namespace-require/constant',
+            'namespace-require/copy', 'namespace-require/expansion-time',
+            'namespace-set-variable-value!', 'namespace-symbol-&gt;identifier',
+            'namespace-syntax-introduce', 'namespace-undefine-variable!',
+            'namespace-unprotect-module', 'namespace-variable-value',
+            'namespace?', 'negative?', 'never-evt', 'newline',
+            'normal-case-path', 'not', 'null', 'null?', 'number-&gt;string',
+            'number?', 'numerator', 'object-name', 'odd?', 'open-input-bytes',
+            'open-input-string', 'open-output-bytes', 'open-output-string',
+            'ormap', 'output-port?', 'pair?', 'parameter-procedure=?',
+            'parameter?', 'parameterization?', 'path-&gt;bytes',
+            'path-&gt;complete-path', 'path-&gt;directory-path',
+            'path-&gt;string', 'path-add-suffix', 'path-convention-type',
+            'path-element-&gt;bytes', 'path-element-&gt;string',
+            'path-for-some-system?', 'path-list-string-&gt;path-list',
+            'path-replace-suffix', 'path-string?', 'path?', 'peek-byte',
+            'peek-byte-or-special', 'peek-bytes', 'peek-bytes!',
+            'peek-bytes-avail!', 'peek-bytes-avail!*',
+            'peek-bytes-avail!/enable-break', 'peek-char',
+            'peek-char-or-special', 'peek-string', 'peek-string!',
+            'phantom-bytes?', 'pipe-content-length', 'placeholder-get',
+            'placeholder-set!', 'placeholder?', 'poll-guard-evt',
+            'port-closed-evt', 'port-closed?', 'port-commit-peeked',
+            'port-count-lines!', 'port-count-lines-enabled',
+            'port-display-handler', 'port-file-identity', 'port-file-unlock',
+            'port-next-location', 'port-print-handler', 'port-progress-evt',
+            'port-provides-progress-evts?', 'port-read-handler',
+            'port-try-file-lock?', 'port-write-handler', 'port-writes-atomic?',
+            'port-writes-special?', 'port?', 'positive?',
+            'prefab-key-&gt;struct-type', 'prefab-key?', 'prefab-struct-key',
+            'pregexp', 'pregexp?', 'primitive-closure?',
+            'primitive-result-arity', 'primitive?', 'print',
+            'print-as-expression', 'print-boolean-long-form', 'print-box',
+            'print-graph', 'print-hash-table', 'print-mpair-curly-braces',
+            'print-pair-curly-braces', 'print-reader-abbreviations',
+            'print-struct', 'print-syntax-width', 'print-unreadable',
+            'print-vector-length', 'printf', 'procedure-&gt;method',
+            'procedure-arity', 'procedure-arity-includes?', 'procedure-arity?',
+            'procedure-closure-contents-eq?', 'procedure-extract-target',
+            'procedure-keywords', 'procedure-reduce-arity',
+            'procedure-reduce-keyword-arity', 'procedure-rename',
+            'procedure-struct-type?', 'procedure?', 'progress-evt?',
+            'prop:arity-string', 'prop:checked-procedure',
+            'prop:custom-print-quotable', 'prop:custom-write',
+            'prop:equal+hash', 'prop:evt', 'prop:exn:srclocs',
+            'prop:impersonator-of', 'prop:input-port',
+            'prop:liberal-define-context', 'prop:output-port',
+            'prop:procedure', 'prop:rename-transformer', 'prop:sequence',
+            'prop:set!-transformer', 'pseudo-random-generator-&gt;vector',
+            'pseudo-random-generator-vector?', 'pseudo-random-generator?',
+            'putenv', 'quotient', 'quotient/remainder', 'raise',
+            'raise-argument-error', 'raise-arguments-error',
+            'raise-arity-error', 'raise-mismatch-error', 'raise-range-error',
+            'raise-result-error', 'raise-syntax-error', 'raise-type-error',
+            'raise-user-error', 'random', 'random-seed', 'rational?',
+            'rationalize', 'read', 'read-accept-bar-quote', 'read-accept-box',
+            'read-accept-compiled', 'read-accept-dot', 'read-accept-graph',
+            'read-accept-infix-dot', 'read-accept-lang',
+            'read-accept-quasiquote', 'read-accept-reader', 'read-byte',
+            'read-byte-or-special', 'read-bytes', 'read-bytes!',
+            'read-bytes-avail!', 'read-bytes-avail!*',
+            'read-bytes-avail!/enable-break', 'read-bytes-line',
+            'read-case-sensitive', 'read-char', 'read-char-or-special',
+            'read-curly-brace-as-paren', 'read-decimal-as-inexact',
+            'read-eval-print-loop', 'read-language', 'read-line',
+            'read-on-demand-source', 'read-square-bracket-as-paren',
+            'read-string', 'read-string!', 'read-syntax',
+            'read-syntax/recursive', 'read/recursive', 'readtable-mapping',
+            'readtable?', 'real-&gt;decimal-string', 'real-&gt;double-flonum',
+            'real-&gt;floating-point-bytes', 'real-&gt;single-flonum',
+            'real-part', 'real?', 'regexp', 'regexp-match',
+            'regexp-match-exact?', 'regexp-match-peek',
+            'regexp-match-peek-immediate', 'regexp-match-peek-positions',
+            'regexp-match-peek-positions-immediate',
+            'regexp-match-peek-positions-immediate/end',
+            'regexp-match-peek-positions/end', 'regexp-match-positions',
+            'regexp-match-positions/end', 'regexp-match/end', 'regexp-match?',
+            'regexp-max-lookbehind', 'regexp-quote', 'regexp-replace',
+            'regexp-replace*', 'regexp-replace-quote', 'regexp-replaces',
+            'regexp-split', 'regexp-try-match', 'regexp?', 'relative-path?',
+            'remainder', 'remove', 'remove*', 'remq', 'remq*', 'remv', 'remv*',
+            'rename-file-or-directory', 'rename-transformer-target',
+            'rename-transformer?', 'reroot-path', 'resolve-path',
+            'resolved-module-path-name', 'resolved-module-path?', 'reverse',
+            'round', 'seconds-&gt;date', 'security-guard?',
+            'semaphore-peek-evt', 'semaphore-peek-evt?', 'semaphore-post',
+            'semaphore-try-wait?', 'semaphore-wait',
+            'semaphore-wait/enable-break', 'semaphore?', 'sequence-&gt;stream',
+            'sequence-generate', 'sequence-generate*', 'sequence?',
+            'set!-transformer-procedure', 'set!-transformer?', 'set-box!',
+            'set-mcar!', 'set-mcdr!', 'set-phantom-bytes!',
+            'set-port-next-location!', 'shared-bytes', 'shell-execute',
+            'simplify-path', 'sin', 'single-flonum?', 'sleep',
+            'special-comment-value', 'special-comment?', 'split-path', 'sqrt',
+            'srcloc-column', 'srcloc-line', 'srcloc-position', 'srcloc-source',
+            'srcloc-span', 'srcloc?', 'stop-after', 'stop-before', 'string',
+            'string&gt;=?', 'string&gt;?', 'string&lt;=?', 'string&lt;?',
+            'string-&gt;bytes/latin-1', 'string-&gt;bytes/locale',
+            'string-&gt;bytes/utf-8', 'string-&gt;immutable-string',
+            'string-&gt;keyword', 'string-&gt;list', 'string-&gt;number',
+            'string-&gt;path', 'string-&gt;path-element', 'string-&gt;symbol',
+            'string-&gt;uninterned-symbol', 'string-&gt;unreadable-symbol',
+            'string-append', 'string-ci&gt;=?', 'string-ci&gt;?',
+            'string-ci&lt;=?', 'string-ci&lt;?', 'string-ci=?', 'string-copy',
+            'string-copy!', 'string-downcase', 'string-fill!',
+            'string-foldcase', 'string-length', 'string-locale&gt;?',
+            'string-locale&lt;?', 'string-locale-ci&gt;?',
+            'string-locale-ci&lt;?', 'string-locale-ci=?',
+            'string-locale-downcase', 'string-locale-upcase',
+            'string-locale=?', 'string-normalize-nfc', 'string-normalize-nfd',
+            'string-normalize-nfkc', 'string-normalize-nfkd', 'string-ref',
+            'string-set!', 'string-titlecase', 'string-upcase',
+            'string-utf-8-length', 'string=?', 'string?', 'struct-&gt;vector',
+            'struct-accessor-procedure?', 'struct-constructor-procedure?',
+            'struct-info', 'struct-mutator-procedure?',
+            'struct-predicate-procedure?', 'struct-type-info',
+            'struct-type-make-constructor', 'struct-type-make-predicate',
+            'struct-type-property-accessor-procedure?',
+            'struct-type-property?', 'struct-type?', 'struct:arity-at-least',
+            'struct:date', 'struct:date*', 'struct:exn', 'struct:exn:break',
+            'struct:exn:break:hang-up', 'struct:exn:break:terminate',
+            'struct:exn:fail', 'struct:exn:fail:contract',
+            'struct:exn:fail:contract:arity',
+            'struct:exn:fail:contract:continuation',
+            'struct:exn:fail:contract:divide-by-zero',
+            'struct:exn:fail:contract:non-fixnum-result',
+            'struct:exn:fail:contract:variable', 'struct:exn:fail:filesystem',
+            'struct:exn:fail:filesystem:errno',
+            'struct:exn:fail:filesystem:exists',
+            'struct:exn:fail:filesystem:version', 'struct:exn:fail:network',
+            'struct:exn:fail:network:errno', 'struct:exn:fail:out-of-memory',
+            'struct:exn:fail:read', 'struct:exn:fail:read:eof',
+            'struct:exn:fail:read:non-char', 'struct:exn:fail:syntax',
+            'struct:exn:fail:syntax:unbound', 'struct:exn:fail:unsupported',
+            'struct:exn:fail:user', 'struct:srcloc', 'struct?', 'sub1',
+            'subbytes', 'subprocess', 'subprocess-group-enabled',
+            'subprocess-kill', 'subprocess-pid', 'subprocess-status',
+            'subprocess-wait', 'subprocess?', 'substring', 'symbol-&gt;string',
+            'symbol-interned?', 'symbol-unreadable?', 'symbol?', 'sync',
+            'sync/enable-break', 'sync/timeout', 'sync/timeout/enable-break',
+            'syntax-&gt;datum', 'syntax-&gt;list', 'syntax-arm',
+            'syntax-column', 'syntax-disarm', 'syntax-e', 'syntax-line',
+            'syntax-local-bind-syntaxes', 'syntax-local-certifier',
+            'syntax-local-context', 'syntax-local-expand-expression',
+            'syntax-local-get-shadower', 'syntax-local-introduce',
+            'syntax-local-lift-context', 'syntax-local-lift-expression',
+            'syntax-local-lift-module-end-declaration',
+            'syntax-local-lift-provide', 'syntax-local-lift-require',
+            'syntax-local-lift-values-expression',
+            'syntax-local-make-definition-context',
+            'syntax-local-make-delta-introducer',
+            'syntax-local-module-defined-identifiers',
+            'syntax-local-module-exports',
+            'syntax-local-module-required-identifiers', 'syntax-local-name',
+            'syntax-local-phase-level', 'syntax-local-submodules',
+            'syntax-local-transforming-module-provides?', 'syntax-local-value',
+            'syntax-local-value/immediate', 'syntax-original?',
+            'syntax-position', 'syntax-property',
+            'syntax-property-symbol-keys', 'syntax-protect', 'syntax-rearm',
+            'syntax-recertify', 'syntax-shift-phase-level', 'syntax-source',
+            'syntax-source-module', 'syntax-span', 'syntax-taint',
+            'syntax-tainted?', 'syntax-track-origin',
+            'syntax-transforming-module-expression?', 'syntax-transforming?',
+            'syntax?', 'system-big-endian?', 'system-idle-evt',
+            'system-language+country', 'system-library-subpath',
+            'system-path-convention-type', 'system-type', 'tan',
+            'terminal-port?', 'thread', 'thread-cell-ref', 'thread-cell-set!',
+            'thread-cell-values?', 'thread-cell?', 'thread-dead-evt',
+            'thread-dead?', 'thread-group?', 'thread-receive',
+            'thread-receive-evt', 'thread-resume', 'thread-resume-evt',
+            'thread-rewind-receive', 'thread-running?', 'thread-send',
+            'thread-suspend', 'thread-suspend-evt', 'thread-try-receive',
+            'thread-wait', 'thread/suspend-to-kill', 'thread?', 'time-apply',
+            'truncate', 'unbox', 'uncaught-exception-handler',
+            'use-collection-link-paths', 'use-compiled-file-paths',
+            'use-user-specific-search-paths', 'values',
+            'variable-reference-&gt;empty-namespace',
+            'variable-reference-&gt;module-base-phase',
+            'variable-reference-&gt;module-declaration-inspector',
+            'variable-reference-&gt;module-path-index',
+            'variable-reference-&gt;module-source',
+            'variable-reference-&gt;namespace', 'variable-reference-&gt;phase',
+            'variable-reference-&gt;resolved-module-path',
+            'variable-reference-constant?', 'variable-reference?', 'vector',
+            'vector-&gt;immutable-vector', 'vector-&gt;list',
+            'vector-&gt;pseudo-random-generator',
+            'vector-&gt;pseudo-random-generator!', 'vector-&gt;values',
+            'vector-copy!', 'vector-fill!', 'vector-immutable',
+            'vector-length', 'vector-ref', 'vector-set!',
+            'vector-set-performance-stats!', 'vector?', 'version', 'void',
+            'void?', 'weak-box-value', 'weak-box?', 'will-execute',
+            'will-executor?', 'will-register', 'will-try-execute', 'wrap-evt',
+            'write', 'write-byte', 'write-bytes', 'write-bytes-avail',
+            'write-bytes-avail*', 'write-bytes-avail-evt',
+            'write-bytes-avail/enable-break', 'write-char', 'write-special',
+            'write-special-avail*', 'write-special-evt', 'write-string',
+            'zero?',
+            ),
+
+        2 => array(
+            '#%app', '#%datum', '#%expression', '#%module-begin', '#%plain-app',
+            '#%plain-lambda', '#%plain-module-begin', '#%provide', '#%require',
+            '#%stratified-body', '#%top', '#%top-interaction',
+            '#%variable-reference', ':do-in', 'all-defined-out',
+            'all-from-out', 'and', 'apply', 'arity-at-least', 'begin',
+            'begin-for-syntax', 'begin0', 'call-with-input-file',
+            'call-with-input-file*', 'call-with-output-file',
+            'call-with-output-file*', 'case', 'case-lambda', 'combine-in',
+            'combine-out', 'cond', 'date', 'date*', 'define',
+            'define-for-syntax', 'define-logger', 'define-namespace-anchor',
+            'define-sequence-syntax', 'define-struct', 'define-struct/derived',
+            'define-syntax', 'define-syntax-rule', 'define-syntaxes',
+            'define-values', 'define-values-for-syntax', 'do', 'else',
+            'except-in', 'except-out', 'exn', 'exn:break', 'exn:break:hang-up',
+            'exn:break:terminate', 'exn:fail', 'exn:fail:contract',
+            'exn:fail:contract:arity', 'exn:fail:contract:continuation',
+            'exn:fail:contract:divide-by-zero',
+            'exn:fail:contract:non-fixnum-result',
+            'exn:fail:contract:variable', 'exn:fail:filesystem',
+            'exn:fail:filesystem:errno', 'exn:fail:filesystem:exists',
+            'exn:fail:filesystem:version', 'exn:fail:network',
+            'exn:fail:network:errno', 'exn:fail:out-of-memory',
+            'exn:fail:read', 'exn:fail:read:eof', 'exn:fail:read:non-char',
+            'exn:fail:syntax', 'exn:fail:syntax:unbound',
+            'exn:fail:unsupported', 'exn:fail:user', 'file', 'for', 'for*',
+            'for*/and', 'for*/first', 'for*/fold', 'for*/fold/derived',
+            'for*/hash', 'for*/hasheq', 'for*/hasheqv', 'for*/last',
+            'for*/list', 'for*/lists', 'for*/or', 'for*/product', 'for*/sum',
+            'for*/vector', 'for-label', 'for-meta', 'for-syntax',
+            'for-template', 'for/and', 'for/first', 'for/fold',
+            'for/fold/derived', 'for/hash', 'for/hasheq', 'for/hasheqv',
+            'for/last', 'for/list', 'for/lists', 'for/or', 'for/product',
+            'for/sum', 'for/vector', 'gen:custom-write', 'gen:equal+hash',
+            'if', 'in-bytes', 'in-bytes-lines', 'in-indexed',
+            'in-input-port-bytes', 'in-input-port-chars', 'in-lines',
+            'in-list', 'in-mlist', 'in-naturals', 'in-port', 'in-producer',
+            'in-range', 'in-string', 'in-value', 'in-vector', 'lambda', 'let',
+            'let*', 'let*-values', 'let-syntax', 'let-syntaxes', 'let-values',
+            'let/cc', 'let/ec', 'letrec', 'letrec-syntax', 'letrec-syntaxes',
+            'letrec-syntaxes+values', 'letrec-values', 'lib', 'local-require',
+            'log-debug', 'log-error', 'log-fatal', 'log-info', 'log-warning',
+            'module', 'module*', 'module+', 'only-in', 'only-meta-in',
+            'open-input-file', 'open-input-output-file', 'open-output-file',
+            'or', 'parameterize', 'parameterize*', 'parameterize-break',
+            'planet', 'prefix-in', 'prefix-out', 'protect-out', 'provide',
+            'quasiquote', 'quasisyntax', 'quasisyntax/loc', 'quote',
+            'quote-syntax', 'quote-syntax/prune', 'regexp-match*',
+            'regexp-match-peek-positions*', 'regexp-match-positions*',
+            'relative-in', 'rename-in', 'rename-out', 'require', 'set!',
+            'set!-values', 'sort', 'srcloc', 'struct', 'struct-copy',
+            'struct-field-index', 'struct-out', 'submod', 'syntax',
+            'syntax-case', 'syntax-case*', 'syntax-id-rules', 'syntax-rules',
+            'syntax/loc', 'time', 'unless', 'unquote', 'unquote-splicing',
+            'unsyntax', 'unsyntax-splicing', 'when', 'with-continuation-mark',
+            'with-handlers', 'with-handlers*', 'with-input-from-file',
+            'with-output-to-file', 'with-syntax', '?',
+            ),
+
+        3 => array(
+            '&gt;/c', '&lt;/c', 'append*', 'append-map', 'argmax', 'argmin',
+            'bad-number-of-results', 'base-&gt;-doms/c', 'base-&gt;-rngs/c',
+            'base-&gt;?', 'blame-add-unknown-context', 'blame-context',
+            'blame-contract', 'blame-fmt-&gt;-string', 'blame-negative',
+            'blame-original?', 'blame-positive', 'blame-replace-negative',
+            'blame-source', 'blame-swap', 'blame-swapped?', 'blame-value',
+            'blame?', 'boolean=?', 'build-chaperone-contract-property',
+            'build-compound-type-name', 'build-contract-property',
+            'build-flat-contract-property', 'bytes-append*', 'bytes-join',
+            'bytes-no-nuls?', 'call-with-input-bytes',
+            'call-with-input-string', 'call-with-output-bytes',
+            'call-with-output-string', 'chaperone-contract-property?',
+            'chaperone-contract?', 'class-&gt;interface', 'class-info',
+            'class?', 'coerce-chaperone-contract',
+            'coerce-chaperone-contracts', 'coerce-contract',
+            'coerce-contract/f', 'coerce-contracts', 'coerce-flat-contract',
+            'coerce-flat-contracts', 'conjugate', 'cons?', 'const',
+            'contract-first-order', 'contract-first-order-passes?',
+            'contract-name', 'contract-proc', 'contract-projection',
+            'contract-property?', 'contract-random-generate',
+            'contract-stronger?', 'contract-struct-exercise',
+            'contract-struct-generate', 'contract?', 'convert-stream',
+            'copy-directory/files', 'copy-port', 'cosh', 'count',
+            'current-blame-format', 'current-future', 'curry', 'curryr',
+            'degrees-&gt;radians', 'delete-directory/files',
+            'deserialize-info:set-v0', 'dict-iter-contract',
+            'dict-key-contract', 'dict-value-contract', 'drop', 'drop-right',
+            'dup-input-port', 'dup-output-port', 'dynamic-get-field',
+            'dynamic-send', 'dynamic-set-field!', 'eighth', 'empty',
+            'empty-sequence', 'empty-stream', 'empty?', 'env-stash',
+            'eq-contract-val', 'eq-contract?', 'equal&lt;%&gt;',
+            'equal-contract-val', 'equal-contract?', 'exact-ceiling',
+            'exact-floor', 'exact-round', 'exact-truncate',
+            'exn:fail:contract:blame-object', 'exn:fail:contract:blame?',
+            'exn:fail:object?', 'exn:misc:match?', 'explode-path',
+            'externalizable&lt;%&gt;', 'false', 'false/c', 'false?',
+            'field-names', 'fifth', 'file-name-from-path',
+            'filename-extension', 'filter-map', 'filter-not',
+            'filter-read-input-port', 'find-files', 'first', 'flat-contract',
+            'flat-contract-predicate', 'flat-contract-property?',
+            'flat-contract?', 'flat-named-contract', 'flatten', 'fold-files',
+            'force', 'fourth', 'fsemaphore-count', 'fsemaphore-post',
+            'fsemaphore-try-wait?', 'fsemaphore-wait', 'fsemaphore?', 'future',
+            'future?', 'futures-enabled?', 'generate-ctc-fail?',
+            'generate-env', 'generate-member-key', 'generate/choose',
+            'generate/direct', 'generic?', 'group-execute-bit',
+            'group-read-bit', 'group-write-bit', 'has-contract?', 'identity',
+            'impersonator-contract?', 'impersonator-prop:contracted',
+            'implementation?', 'implementation?/c', 'in-dict', 'in-dict-keys',
+            'in-dict-pairs', 'in-dict-values', 'infinite?',
+            'input-port-append', 'instanceof/c', 'interface-&gt;method-names',
+            'interface-extension?', 'interface?', 'is-a?', 'is-a?/c', 'last',
+            'last-pair', 'list-&gt;set', 'list-&gt;seteq', 'list-&gt;seteqv',
+            'make-chaperone-contract', 'make-contract', 'make-custom-hash',
+            'make-directory*', 'make-exn:fail:contract:blame',
+            'make-exn:fail:object', 'make-flat-contract', 'make-fsemaphore',
+            'make-generate-ctc-fail', 'make-generic',
+            'make-immutable-custom-hash', 'make-input-port/read-to-peek',
+            'make-limited-input-port', 'make-list', 'make-lock-file-name',
+            'make-mixin-contract', 'make-none/c', 'make-pipe-with-specials',
+            'make-primitive-class', 'make-proj-contract',
+            'make-tentative-pretty-print-output-port', 'make-weak-custom-hash',
+            'match-equality-test', 'matches-arity-exactly?',
+            'member-name-key-hash-code', 'member-name-key=?',
+            'member-name-key?', 'merge-input', 'method-in-interface?',
+            'mixin-contract', 'n-&gt;th', 'nan?', 'natural-number/c', 'negate',
+            'new-?/c', 'new-?/c', 'ninth', 'normalize-path', 'object%',
+            'object-&gt;vector', 'object-info', 'object-interface',
+            'object-method-arity-includes?', 'object=?', 'object?',
+            'open-output-nowhere', 'order-of-magnitude', 'other-execute-bit',
+            'other-read-bit', 'other-write-bit', 'parse-command-line',
+            'partition', 'path-element?', 'path-only', 'pathlist-closure',
+            'pi', 'pi.f', 'place-break', 'place-channel', 'place-channel-get',
+            'place-channel-put', 'place-channel-put/get', 'place-channel?',
+            'place-dead-evt', 'place-enabled?', 'place-kill',
+            'place-message-allowed?', 'place-sleep', 'place-wait', 'place?',
+            'port-&gt;bytes', 'port-&gt;list', 'port-&gt;string',
+            'predicate/c', 'preferences-lock-file-mode', 'pretty-display',
+            'pretty-format', 'pretty-print',
+            'pretty-print-.-symbol-without-bars',
+            'pretty-print-abbreviate-read-macros', 'pretty-print-columns',
+            'pretty-print-current-style-table', 'pretty-print-depth',
+            'pretty-print-exact-as-decimal', 'pretty-print-extend-style-table',
+            'pretty-print-handler', 'pretty-print-newline',
+            'pretty-print-post-print-hook', 'pretty-print-pre-print-hook',
+            'pretty-print-print-hook', 'pretty-print-print-line',
+            'pretty-print-remap-stylable', 'pretty-print-show-inexactness',
+            'pretty-print-size-hook', 'pretty-print-style-table?',
+            'pretty-printing', 'pretty-write', 'printable&lt;%&gt;',
+            'printable/c', 'process', 'process*', 'process*/ports',
+            'process/ports', 'processor-count', 'promise-forced?',
+            'promise-running?', 'promise?', 'prop:chaperone-contract',
+            'prop:contract', 'prop:contracted', 'prop:dict',
+            'prop:flat-contract', 'prop:opt-chaperone-contract',
+            'prop:opt-chaperone-contract-get-test',
+            'prop:opt-chaperone-contract?', 'prop:stream', 'proper-subset?',
+            'put-preferences', 'radians-&gt;degrees', 'raise-blame-error',
+            'raise-contract-error', 'range', 'reencode-input-port',
+            'reencode-output-port', 'relocate-input-port',
+            'relocate-output-port', 'rest', 'second', 'sequence-&gt;list',
+            'sequence-add-between', 'sequence-andmap', 'sequence-append',
+            'sequence-count', 'sequence-filter', 'sequence-fold',
+            'sequence-for-each', 'sequence-length', 'sequence-map',
+            'sequence-ormap', 'sequence-ref', 'sequence-tail', 'set',
+            'set-&gt;list', 'set-add', 'set-count', 'set-empty?', 'set-eq?',
+            'set-equal?', 'set-eqv?', 'set-first', 'set-for-each',
+            'set-intersect', 'set-map', 'set-member?', 'set-remove',
+            'set-rest', 'set-subtract', 'set-symmetric-difference',
+            'set-union', 'set/c', 'set=?', 'set?', 'seteq', 'seteqv',
+            'seventh', 'sgn', 'shuffle', 'simple-form-path', 'sinh', 'sixth',
+            'skip-projection-wrapper?', 'some-system-path-&gt;string',
+            'special-filter-input-port', 'split-at', 'split-at-right', 'sqr',
+            'stream-&gt;list', 'stream-add-between', 'stream-andmap',
+            'stream-append', 'stream-count', 'stream-empty?', 'stream-filter',
+            'stream-first', 'stream-fold', 'stream-for-each', 'stream-length',
+            'stream-map', 'stream-ormap', 'stream-ref', 'stream-rest',
+            'stream-tail', 'stream?', 'string-&gt;some-system-path',
+            'string-append*', 'string-no-nuls?', 'struct-type-property/c',
+            'struct:exn:fail:contract:blame', 'struct:exn:fail:object',
+            'subclass?', 'subclass?/c', 'subset?', 'symbol=?', 'system',
+            'system*', 'system*/exit-code', 'system/exit-code', 'take',
+            'take-right', 'tanh', 'tcp-abandon-port', 'tcp-accept',
+            'tcp-accept-evt', 'tcp-accept-ready?', 'tcp-accept/enable-break',
+            'tcp-addresses', 'tcp-close', 'tcp-connect',
+            'tcp-connect/enable-break', 'tcp-listen', 'tcp-listener?',
+            'tcp-port?', 'tentative-pretty-print-port-cancel',
+            'tentative-pretty-print-port-transfer', 'tenth',
+            'the-unsupplied-arg', 'third', 'touch', 'transplant-input-port',
+            'transplant-output-port', 'true', 'udp-addresses', 'udp-bind!',
+            'udp-bound?', 'udp-close', 'udp-connect!', 'udp-connected?',
+            'udp-open-socket', 'udp-receive!', 'udp-receive!*',
+            'udp-receive!-evt', 'udp-receive!/enable-break',
+            'udp-receive-ready-evt', 'udp-send', 'udp-send*', 'udp-send-evt',
+            'udp-send-ready-evt', 'udp-send-to', 'udp-send-to*',
+            'udp-send-to-evt', 'udp-send-to/enable-break',
+            'udp-send/enable-break', 'udp?', 'unit?', 'unsupplied-arg?',
+            'user-execute-bit', 'user-read-bit', 'user-write-bit',
+            'value-contract', 'vector-append', 'vector-argmax',
+            'vector-argmin', 'vector-copy', 'vector-count', 'vector-drop',
+            'vector-drop-right', 'vector-filter', 'vector-filter-not',
+            'vector-map', 'vector-map!', 'vector-member', 'vector-memq',
+            'vector-memv', 'vector-set*!', 'vector-split-at',
+            'vector-split-at-right', 'vector-take', 'vector-take-right',
+            'with-input-from-bytes', 'with-input-from-string',
+            'with-output-to-bytes', 'with-output-to-string', 'would-be-future',
+            'writable&lt;%&gt;', 'xor',
+            ),
+        4 => array(
+            '&gt;=/c', '&lt;=/c', '-&gt;*m', '-&gt;d', '-&gt;dm', '-&gt;i', '-&gt;m',
+            '=/c', 'absent', 'abstract', 'add-between', 'and/c', 'any',
+            'any/c', 'augment', 'augment*', 'augment-final', 'augment-final*',
+            'augride', 'augride*', 'between/c', 'blame-add-context',
+            'box-immutable/c', 'box/c', 'call-with-file-lock/timeout',
+            'case-&gt;', 'case-&gt;m', 'class', 'class*',
+            'class-field-accessor', 'class-field-mutator', 'class/c',
+            'class/derived', 'command-line', 'compound-unit',
+            'compound-unit/infer', 'cons/c', 'continuation-mark-key/c',
+            'contract', 'contract-out', 'contract-struct', 'contracted',
+            'current-contract-region', 'define-compound-unit',
+            'define-compound-unit/infer', 'define-contract-struct',
+            'define-local-member-name', 'define-match-expander',
+            'define-member-name', 'define-opt/c', 'define-serializable-class',
+            'define-serializable-class*', 'define-signature',
+            'define-signature-form', 'define-struct/contract', 'define-unit',
+            'define-unit-binding', 'define-unit-from-context',
+            'define-unit/contract', 'define-unit/new-import-export',
+            'define-unit/s', 'define-values-for-export',
+            'define-values/invoke-unit', 'define-values/invoke-unit/infer',
+            'define/augment', 'define/augment-final', 'define/augride',
+            'define/contract', 'define/final-prop', 'define/match',
+            'define/overment', 'define/override', 'define/override-final',
+            'define/private', 'define/public', 'define/public-final',
+            'define/pubment', 'define/subexpression-pos-prop', 'delay',
+            'delay/idle', 'delay/name', 'delay/strict', 'delay/sync',
+            'delay/thread', 'dict-&gt;list', 'dict-can-functional-set?',
+            'dict-can-remove-keys?', 'dict-count', 'dict-for-each',
+            'dict-has-key?', 'dict-iterate-first', 'dict-iterate-key',
+            'dict-iterate-next', 'dict-iterate-value', 'dict-keys', 'dict-map',
+            'dict-mutable?', 'dict-ref', 'dict-ref!', 'dict-remove',
+            'dict-remove!', 'dict-set', 'dict-set!', 'dict-set*', 'dict-set*!',
+            'dict-update', 'dict-update!', 'dict-values', 'dict?',
+            'display-lines', 'display-lines-to-file', 'display-to-file',
+            'dynamic-place', 'dynamic-place*', 'eof-evt', 'except',
+            'exn:fail:contract:blame', 'exn:fail:object', 'export', 'extends',
+            'field', 'field-bound?', 'file-&gt;bytes', 'file-&gt;bytes-lines',
+            'file-&gt;lines', 'file-&gt;list', 'file-&gt;string',
+            'file-&gt;value', 'find-relative-path', 'flat-murec-contract',
+            'flat-rec-contract', 'for*/set', 'for*/seteq', 'for*/seteqv',
+            'for/set', 'for/seteq', 'for/seteqv', 'gen:dict', 'gen:stream',
+            'generic', 'get-field', 'get-preference', 'hash/c', 'implies',
+            'import', 'in-set', 'in-stream', 'include',
+            'include-at/relative-to', 'include-at/relative-to/reader',
+            'include/reader', 'inherit', 'inherit-field', 'inherit/inner',
+            'inherit/super', 'init', 'init-depend', 'init-field', 'init-rest',
+            'inner', 'inspect', 'instantiate', 'integer-in', 'interface',
+            'interface*', 'invoke-unit', 'invoke-unit/infer', 'lazy', 'link',
+            'list/c', 'listof', 'local', 'make-handle-get-preference-locked',
+            'make-object', 'make-temporary-file', 'match', 'match*',
+            'match*/derived', 'match-define', 'match-define-values',
+            'match-lambda', 'match-lambda*', 'match-lambda**', 'match-let',
+            'match-let*', 'match-let*-values', 'match-let-values',
+            'match-letrec', 'match/derived', 'match/values', 'member-name-key',
+            'method-contract?', 'mixin', 'nand', 'new', 'non-empty-listof',
+            'none/c', 'nor', 'not/c', 'object-contract', 'object/c',
+            'one-of/c', 'only', 'open', 'opt/c', 'or/c', 'overment',
+            'overment*', 'override', 'override*', 'override-final',
+            'override-final*', 'parameter/c', 'parametric-&gt;/c',
+            'peek-bytes!-evt', 'peek-bytes-avail!-evt', 'peek-bytes-evt',
+            'peek-string!-evt', 'peek-string-evt', 'peeking-input-port',
+            'place', 'place*', 'port-&gt;bytes-lines', 'port-&gt;lines',
+            'prefix', 'private', 'private*', 'procedure-arity-includes/c',
+            'promise/c', 'prompt-tag/c', 'prop:dict/contract',
+            'provide-signature-elements', 'provide/contract', 'public',
+            'public*', 'public-final', 'public-final*', 'pubment', 'pubment*',
+            'read-bytes!-evt', 'read-bytes-avail!-evt', 'read-bytes-evt',
+            'read-bytes-line-evt', 'read-line-evt', 'read-string!-evt',
+            'read-string-evt', 'real-in', 'recursive-contract',
+            'regexp-match-evt', 'remove-duplicates', 'rename', 'rename-inner',
+            'rename-super', 'send', 'send*', 'send+', 'send-generic',
+            'send/apply', 'send/keyword-apply', 'set-field!', 'shared',
+            'stream', 'stream-cons', 'string-join', 'string-len/c',
+            'string-normalize-spaces', 'string-replace', 'string-split',
+            'string-trim', 'struct*', 'struct/c', 'struct/ctc', 'struct/dc',
+            'super', 'super-instantiate', 'super-make-object', 'super-new',
+            'symbols', 'syntax/c', 'tag', 'this', 'this%', 'thunk', 'thunk*',
+            'unconstrained-domain-&gt;', 'unit', 'unit-from-context', 'unit/c',
+            'unit/new-import-export', 'unit/s', 'vector-immutable/c',
+            'vector-immutableof', 'vector/c', 'vectorof', 'with-contract',
+            'with-method', 'write-to-file', '~.a', '~.s', '~.v', '~a', '~e',
+            '~r', '~s', '~v',
+            ),
+        ),
+    'SYMBOLS' => array(
+        0 => array(
+            '&gt;', '&gt;=', '&lt;', '&lt;=', '*', '+', '-', '-&gt;', '-&gt;*', '...', '/',
+            '=', '=&gt;', '==', '_', '#fl', '#fx', '#s', '#', '#f', '#F',
+            '#false', '#t', '#T', '#true', '#lang', '#reader', '.', '\'', '#`',
+            '#,@', '#,', '#\'', '`', '@', ',', '#%', '#$', '#&', '#~', '#rx',
+            '#px', '#<<', '#;', '#hash', '#',
+            ),
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false,
+        ),
+    'NUMBERS' => array(
+        1 => '(((#x#e)|(#e#x)|(#x#i)|(#i#x)|(#x))((((((((((((-)|(\+)))?(((('.
+            '(([0-9])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)'.
+            '(\.)?(#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))('.
+            '([sl]((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan'.
+            '\.))[0f])))))?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-9a-fA-F])+'.
+            '(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?(#)*))|(((([0-9a-fA-F])+(#'.
+            ')*)\\/(([0-9a-fA-F])+(#)*))))(([sl]((((-)|(\+)))?([0-9])+)))?'.
+            '))|((((inf\.)|(nan\.))[0f])))i))|((((((((-)|(\+)))?(((((([0-9'.
+            '])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?('.
+            '#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))(([sl]('.
+            '(((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0'.
+            'f]))))@((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-9a-fA-F])+(#)'.
+            '*)))|(((([0-9a-fA-F])+(#)*)(\.)?(#)*))|(((([0-9a-fA-F])+(#)*)'.
+            '\\/(([0-9a-fA-F])+(#)*))))(([sl]((((-)|(\+)))?([0-9])+)))?)))'.
+            '|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|((((((-)|(\+)))?('.
+            '([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9])+)i))|((((('.
+            '-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)))?(((((([0-9'.
+            '])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?('.
+            '#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))(([sl]('.
+            '(((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0'.
+            'f])))))|(((((-)|(\+)))?([0-9])+))))',
+        2 => '(((#o#e)|(#e#o)|(#o#i)|(#i#o)|(#o))((((((((((((-)|(\+)))?(((('.
+            '(([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?(#)*))|'.
+            '(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))((((-)|'.
+            '(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))'.
+            ')?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])'.
+            '+(#)*)(\.)?(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl'.
+            '])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf\.)|(nan\.))[0'.
+            'f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-7])+(#)*)'.
+            '))|(((([0-7])+(#)*)(\.)?(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#'.
+            ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|'.
+            '(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))?(((((([0-9])+'.
+            ')?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?(#)*))|(((([0-7]'.
+            ')+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?(['.
+            '0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|(((('.
+            '((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9'.
+            '])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)'.
+            '))?(((((([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?'.
+            '(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))'.
+            '((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))['.
+            '0f])))))|(((((-)|(\+)))?([0-9])+))))',
+        3 => '(((#b#e)|(#e#b)|(#b#i)|(#i#b)|(#b))((((((((((((-)|(\+)))?(((('.
+            '(([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?(#)*))|'.
+            '(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))((((-)|'.
+            '(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))'.
+            ')?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])'.
+            '+(#)*)(\.)?(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl'.
+            '])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf\.)|(nan\.))[0'.
+            'f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-1])+(#)*)'.
+            '))|(((([0-1])+(#)*)(\.)?(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#'.
+            ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|'.
+            '(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))?(((((([0-9])+'.
+            ')?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?(#)*))|(((([0-1]'.
+            ')+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?(['.
+            '0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|(((('.
+            '((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9'.
+            '])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)'.
+            '))?(((((([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?'.
+            '(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))'.
+            '((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))['.
+            '0f])))))|(((((-)|(\+)))?([0-9])+))))',
+        4 => '((((#d#e)|(#e#d)|(#d#i)|(#i#d)|(#e)|(#i)|(#d)))?((((((((((((-'.
+            ')|(\+)))?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-9])+(#)*'.
+            ')(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((([sl])|(['.
+            'def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(na'.
+            'n\.))[0f])))))?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-9])+(#)*)'.
+            '))|(((([0-9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#'.
+            ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf'.
+            '\.)|(nan\.))[0f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?'.
+            '(([0-9])+(#)*)))|(((([0-9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)'.
+            '\\/(([0-9])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)'.
+            '))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))'.
+            '?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-9])+(#)*)(\.)?(#'.
+            ')*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((([sl])|([def]))(('.
+            '((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f'.
+            ']))))))))|((((((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))((['.
+            '0-9])+\\/([0-9])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|'.
+            '(((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-'.
+            '9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((('.
+            '[sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((in'.
+            'f\.)|(nan\.))[0f])))))|(((((-)|(\+)))?([0-9])+))))',
+            ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: blue;',
+            2 => 'color: rgb(34, 34, 139);',
+            3 => 'color: blue;',
+            4 => 'color: rgb(34, 34, 139);',
+            ),
+        'COMMENTS' => array(
+            1 => 'color: rgb(194, 116, 31);',
+            'MULTI' => 'color: rgb(194, 116, 31);',
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => '',
+            ),
+        'BRACKETS' => array(
+            0 => 'color: rgb(132, 60,36);',
+            ),
+        'STRINGS' => array(
+            0 => 'color: rgb(34, 139, 34);',
+            ),
+        'NUMBERS' => array(
+            0 => 'color: rgb(34, 139, 34);',
+            1 => 'color: rgb(34, 139, 34);',
+            2 => 'color: rgb(34, 139, 34);',
+            3 => 'color: rgb(34, 139, 34);',
+            4 => 'color: rgb(34, 139, 34);',
+            ),
+        'METHODS' => array(
+            0 => 'color: #202020;',
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: rgb(132, 60,36);',
+            ),
+        'REGEXPS' => array(
+            1 => 'color: rgb(34, 139, 34);',
+            2 => 'color: rgb(132, 60,36);',
+            3 => 'color: rgb(34, 139, 34);',
+            ),
+        'SCRIPT' => array(
+            ),
+        ),
+    'URLS' => array(
+        1 => 'http://docs.racket-lang.org/reference/',
+        2 => 'http://docs.racket-lang.org/reference/',
+        3 => 'http://docs.racket-lang.org/reference/',
+        4 => 'http://docs.racket-lang.org/reference/',
+        ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(
+        ),
+    'REGEXPS' => array(
+        1 => '#\\\\(nul|null|backspace|tab|newline|linefeed|vtab|page|retur'.
+            'n|space|rubout|([0-7]{1,3})|(u[[:xdigit:]]{1,4})|(U[[:xdigit:'.
+            ']]{1,6})|[a-z])',
+        2 => '#:[^[:space:]()[\\]{}",\']+',
+        3 => '\'((\\\\ )|([^[:space:]()[\\]{}",\']))+',
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'PARSER_CONTROL' => array(
+        'KEYWORDS' => array(
+            'DISALLOWED_BEFORE' => '[[:space:]()[\\]{}",\']',
+            ),
+        'ENABLE_FLAGS' => array(
+            'SYMBOLS' => GESHI_MAYBE,
+            'BRACKETS' => GESHI_MAYBE,
+            'REGEXPS' => GESHI_MAYBE,
+            'ESCAPE_CHAR' => GESHI_MAYBE,
+            )
+        )
+);
diff --git a/inc/geshi/rails.php b/vendor/easybook/geshi/geshi/rails.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/rails.php
rename to vendor/easybook/geshi/geshi/rails.php
index 65ddee884e4bacffefb7c28dda00b700228e53f9..d41bd9a6f837adf302e3e670064c85e3134e97bb
--- a/inc/geshi/rails.php
+++ b/vendor/easybook/geshi/geshi/rails.php
@@ -402,5 +402,3 @@ $language_data = array (
         0 => true,
         )
 );
-
-?>
diff --git a/vendor/easybook/geshi/geshi/rbs.php b/vendor/easybook/geshi/geshi/rbs.php
new file mode 100644
index 0000000000000000000000000000000000000000..02c2fcfa8ff1718e516009d1a9fa925bcc5b6f56
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/rbs.php
@@ -0,0 +1,224 @@
+<?php
+/*************************************************************************************
+ * rbs.php
+ * ------
+ * Author: Deng Wen Gang (deng@priity.com)
+ * Copyright: (c) 2013 Deng Wen Gang
+ * Release Version: 1.0.8.12
+ * Date Started: 2013/01/15
+ *
+ * RBScript language file for GeSHi.
+ *
+ * RBScript official website: http://docs.realsoftware.com/index.php/Rbscript
+ *
+ * CHANGES
+ * -------
+ * 2013/01/15 (1.0.0)
+ *  -  First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'RBScript',
+    'COMMENT_SINGLE' => array( 1 => '//', 2 => "'" ),
+    'COMMENT_MULTI' => array(),
+    'COMMENT_REGEXP' => array(
+        3 => '/REM\s.*$/im',
+        4 => '/&b[01]+/',
+        5 => '/&o[0-7]+/',
+        6 => '/&h[a-f0-9]+/i',
+        7 => '/&c[a-f0-9]+/i',
+        8 => '/&u[a-f0-9]+/i',
+        ),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array('"'),
+    'ESCAPE_CHAR' => '',
+    'KEYWORDS' => array(
+        1 => array(
+            'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'Uint32', 'Uint64', 'Byte', 'Integer',
+            'Single', 'Double', 'Boolean', 'String', 'Color', 'Object', 'Variant'
+            ),
+        2 => array(
+            'Private', 'Public', 'Protected',
+            'Sub', 'Function', 'Delegate', 'Exception',
+            ),
+        3 => array(
+            'IsA',
+            'And', 'Or', 'Not', 'Xor',
+            'If', 'Then', 'Else', 'ElseIf',
+            'Select', 'Case',
+            'For', 'Each', 'In', 'To', 'Step', 'Next',
+            'Do', 'Loop', 'Until',
+            'While', 'Wend',
+            'Continue', 'Exit', 'Goto', 'End',
+            ),
+        4 => array(
+            'Const', 'Static',
+            'Dim', 'As', 'Redim',
+            'Me', 'Self', 'Super', 'Extends', 'Implements',
+            'ByRef', 'ByVal', 'Assigns', 'ParamArray',
+            'Mod',
+            'Raise',
+            ),
+        5 => array(
+            'False', 'True', 'Nil'
+            ),
+        6 => array(
+            'Abs',
+            'Acos',
+            'Asc',
+            'AscB',
+            'Asin',
+            'Atan',
+            'Atan2',
+            'CDbl',
+            'Ceil',
+            'Chr',
+            'ChrB',
+            'CMY',
+            'Cos',
+            'CountFields',
+            'CStr',
+            'Exp',
+            'Floor',
+            'Format',
+            'Hex',
+            'HSV',
+            'InStr',
+            'InStrB',
+            'Left',
+            'LeftB',
+            'Len',
+            'LenB',
+            'Log',
+            'Lowercase',
+            'LTrim',
+            'Max',
+            'Microseconds',
+            'Mid',
+            'MidB',
+            'Min',
+            'NthField',
+            'Oct',
+            'Pow',
+            'Replace',
+            'ReplaceB',
+            'ReplaceAll',
+            'ReplaceAllB',
+            'RGB',
+            'Right',
+            'RightB',
+            'Rnd',
+            'Round',
+            'RTrim',
+            'Sin',
+            'Sqrt',
+            'Str',
+            'StrComp',
+            'Tan',
+            'Ticks',
+            'Titlecase',
+            'Trim',
+            'UBound',
+            'Uppercase',
+            'Val',
+            ),
+        ),
+    'SYMBOLS' => array(
+            '+', '-', '*', '/', '\\', '^', '<', '>', '=', '<>', '&'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false,
+        5 => false,
+        6 => false
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #F660AB; font-weight: bold;',
+            2 => 'color: #E56717; font-weight: bold;',
+            3 => 'color: #8D38C9; font-weight: bold;',
+            4 => 'color: #151B8D; font-weight: bold;',
+            5 => 'color: #00C2FF; font-weight: bold;',
+            6 => 'color: #3EA99F; font-weight: bold;'
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #008000;',
+            2 => 'color: #008000;',
+            3 => 'color: #008000;',
+
+            4 => 'color: #800000;',
+            5 => 'color: #800000;',
+            6 => 'color: #800000;',
+            7 => 'color: #800000;',
+            8 => 'color: #800000;',
+            ),
+        'BRACKETS' => array(
+            ),
+        'STRINGS' => array(
+            0 => 'color: #800000;'
+            ),
+        'NUMBERS' => array(
+            ),
+        'METHODS' => array(
+            ),
+        'SYMBOLS' => array(
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #800000; font-weight: bold;'
+            ),
+        'SCRIPT' => array(
+            ),
+        'REGEXPS' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => '',
+        5 => '',
+        6 => ''
+        ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'PARSER_CONTROL' => array(
+        'ENABLE_FLAGS' => array(
+            'BRACKETS' => GESHI_NEVER,
+            'SYMBOLS' => GESHI_NEVER,
+            'NUMBERS' => GESHI_NEVER
+            )
+        )
+);
diff --git a/inc/geshi/rebol.php b/vendor/easybook/geshi/geshi/rebol.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/rebol.php
rename to vendor/easybook/geshi/geshi/rebol.php
diff --git a/inc/geshi/reg.php b/vendor/easybook/geshi/geshi/reg.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/reg.php
rename to vendor/easybook/geshi/geshi/reg.php
index 157b2bd24b3a7ad072c400101985cf2316426378..2034d5adbe03484c0f0f29cab4b682d8a9f53510
--- a/inc/geshi/reg.php
+++ b/vendor/easybook/geshi/geshi/reg.php
@@ -229,5 +229,3 @@ $language_data = array (
         )
     )
 );
-
-?>
diff --git a/inc/geshi/rexx.php b/vendor/easybook/geshi/geshi/rexx.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/rexx.php
rename to vendor/easybook/geshi/geshi/rexx.php
index b3cb932297e92dec8387d599ef0c723eb3f3e674..1189ac5be20e831ec9786c282a24206de64bfbd1
--- a/inc/geshi/rexx.php
+++ b/vendor/easybook/geshi/geshi/rexx.php
@@ -158,5 +158,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/robots.php b/vendor/easybook/geshi/geshi/robots.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/robots.php
rename to vendor/easybook/geshi/geshi/robots.php
diff --git a/inc/geshi/rpmspec.php b/vendor/easybook/geshi/geshi/rpmspec.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/rpmspec.php
rename to vendor/easybook/geshi/geshi/rpmspec.php
diff --git a/inc/geshi/rsplus.php b/vendor/easybook/geshi/geshi/rsplus.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/rsplus.php
rename to vendor/easybook/geshi/geshi/rsplus.php
diff --git a/inc/geshi/ruby.php b/vendor/easybook/geshi/geshi/ruby.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/ruby.php
rename to vendor/easybook/geshi/geshi/ruby.php
diff --git a/vendor/easybook/geshi/geshi/rust.php b/vendor/easybook/geshi/geshi/rust.php
new file mode 100644
index 0000000000000000000000000000000000000000..07ba51a02a1f1fd01d0029ff4e62ad98085662ac
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/rust.php
@@ -0,0 +1,228 @@
+<?php
+/*************************************************************************************
+ * rust.php
+ * --------
+ * Author: Edward Hart (edward.dan.hart@gmail.com)
+ * Copyright: (c) 2013 Edward Hart
+ * Release Version: 1.0.8.12
+ * Date Started: 2013/10/20
+ *
+ * Rust language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2013/10/20
+ *   -  First Release
+ *
+ * TODO (updated 2013/10/20)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+    'LANG_NAME' => 'Rust',
+
+    'COMMENT_SINGLE' => array('//'),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'COMMENT_REGEXP' => array(),
+
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'ESCAPE_REGEXP' => array(
+        //Simple Single Char Escapes
+        1 => "#\\\\[\\\\nrt\'\"?\n]#i",
+        //Hexadecimal Char Specs
+        2 => "#\\\\x[\da-fA-F]{2}#",
+        //Hexadecimal Char Specs
+        3 => "#\\\\u[\da-fA-F]{4}#",
+        //Hexadecimal Char Specs
+        4 => "#\\\\U[\da-fA-F]{8}#",
+        //Octal Char Specs
+        5 => "#\\\\[0-7]{1,3}#"
+        ),
+    'NUMBERS' =>
+        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+        GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+        GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+
+    'KEYWORDS' => array(
+        // Keywords
+        1 => array(
+            'alt', 'as', 'assert', 'break', 'const', 'continue', 'copy', 'do',
+            'else', 'enum', 'extern', 'fn', 'for', 'if',
+            'impl', 'in', 'let', 'log', 'loop', 'match', 'mod', 'mut', 'of',
+            'priv', 'pub', 'ref', 'return', 'self', 'static', 'struct', 'super',
+            'to', 'trait', 'type', 'unsafe', 'use', 'with', 'while'
+            ),
+        // Boolean values
+        2 => array( 'true', 'false' ),
+        // Structs and built-in types
+        3 => array(
+            'u8', 'i8',
+            'u16', 'i16',
+            'u32', 'i32',
+            'u64', 'i64',
+            'f32', 'f64',
+            'int', 'uint',
+            'float',
+            'bool',
+            'str', 'char',
+            'Argument', 'AsyncWatcher', 'BorrowRecord', 'BufReader',
+            'BufWriter', 'BufferedReader', 'BufferedStream', 'BufferedWriter',
+            'ByRef', 'ByteIterator', 'CFile', 'CString', 'CStringIterator',
+            'Cell', 'Chain', 'Chan', 'ChanOne', 'CharIterator',
+            'CharOffsetIterator', 'CharRange', 'CharSplitIterator',
+            'CharSplitNIterator', 'ChunkIter', 'Condition', 'ConnectRequest',
+            'Coroutine', 'Counter', 'CrateMap', 'Cycle', 'DeflateWriter',
+            'Display', 'ElementSwaps', 'Enumerate', 'Exp', 'Exp1', 'FileDesc',
+            'FileReader', 'FileStat', 'FileStream', 'FileWriter', 'Filter',
+            'FilterMap', 'FlatMap', 'FormatSpec', 'Formatter', 'FsRequest',
+            'Fuse', 'GarbageCollector', 'GetAddrInfoRequest', 'Handle',
+            'HashMap', 'HashMapIterator', 'HashMapMoveIterator',
+            'HashMapMutIterator', 'HashSet', 'HashSetIterator',
+            'HashSetMoveIterator', 'Hint', 'IdleWatcher', 'InflateReader',
+            'Info', 'Inspect', 'Invert', 'IoError', 'Isaac64Rng', 'IsaacRng',
+            'LineBufferedWriter', 'Listener', 'LocalHeap', 'LocalStorage',
+            'Loop', 'Map', 'MatchesIndexIterator', 'MemReader', 'MemWriter',
+            'MemoryMap', 'ModEntry', 'MoveIterator', 'MovePtrAdaptor',
+            'MoveRevIterator', 'NoOpRunnable', 'NonCopyable', 'Normal',
+            'OSRng', 'OptionIterator', 'Parser', 'Path', 'Peekable',
+            'Permutations', 'Pipe', 'PipeStream', 'PluralArm', 'Port',
+            'PortOne', 'Process', 'ProcessConfig', 'ProcessOptions',
+            'ProcessOutput', 'RC', 'RSplitIterator', 'RandSample', 'Range',
+            'RangeInclusive', 'RangeStep', 'RangeStepInclusive', 'Rc', 'RcMut',
+            'ReaderRng', 'Repeat', 'ReprVisitor', 'RequestData',
+            'ReseedWithDefault', 'ReseedingRng', 'Scan', 'SchedOpts',
+            'SelectArm', 'SharedChan', 'SharedPort', 'SignalWatcher',
+            'SipState', 'Skip', 'SkipWhile', 'SocketAddr', 'SplitIterator',
+            'StackPool', 'StackSegment', 'StandardNormal', 'StdErrLogger',
+            'StdIn', 'StdOut', 'StdReader', 'StdRng', 'StdWriter',
+            'StrSplitIterator', 'StreamWatcher', 'TTY', 'Take', 'TakeWhile',
+            'Task', 'TaskBuilder', 'TaskOpts', 'TcpAcceptor', 'TcpListener',
+            'TcpStream', 'TcpWatcher', 'Timer', 'TimerWatcher', 'TrieMap',
+            'TrieMapIterator', 'TrieSet', 'TrieSetIterator', 'Tube',
+            'UdpSendRequest', 'UdpSocket', 'UdpStream', 'UdpWatcher', 'Unfold',
+            'UnixAcceptor', 'UnixListener', 'UnixStream', 'Unwinder',
+            'UvAddrInfo', 'UvError', 'UvEventLoop', 'UvFileStream',
+            'UvIoFactory', 'UvPausibleIdleCallback', 'UvPipeStream',
+            'UvProcess', 'UvRemoteCallback', 'UvSignal', 'UvTTY',
+            'UvTcpAcceptor', 'UvTcpListener', 'UvTcpStream', 'UvTimer',
+            'UvUdpSocket', 'UvUnboundPipe', 'UvUnixAcceptor', 'UvUnixListener',
+            'VecIterator', 'VecMutIterator', 'Weighted', 'WeightedChoice',
+            'WindowIter', 'WriteRequest', 'XorShiftRng', 'Zip', 'addrinfo',
+            'uv_buf_t', 'uv_err_data', 'uv_process_options_t', 'uv_stat_t',
+            'uv_stdio_container_t', 'uv_timespec_t'
+            ),
+        // Enums
+        4 => array(
+            'Alignment', 'Count', 'Either', 'ExponentFormat', 'FPCategory',
+            'FileAccess', 'FileMode', 'Flag', 'IoErrorKind', 'IpAddr',
+            'KeyValue', 'MapError', 'MapOption', 'MemoryMapKind', 'Method',
+            'NullByteResolution', 'Option', 'Ordering', 'PathPrefix', 'Piece',
+            'PluralKeyword', 'Position', 'Protocol', 'Result', 'SchedHome',
+            'SchedMode', 'SeekStyle', 'SendStr', 'SignFormat',
+            'SignificantDigits', 'Signum', 'SocketType', 'StdioContainer',
+            'TaskResult', 'TaskType', 'UvSocketAddr', 'Void', 'uv_handle_type',
+            'uv_membership', 'uv_req_type'
+            )
+        ),
+    'SYMBOLS' => array(
+        '(', ')', '{', '}', '[', ']',
+        '+', '-', '*', '/', '%',
+        '&', '|', '^', '!', '<', '>', '~', '@',
+        ':',
+        ';', ',',
+        '='
+        ),
+
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => true,
+        2 => true,
+        3 => true,
+        4 => true
+        ),
+
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #708;',
+            2 => 'color: #219;',
+            3 => 'color: #05a;',
+            4 => 'color: #800;'
+            ),
+        'COMMENTS' => array(
+            0 => 'color: #a50; font-style: italic;',
+            'MULTI' => 'color: #a50; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #000099; font-weight: bold;',
+            1 => 'color: #000099; font-weight: bold;',
+            2 => 'color: #660099; font-weight: bold;',
+            3 => 'color: #660099; font-weight: bold;',
+            4 => 'color: #660099; font-weight: bold;',
+            5 => 'color: #006699; font-weight: bold;',
+            'HARD' => ''
+            ),
+        'STRINGS' => array(
+            0 => 'color: #a11;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #0000dd;',
+            GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+            GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+            GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+            GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+            GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+            ),
+        'BRACKETS' => array(''),
+        'METHODS' => array(
+            1 => 'color: #164;'
+            ),
+        'SYMBOLS' => array(
+            0 => ''
+            ),
+        'REGEXPS' => array(
+            ),
+        'SCRIPT' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => ''
+        ),
+    'OOLANG' => true,
+    'OBJECT_SPLITTERS' => array(
+        1 => '::'
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'TAB_WIDTH' => 4
+);
diff --git a/inc/geshi/sas.php b/vendor/easybook/geshi/geshi/sas.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/sas.php
rename to vendor/easybook/geshi/geshi/sas.php
diff --git a/vendor/easybook/geshi/geshi/sass.php b/vendor/easybook/geshi/geshi/sass.php
new file mode 100644
index 0000000000000000000000000000000000000000..286f4bfab88854cb27e0c98b38e03a6c704a4ea3
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/sass.php
@@ -0,0 +1,248 @@
+<?php
+/*************************************************************************************
+ * sass.php
+ * -------
+ * Author: Javier Eguiluz (javier.eguiluz@gmail.com)
+ * Release Version: 1.0.8.12
+ * Date Started: 2014/05/10
+ *
+ * SASS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2014/05/10 (1.0.0)
+ *   -  First Release
+ *
+ *************************************************************************************
+ *
+ *   This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'Sass',
+    'COMMENT_SINGLE' => array(1 => '//'),
+    'COMMENT_MULTI' => array('/*' => '*/'),
+    'COMMENT_REGEXP' => array(),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array('"', "'"),
+    'ESCAPE_CHAR' => '',
+    'ESCAPE_REGEXP' => array(
+        ),
+    'NUMBERS' =>
+        GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_SCI_ZERO,
+    'KEYWORDS' => array(
+        // properties
+        1 => array(
+            'azimuth', 'background-attachment', 'background-color',
+            'background-image', 'background-position', 'background-repeat',
+            'background', 'border-bottom-color', 'border-radius',
+            'border-top-left-radius', 'border-top-right-radius',
+            'border-bottom-right-radius', 'border-bottom-left-radius',
+            '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', 'box-shadow', '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', 'line-height', 'letter-spacing',
+            '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', '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', 'height',
+            // media queries
+            'screen', 'orientation', 'min-device-width', 'max-device-width',
+            ),
+        // reserved words for values
+        2 => array(
+            // colors
+            'aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime',
+            'maroon', 'navy', 'olive', 'orange', 'purple', 'red', 'silver',
+            'teal', 'white', 'yellow',
+            // media queries
+            'landscape', 'portrait', 
+            // other
+            'above', 'absolute', 'always', 'armenian', 'aural', 'auto',
+            'avoid', 'baseline', 'behind', 'below', 'bidi-override', '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',  'georgian', 'groove', 'hebrew', 'help', 'hidden',
+            'hide', 'higher', 'high', 'hiragana-iroha', 'hiragana', 'icon',
+            'inherit', 'inline-table', 'inline', 'inline-block', 'inset', 'inside',
+            'invert', 'italic', 'justify', 'katakana-iroha', 'katakana', 'landscape',
+            'larger', 'large', 'left-side', 'leftwards', 'level', 'lighter', 
+            'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek',
+            'lower-roman', 'lowercase', 'ltr', 'lower', 'low', 
+            'medium', 'message-box', 'middle', 'mix', 'monospace', 'n-resize',
+            'narrower', 'ne-resize', 'no-close-quote',
+            'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap',
+            'nw-resize', 'oblique', 'once', 'open-quote', 'outset',
+            'outside', 'overline', 'pointer', 'portrait', 'px',
+             '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',  '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',  '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',
+             'wider', 'x-fast', 'x-high', 'x-large', 'x-loud', 'x-low',
+             'x-small', 'x-soft', 'xx-large', 'xx-small', 'yellow', 'yes'
+            ),
+        // directives
+        3 => array(
+            '@at-root', '@charset', '@content', '@debug', '@each', '@else', '@elseif',
+            '@else if', '@extend', '@font-face', '@for', '@function', '@if',
+            '@import', '@include', '@media', '@mixin', '@namespace', '@page',
+            '@return', '@warn', '@while', 
+            ),
+        // built-in Sass functions
+        4 => array(
+            'rgb', 'rgba', 'red', 'green', 'blue', 'mix',
+            'hsl', 'hsla', 'hue', 'saturation', 'lightness', 'adjust-hue',
+            'lighten', 'darken', 'saturate', 'desaturate', 'grayscale',
+            'complement', 'invert',
+            'alpha', 'rgba', 'opacify', 'transparentize',
+            'adjust-color', 'scale-color', 'change-color', 'ie-hex-str',
+            'unquote', 'quote', 'str-length', 'str-insert', 'str-index',
+            'str-slice', 'to-upper-case', 'to-lower-case',
+            'percentage', 'round', 'ceil', 'floor', 'abs', 'min', 'max', 'random',
+            'length', 'nth', 'join', 'append', 'zip', 'index', 'list-separator',
+            'map-get', 'map-merge', 'map-remove', 'map-keys', 'map-values',
+            'map-has-key', 'keywords',
+            'feature-exists', 'variable-exists', 'global-variable-exists',
+            'function-exists', 'mixin-exists', 'inspect', 'type-of', 'unit',
+            'unitless', 'comparable', 'call',
+            'if', 'unique-id',
+            ),
+        // reserved words
+        5 => array(
+            '!important', '!default', '!optional', 'true', 'false', 'with',
+            'without', 'null', 'from', 'through', 'to', 'in', 'and', 'or',
+            'only', 'not',
+            ),
+        ),
+    'SYMBOLS' => array(
+        '(', ')', '{', '}', ':', ';',
+        '>', '+', '*', ',', '^', '=',
+        '&', '~', '!', '%', '?', '...',
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false,
+        5 => false,
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #000000; font-weight: bold;',
+            2 => 'color: #993333;',
+            3 => 'color: #990000;',
+            4 => 'color: #000000; font-weight: bold;',
+            5 => 'color: #009900;',
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #006600; font-style: italic;',
+            'MULTI' => 'color: #006600; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #00AA00;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #ff0000;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #cc66cc;'
+            ),
+        'METHODS' => array(
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #00AA00;'
+            ),
+        'SCRIPT' => array(
+            ),
+        'REGEXPS' => array(
+            0 => 'color: #cc00cc;',
+            1 => 'color: #6666ff;',
+            2 => 'color: #3333ff;',
+            3 => 'color: #933;',
+            4 => 'color: #ff6633;',
+            5 => 'color: #0066ff;',
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => '',
+        5 => '',
+        ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(
+        ),
+    'REGEXPS' => array(
+        // Variables
+        0 => "[$][a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*",
+        // Hexadecimal colors
+        1 => "\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})",
+        // CSS Pseudo classes
+        // note: & is needed for &gt; (i.e. > )
+        2 => "(?<!\\\\):(?!\d)[a-zA-Z0-9\-]+\b(?:\s*(?=[\{\.#a-zA-Z,:+*&](.|\n)|<\|))",
+        // Measurements
+        3 => "[+\-]?(\d+|(\d*\.\d+))(em|ex|pt|px|cm|in|%)",
+        // Interpolation
+        4 => "(\#\{.*\})",
+        // Browser prefixed properties
+        5 => "(\-(moz|ms|o|webkit)\-[a-z\-]*)",
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'TAB_WIDTH' => 2,
+);
diff --git a/inc/geshi/scala.php b/vendor/easybook/geshi/geshi/scala.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/scala.php
rename to vendor/easybook/geshi/geshi/scala.php
diff --git a/inc/geshi/scheme.php b/vendor/easybook/geshi/geshi/scheme.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/scheme.php
rename to vendor/easybook/geshi/geshi/scheme.php
index a84b90809a9dbfe22df126f7fd49bb468026eef3..59870846b3e23b08a7210aa26353b7c12d3d6f65
--- a/inc/geshi/scheme.php
+++ b/vendor/easybook/geshi/geshi/scheme.php
@@ -166,5 +166,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/scilab.php b/vendor/easybook/geshi/geshi/scilab.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/scilab.php
rename to vendor/easybook/geshi/geshi/scilab.php
diff --git a/vendor/easybook/geshi/geshi/scl.php b/vendor/easybook/geshi/geshi/scl.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b0e494f2aca8698a7bed80528fb2e469c7ee1a8
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/scl.php
@@ -0,0 +1,148 @@
+<?php
+/*************************************************************************************
+ * <scl.php>
+ * ---------------------------------
+ * Author: Leonhard Hösch (leonhard.hoesch@siemens.com)
+ * Copyright: (c) 2008 by Leonhard Hösch (siemens.de)
+ * Release Version: 1.0.8.12
+ * Date Started: 2012/09/25
+ *
+ * SCL language file for GeSHi.
+ *
+ * A SCL langauge file.
+ *
+ * CHANGES
+ * -------
+ * <date-of-release> (<GeSHi release>)
+ *  -  First Release
+ *
+ * TODO (updated <date-of-release>)
+ * -------------------------
+ * <things-to-do>
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'SCL',
+    'COMMENT_SINGLE' => array(1 => '//'),
+    'COMMENT_MULTI' => array('(*' => '*)'),
+    'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+    'QUOTEMARKS' => array("'"),
+    'ESCAPE_CHAR' => '$',
+    'KEYWORDS' => array(
+        1 => array(
+            'AND','ANY','ARRAY','AT','BEGIN','BLOCK_DB','BLOCK_FB','BLOCK_FC','BLOCK_SDB',
+            'BLOCK_SFB','BLOCK_SFC','BOOL','BY','BYTE','CASE','CHAR','CONST','CONTINUE','COUNTER',
+            'DATA_BLOCK','DATE','DATE_AND_TIME','DINT','DIV','DO','DT','DWORD','ELSE','ELSIF',
+            'EN','END_CASE','END_CONST','END_DATA_BLOCK','END_FOR','END_FUNCTION',
+            'END_FUNCTION_BLOCK','END_IF','END_LABEL','END_TYPE','END_ORGANIZATION_BLOCK',
+            'END_REPEAT','END_STRUCT','END_VAR','END_WHILE','ENO','EXIT','FALSE','FOR','FUNCTION',
+            'FUNCTION_BLOCK','GOTO','IF','INT','LABEL','MOD','NIL','NOT','OF','OK','OR',
+            'ORGANIZATION_BLOCK','POINTER','PROGRAM','REAL','REPEAT','RETURN','S5TIME','STRING',
+            'STRUCT','THEN','TIME','TIMER','TIME_OF_DAY','TO','TOD','TRUE','TYPE','VAR',
+            'VAR_TEMP','UNTIL','VAR_INPUT','VAR_IN_OUT','VAR_OUTPUT','VOID','WHILE','WORD','XOR'
+            ),
+        2 =>array(
+            'UBLKMOV','FILL','CREAT_DB','DEL_DB','TEST_DB','COMPRESS','REPL_VAL','CREA_DBL','READ_DBL',
+            'WRIT_DBL','CREA_DB','RE_TRIGR','STP','WAIT','MP_ALM','CiR','PROTECT','SET_CLK','READ_CLK',
+            'SNC_RTCB','SET_CLKS','RTM','SET_RTM','CTRL_RTM','READ_RTM','TIME_TCK','RD_DPARM',
+            'RD_DPARA','WR_PARM','WR_DPARM','PARM_MOD','WR_REC','RD_REC','RD_DPAR','RDREC','WRREC','RALRM',
+            'SALRM','RCVREC','PRVREC','SET_TINT','CAN_TINT','ACT_TINT','QRY_TINT','SRT_DINT','QRY_DINT',
+            'CAN_DINT','MSK_FLT','DMSK_FLT','READ_ERR','DIS_IRT','EN_IRT','DIS_AIRT','EN_AIRT','RD_SINFO',
+            'RDSYSST','WR_USMSG','OB_RT','C_DIAG','DP_TOPOL','UPDAT_PI','UPDAT_PO','SYNC_PI','SYNC_PO',
+            'SET','RSET','DRUM','GADR_LGC','LGC_GADR','RD_LGADR','GEO_LOG','LOG_GEO','DP_PRAL','DPSYC_FR',
+            'D_ACT_DP','DPNRM_DG','DPRD_DAT','DPWR_DAT','PN_IN','PN_OUT','PN_DP','WWW','IP_CONF','GETIO',
+            'SETIO','GETIO_PART','SETIO_PART','GD_SND','GD_RCV','USEND','URCV','BSEND','BRCV','PUT','GET',
+            'PRINT','START','STOP','RESUME','STATUS','USTATUS','CONTROL','C_CNTRL','X_SEND','X_RCV',
+            'X_GET','X_PUT','X_ABORT','I_GET','I_PUT','I_ABORT','TCON','TDISCON','TSEND','TRCV','TUSEND',
+            'TURCV','NOTIFY','NOTIFY_8P','ALARM','ALARM_8P','ALARM_8','AR_SEND','DIS_MSG','EN_MSG',
+            'ALARM_SQ','ALARM_S','ALARM_SC','ALARM_DQ','LARM_D','READ_SI','DEL_SI','TP','TON','TOF','CTU',
+            'CTD','CTUD','CONT_C','CONT_S','PULSEGEN','Analog','DIGITAL','COUNT','FREQUENC','PULSE',
+            'SEND_PTP','RECV_PTP','RES_RECV','SEND_RK','FETCH_RK','SERVE_RK','H_CTRL','state'
+            ),
+        ),
+    'SYMBOLS' => array(
+        '.', '"', '|', ';', ',', '=>', '>=', '<=', ':=', '=', '<', '>'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #0000ff;',
+            2 => 'color: #ff6f00;',
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #009600; font-style: italic;',
+            'MULTI' => 'color: #009600; font-style: italic;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #000099; font-weight: bold;'
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #66cc66;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #ff0000;'
+            ),
+        'NUMBERS' => array(
+            0 => 'color: #cc66cc;'
+            ),
+        'METHODS' => array(
+            0 => 'color: #006600;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #66cc66;'
+            ),
+        'REGEXPS' => array(
+            ),
+        'SCRIPT' => array(
+            0 => '',
+            1 => '',
+            2 => '',
+            3 => ''
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => ''
+        ),
+    'NUMBERS' => GESHI_NUMBER_INT_BASIC,
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(
+        1 => '',
+        2 => ''
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        0 => array(
+            '<?php11!!' => '!!11?>'
+            ),
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        0 => false,
+        ),
+    'TAB_WIDTH' => 4
+);
diff --git a/inc/geshi/sdlbasic.php b/vendor/easybook/geshi/geshi/sdlbasic.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/sdlbasic.php
rename to vendor/easybook/geshi/geshi/sdlbasic.php
index 381161fdf64746af1a15d417631b8490085d3add..b95003fccd95beb1db2537519188907dea9734ac
--- a/inc/geshi/sdlbasic.php
+++ b/vendor/easybook/geshi/geshi/sdlbasic.php
@@ -161,5 +161,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/smalltalk.php b/vendor/easybook/geshi/geshi/smalltalk.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/smalltalk.php
rename to vendor/easybook/geshi/geshi/smalltalk.php
diff --git a/inc/geshi/smarty.php b/vendor/easybook/geshi/geshi/smarty.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/smarty.php
rename to vendor/easybook/geshi/geshi/smarty.php
index 86e9d44c0155ffd96e8ddf11386bfaa7904fae26..883b3eb7c94296d087176d3b9fb091d7a0f0b4fd
--- a/inc/geshi/smarty.php
+++ b/vendor/easybook/geshi/geshi/smarty.php
@@ -188,5 +188,3 @@ $language_data = array (
         )
     )
 );
-
-?>
diff --git a/inc/geshi/spark.php b/vendor/easybook/geshi/geshi/spark.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/spark.php
rename to vendor/easybook/geshi/geshi/spark.php
diff --git a/inc/geshi/sparql.php b/vendor/easybook/geshi/geshi/sparql.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/sparql.php
rename to vendor/easybook/geshi/geshi/sparql.php
diff --git a/inc/geshi/sql.php b/vendor/easybook/geshi/geshi/sql.php
old mode 100644
new mode 100755
similarity index 97%
rename from inc/geshi/sql.php
rename to vendor/easybook/geshi/geshi/sql.php
index 4d08a51fe1de61f578b23189f82c6b71018c58ee..f4d130eb94ef0506f5d7f7b139383121321c779b
--- a/inc/geshi/sql.php
+++ b/vendor/easybook/geshi/geshi/sql.php
@@ -159,6 +159,11 @@ $language_data = array (
     'SCRIPT_DELIMITERS' => array(
         ),
     'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'PARSER_CONTROL' => array(
+        'KEYWORDS' => array( //'
+            'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\.\|\#|^&])"
+            )
         )
 );
 
diff --git a/inc/geshi/stonescript.php b/vendor/easybook/geshi/geshi/stonescript.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/stonescript.php
rename to vendor/easybook/geshi/geshi/stonescript.php
diff --git a/inc/geshi/systemverilog.php b/vendor/easybook/geshi/geshi/systemverilog.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/systemverilog.php
rename to vendor/easybook/geshi/geshi/systemverilog.php
diff --git a/inc/geshi/tcl.php b/vendor/easybook/geshi/geshi/tcl.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/tcl.php
rename to vendor/easybook/geshi/geshi/tcl.php
diff --git a/inc/geshi/teraterm.php b/vendor/easybook/geshi/geshi/teraterm.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/teraterm.php
rename to vendor/easybook/geshi/geshi/teraterm.php
diff --git a/inc/geshi/text.php b/vendor/easybook/geshi/geshi/text.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/text.php
rename to vendor/easybook/geshi/geshi/text.php
index 87fb7110c2b739b30e3b0097b2e1742e4e333498..3c7f17c62da306085102cebd511cdc0ad0430828
--- a/inc/geshi/text.php
+++ b/vendor/easybook/geshi/geshi/text.php
@@ -80,5 +80,3 @@ $language_data = array (
         ),
     )
 );
-
-?>
diff --git a/inc/geshi/thinbasic.php b/vendor/easybook/geshi/geshi/thinbasic.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/thinbasic.php
rename to vendor/easybook/geshi/geshi/thinbasic.php
index f54959e16abf0069d99fa004266e14b45a25d393..3d2034921ff65f0199b6dad630192cda5b24424f
--- a/inc/geshi/thinbasic.php
+++ b/vendor/easybook/geshi/geshi/thinbasic.php
@@ -864,5 +864,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/tsql.php b/vendor/easybook/geshi/geshi/tsql.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/tsql.php
rename to vendor/easybook/geshi/geshi/tsql.php
diff --git a/vendor/easybook/geshi/geshi/twig.php b/vendor/easybook/geshi/geshi/twig.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc790532c1c51547cb878fac001b6ae50404660a
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/twig.php
@@ -0,0 +1,190 @@
+<?php
+/*************************************************************************************
+ * twig.php
+ * ----------
+ * Author: Keyvan Akbary (keyvan@kiwwito.com)
+ * Copyright: (c) 2011 Keyvan Akbary (http://www.kiwwito.com/)
+ * Release Version: 1.0.0
+ * Date Started: 2011/12/05
+ *
+ * Twig template language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2012/09/28 (1.9.0 by José Andrés Puertas y Javier Eguiluz)
+ *   - Added new tags, filters and functions
+ *   - Added regexps for variables, objects and properties
+ *   - Lots of other minor tweaks (delimites, comments, ...)
+ * 
+ * 2011/12/05 (1.0.0 by Keyvan Akbary)
+ *   -  Initial Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ *   This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+    'LANG_NAME' => 'Twig',
+    'COMMENT_SINGLE' => array('{#' => '#}'),
+    'COMMENT_MULTI' => array('{#' => '#}'),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array("'", '"'),
+    'ESCAPE_CHAR' => '',
+    'KEYWORDS' => array(
+        //TWIG
+        //Tags
+        1 => array(
+            'autoescape', 'endautoescape', 'block', 'endblock', 'do', 'embed', 'endembed',
+            'extends', 'filter', 'endfilter', 'for', 'endfor', 'from', 'if', 'else', 'elseif', 'endif',
+            'import', 'include', 'macro', 'endmacro', 'raw', 'endraw', 'sandbox', 'set', 'endset',
+            'spaceless', 'endspaceless', 'use', 'verbatim', 'endverbatim',
+            'trans', 'endtrans', 'transchoice', 'endtranschoice'
+        ),
+        //Filters
+        2 => array(
+            'abs', 'batch', 'capitalize', 'convert_encoding', 'date', 'date_modify', 'default',
+            'escape', 'first', 'format', 'join', 'json_encode', 'keys', 'last', 'length', 'lower',
+            'merge', 'nl2br', 'number_format', 'raw', 'replace', 'reverse', 'slice', 'sort', 'split',
+            'striptags', 'title', 'trans', 'trim', 'upper', 'url_encode'
+        ),
+        //Functions
+        3 => array(
+            'attribute', 'block', 'constant', 'cycle', 'date', 'dump', 'include',
+            'parent', 'random', 'range', 'source', 'template_from_string'
+        ),
+        //Tests
+        4 => array(
+            'constant', 'defined', 'divisibleby', 'empty', 'even', 'iterable', 'null',
+            'odd', 'sameas'
+        ),
+        //Operators
+        5 => array(
+            'in', 'is', 'and', 'b-and', 'or', 'b-or', 'b-xor', 'not', 'into',
+            'starts with', 'ends with', 'matches'
+        ),
+        6 => array(
+            '{{', '}}', '{%', '%}'
+        ),
+    ),
+    'SYMBOLS' => array(
+        '+', '-', '/', '/', '*', '**', //Math operators
+        '==', '!=', '<', '>', '>=', '<=', '===', //Logic operators
+        '..', '|', '~', '[', ']', '.', '?', ':', '(', ')', //Other
+        '=' //HTML (attributes)
+    ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        //Twig
+        1 => true,
+        2 => true,
+        3 => true,
+        4 => true,
+        5 => true,
+        6 => false
+    ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #0600FF;', //Tags
+            2 => 'color: #008000;', //Filters
+            3 => 'color: #0600FF;', //Functions
+            4 => 'color: #804040;', //Tests
+            5 => 'color: #008000;', //Operators
+            6 => 'color: #008000;'  // {{ and {%
+        ),
+        'COMMENTS' => array(
+            'MULTI' => 'color: #008080; font-style: italic;'
+        ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #000099; font-weight: bold;'
+        ),
+        'BRACKETS' => array(
+            0 => 'color: #D36900;'
+        ),
+        'STRINGS' => array(
+            0 => 'color: #ff0000;'
+        ),
+        'NUMBERS' => array(
+            0 => 'color: #cc66cc;'
+        ),
+        'METHODS' => array(
+            1 => 'color: #006600;'
+        ),
+        'SYMBOLS' => array(
+            0 => 'color: #D36900;'
+        ),
+        'SCRIPT' => array(
+            0 => '',
+            1 => 'color: #808080; font-style: italic;',
+            2 => 'color: #009000;'
+        ),
+        'REGEXPS' => array(
+            0 => 'color: #00aaff;',
+            1 => 'color: #00aaff;'
+        )
+    ),
+    'URLS' => array(
+        1 => 'http://twig.sensiolabs.org/doc/tags/{FNAMEL}.html',
+        2 => 'http://twig.sensiolabs.org/doc/filters/{FNAMEL}.html',
+        3 => 'http://twig.sensiolabs.org/doc/functions/{FNAMEL}.html',
+        4 => 'http://twig.sensiolabs.org/doc/tests/{FNAMEL}.html',
+        5 => '',
+    ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(
+        1 => '.',
+        ),
+    'REGEXPS' => array(
+        0 => array(
+            GESHI_SEARCH => "([[:space:]])([a-zA-Z_][a-zA-Z0-9_]*)",
+            GESHI_REPLACE => '\\2',
+            GESHI_MODIFIERS => '',
+            GESHI_BEFORE => '\\1',
+            GESHI_AFTER => ''
+            ),
+        1 => array(
+            GESHI_SEARCH => "\.([a-zA-Z_][a-zA-Z0-9_]*)",
+            GESHI_REPLACE => '.\\1',
+            GESHI_MODIFIERS => '',
+            GESHI_BEFORE => '',
+            GESHI_AFTER => ''
+            ),
+    ),
+    'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+    'SCRIPT_DELIMITERS' => array(
+        0 => array(
+            '{{' => '}}',
+            '{%' => '%}'         
+        ),
+        1 => array(
+            '{#' => '#}',          
+        )
+    ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        0 => true,
+        1 => true,
+        2 => true
+    ),
+    'PARSER_CONTROL' => array(
+        'KEYWORDS' => array(
+        )
+    )
+);
diff --git a/inc/geshi/typoscript.php b/vendor/easybook/geshi/geshi/typoscript.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/typoscript.php
rename to vendor/easybook/geshi/geshi/typoscript.php
index 6751aaa8da39e30a98c51ebd13ba5d869dbbd883..25671d7288630c092b6de5922e5ca5a79a2968e7
--- a/inc/geshi/typoscript.php
+++ b/vendor/easybook/geshi/geshi/typoscript.php
@@ -296,5 +296,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         ),
 );
-
-?>
diff --git a/inc/geshi/unicon.php b/vendor/easybook/geshi/geshi/unicon.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/unicon.php
rename to vendor/easybook/geshi/geshi/unicon.php
diff --git a/inc/geshi/upc.php b/vendor/easybook/geshi/geshi/upc.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/upc.php
rename to vendor/easybook/geshi/geshi/upc.php
diff --git a/inc/geshi/urbi.php b/vendor/easybook/geshi/geshi/urbi.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/urbi.php
rename to vendor/easybook/geshi/geshi/urbi.php
index a7353ea8bba93c5dbab0a23f171d03a28b08ffe0..c73e44404f0ec9aa32ff2ab1f070756f3255f154
--- a/inc/geshi/urbi.php
+++ b/vendor/easybook/geshi/geshi/urbi.php
@@ -196,5 +196,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4,
 );
-
-?>
diff --git a/inc/geshi/uscript.php b/vendor/easybook/geshi/geshi/uscript.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/uscript.php
rename to vendor/easybook/geshi/geshi/uscript.php
index 58cdb8d9e51e0000071d0f0050cb8d49065eb255..03b1d48a6f1e488cf33e050916809837b8cc4c11
--- a/inc/geshi/uscript.php
+++ b/vendor/easybook/geshi/geshi/uscript.php
@@ -295,5 +295,3 @@ $language_data = array (
             )
         )
 );
-
-?>
diff --git a/inc/geshi/vala.php b/vendor/easybook/geshi/geshi/vala.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/vala.php
rename to vendor/easybook/geshi/geshi/vala.php
index acac57e2aef4b69b435f092a534267b44acdd25a..28f153427077b661b7484496c9b56cb57277f11b
--- a/inc/geshi/vala.php
+++ b/vendor/easybook/geshi/geshi/vala.php
@@ -147,5 +147,3 @@ $language_data = array (
         )
     )
 );
-
-?>
diff --git a/inc/geshi/vb.php b/vendor/easybook/geshi/geshi/vb.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/vb.php
rename to vendor/easybook/geshi/geshi/vb.php
diff --git a/inc/geshi/vbnet.php b/vendor/easybook/geshi/geshi/vbnet.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/vbnet.php
rename to vendor/easybook/geshi/geshi/vbnet.php
diff --git a/vendor/easybook/geshi/geshi/vbscript.php b/vendor/easybook/geshi/geshi/vbscript.php
new file mode 100644
index 0000000000000000000000000000000000000000..6db3bbd3f331f18203ab18fcedf5e4ffcd67c936
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/vbscript.php
@@ -0,0 +1,153 @@
+<?php
+/*************************************************************************************
+ * vbscript.php
+ * ------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org),
+ *                     Nigel McNie (http://qbnz.com/highlighter),
+ *                     Rory Prendergast (http://www.tanium.com)
+ * Release Version: 1.0.8.12
+ * Date Started: 2012/08/20
+ *
+ * VBScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2012/08/20 (1.0.0)
+ *  -  First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'VBScript',
+    'COMMENT_SINGLE' => array(),
+    'COMMENT_MULTI' => array(),
+    'COMMENT_REGEXP' => array(
+        // Comments (either single or multiline with _
+        1 => '/\'.*(?<! _)\n/sU',
+        ),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array('"'),
+    'ESCAPE_CHAR' => '',
+    'KEYWORDS' => array(
+        1 => array(
+            'Empty', 'Nothing', 'Null', 'vbArray', 'vbBoolean', 'vbByte',
+            'vbCr', 'vbCrLf', 'vbCurrency', 'vbDate', 'vbDouble', 'vbEmpty',
+            'vbError', 'vbFirstFourDays', 'vbFirstFullWeek', 'vbFirstJan1',
+            'vbFormFeed', 'vbFriday', 'vbInteger', 'vbLf', 'vbLong', 'vbMonday',
+            'vbNewLine', 'vbNull', 'vbNullChar', 'vbNullString', 'vbObject',
+            'vbSaturday', 'vbSingle', 'vbString', 'vbSunday', 'vbTab',
+            'vbThursday', 'vbTuesday', 'vbUseSystem', 'vbUseSystemDayOfWeek',
+            'vbVariant', 'vbWednesday', 'FALSE', 'TRUE'
+            ),
+        2 => array(
+            'bs', 'Array', 'Asc', 'Atn', 'CBool', 'CByte', 'CDate', 'CDbl', 'Chr',
+            'CInt', 'CLng', 'Cos', 'CreateObject', 'CSng', 'CStr', 'Date', 'DateAdd',
+            'DateDiff', 'DatePart', 'DateSerial', 'DateValue', 'Day', 'Eval', 'Exp',
+            'Filter', 'Fix', 'FormatDateTime', 'FormatNumber', 'FormatPercent',
+            'GetObject', 'Hex', 'Hour', 'InputBox', 'InStr', 'InstrRev', 'Int',
+            'IsArray', 'IsDate', 'IsEmpty', 'IsNull', 'IsNumeric', 'IsObject', 'Join',
+            'LBound', 'LCase', 'Left', 'Len', 'Log', 'LTrim', 'Mid', 'Minute', 'Month',
+            'MonthName', 'MsgBox', 'Now', 'Oct', 'Replace', 'RGB', 'Right', 'Rnd',
+            'Round', 'RTrim', 'ScriptEngine', 'ScriptEngineBuildVersion',
+            'ScriptEngineMajorVersion', 'ScriptEngineMinorVersion', 'Second',
+            'Sgn', 'Sin', 'Space', 'Split', 'Sqr', 'StrComp', 'String', 'StrReverse',
+            'Tan', 'Time', 'TimeSerial', 'TimeValue', 'Trim', 'TypeName', 'UBound',
+            'UCase', 'VarType', 'Weekday', 'WeekdayName', 'Year'
+            ),
+        3 => array(
+            'Call', 'Case', 'Const', 'Dim', 'Do', 'Each', 'Else', 'End', 'Erase',
+            'Execute', 'Exit', 'For', 'Function', 'Gosub', 'Goto', 'If', 'Loop',
+            'Next', 'On Error', 'Option Explicit', 'Private', 'Public',
+            'Randomize', 'ReDim', 'Rem', 'Resume', 'Select', 'Set', 'Sub', 'Then',
+            'Wend', 'While', 'With', 'In', 'To', 'Step'
+            ),
+        4 => array(
+            'And', 'Eqv', 'Imp', 'Is', 'Mod', 'Not', 'Or', 'Xor'
+            ),
+        ),
+    'SYMBOLS' => array(
+        '-', '&', '*', '/', '\\', '^', '+', '<', '<=', '<>', '=', '>', '>='
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false,
+        4 => false
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #F660AB; font-weight: bold;',
+            2 => 'color: #E56717; font-weight: bold;',
+            3 => 'color: #8D38C9; font-weight: bold;',
+            4 => 'color: #151B8D; font-weight: bold;'
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #008000;'
+            ),
+        'BRACKETS' => array(
+            ),
+        'STRINGS' => array(
+            0 => 'color: #800000;'
+            ),
+        'NUMBERS' => array(
+            ),
+        'METHODS' => array(
+            ),
+        'SYMBOLS' => array(
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #800000; font-weight: bold;'
+            ),
+        'SCRIPT' => array(
+            ),
+        'REGEXPS' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => '',
+        2 => '',
+        3 => '',
+        4 => ''
+        ),
+    'OOLANG' => false,
+    'OBJECT_SPLITTERS' => array(
+        ),
+    'REGEXPS' => array(
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        ),
+    'PARSER_CONTROL' => array(
+        'KEYWORDS' => array(
+            'SPACE_AS_WHITESPACE' => true
+            ),
+        'ENABLE_FLAGS' => array(
+            'BRACKETS' => GESHI_NEVER
+            )
+        )
+);
diff --git a/inc/geshi/vedit.php b/vendor/easybook/geshi/geshi/vedit.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/vedit.php
rename to vendor/easybook/geshi/geshi/vedit.php
diff --git a/inc/geshi/verilog.php b/vendor/easybook/geshi/geshi/verilog.php
old mode 100644
new mode 100755
similarity index 61%
rename from inc/geshi/verilog.php
rename to vendor/easybook/geshi/geshi/verilog.php
index 2bf66d1c0034c66cd66dd666e87bf7fb1e8830c5..d6ec08615860a8b9e501222a47a2fb9dc6e54481
--- a/inc/geshi/verilog.php
+++ b/vendor/easybook/geshi/geshi/verilog.php
@@ -2,8 +2,8 @@
 /**
  * verilog.php
  * -----------
- * Author: G�nter Dannoritzer <dannoritzer@web.de>
- * Copyright: (C) 2008 Guenter Dannoritzer
+ * Author: Günter Dannoritzer <dannoritzer@web.de>
+ * Copyright: (C) 2008 Günter Dannoritzer
  * Release Version: 1.0.8.11
  * Date Started: 2008/05/28
  *
@@ -19,6 +19,9 @@
  * TODO (updated 2008/05/29)
  * -------------------------
  *
+ * 2013/01/08
+ *   -  extended keywords to include system keywords
+ *
  *************************************************************************************
  *
  *     This file is part of GeSHi.
@@ -49,22 +52,41 @@ $language_data = array (
     'ESCAPE_CHAR' => '\\',
     'KEYWORDS' => array(
         // keywords
-        1 => array('always', 'and', 'assign', 'begin', 'buf', 'bufif0', 'bufif1', 'case',
-            'casex', 'casez', 'cmos', 'deassign', 'default', 'defparam',
-            'disable', 'edge', 'else', 'end', 'endcase', 'endfunction',
-            'endmodule', 'endprimitive', 'endspecify', 'endtable', 'endtask',
-            'event', 'fork', 'for', 'force', 'forever', 'function', 'highz0',
-            'highz1', 'if', 'ifnone', 'initial', 'inout', 'input', 'integer',
-            'join', 'large', 'macromodule', 'medium', 'module', 'nand',
-            'negedge', 'nmos', 'nor', 'not', 'notif0', 'notif1', 'or',
-            'output', 'parameter', 'pmos', 'posedge', 'primitive', 'pull0',
-            'pull1', 'pulldown', 'pullup', 'rcmos', 'real', 'realtime', 'reg',
-            'release', 'repeat', 'rnmos', 'rpmos', 'rtran', 'rtranif0',
-            'rtranif1', 'scalared', 'small', 'specify', 'specparam',
-            'strong0', 'strong1', 'supply0', 'supply1', 'table', 'task',
-            'time', 'tran', 'tranif0', 'tranif1', 'tri', 'tri0', 'tri1',
-            'triand', 'trior', 'trireg', 'vectored', 'wait', 'wand', 'weak0',
-            'weak1', 'while', 'wire', 'wor', 'xnor', 'xor'
+        1 => array(
+            'accept_on','alias',
+            'always','always_comb','always_ff','always_latch','and','assert',
+            'assign','assume','automatic','before','begin','bind','bins','binsof',
+            'bit','break','buf','bufif0','bufif1','byte','case','casex','casez',
+            'cell','chandle','checker','class','clocking','cmos','config','const',
+            'constraint','context','continue','cover','covergroup','coverpoint','cross',
+            'deassign','default','defparam','design','disable','dist','do','edge','else',
+            'end','endcase','endchecker','endclass','endclocking','endconfig',
+            'endfunction','endgenerate','endgroup','endinterface','endmodule',
+            'endpackage','endprimitive','endprogram','endproperty','endspecify',
+            'endsequence','endtable','endtask','enum','event','eventually','expect',
+            'export','extends','extern','final','first_match','for','force','foreach',
+            'forever','fork','forkjoin','function','generate','genvar','global',
+            'highz0','highz1','if','iff','ifnone','ignore_bins','illegal_bins',
+            'implies','import','incdir','include','initial','inout','input','inside',
+            'instance','int','integer','interface','intersect','join','join_any',
+            'join_none','large','let','liblist','library','local','localparam',
+            'logic','longint','macromodule','matches','medium','modport','module','nand',
+            'negedge','new','nexttime','nmos','nor','noshowcancelled','not','notif0',
+            'notif1','null','or','output','package','packed','parameter','pmos','posedge',
+            'primitive','priority','program','property','protected','pull0','pull1',
+            'pulldown','pullup','pulsestyle_ondetect','pulsestyle_onevent','pure',
+            'rand','randc','randcase','randsequence','rcmos','real','realtime','ref',
+            'reg','reject_on','release','repeat','restrict','return','rnmos','rpmos',
+            'rtran','rtranif0','rtranif1','s_always','s_eventually','s_nexttime',
+            's_until','s_until_with','scalared','sequence','shortint','shortreal',
+            'showcancelled','signed','small','solve','specify','specparam','static',
+            'string','strong','strong0','strong1','struct','super','supply0','supply1',
+            'sync_accept_on','sync_reject_on','table','tagged','task','this','throughout',
+            'time','timeprecision','timeunit','tran','tranif0','tranif1','tri','tri0',
+            'tri1','triand','trior','trireg','type','typedef','union','unique','unique0',
+            'unsigned','until','until_with','untyped','use','uwire','var','vectored',
+            'virtual','void','wait','wait_order','wand','weak','weak0','weak1','while',
+            'wildcard','wire','with','within','wor','xnor','xor'
             ),
         // system tasks
         2 => array(
@@ -169,5 +191,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/vhdl.php b/vendor/easybook/geshi/geshi/vhdl.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/vhdl.php
rename to vendor/easybook/geshi/geshi/vhdl.php
index a8f37e67664f8834d52a08df5f061a504b29c04e..cc8158fcf97d9244ed96485bea4f684516a7c168
--- a/inc/geshi/vhdl.php
+++ b/vendor/easybook/geshi/geshi/vhdl.php
@@ -179,5 +179,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/vim.php b/vendor/easybook/geshi/geshi/vim.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/vim.php
rename to vendor/easybook/geshi/geshi/vim.php
index fe7e5e006df0306fb637c717421b2fa2a7f8bb48..e2e363477bc7870beef20a6d94c397626aa69d72
--- a/inc/geshi/vim.php
+++ b/vendor/easybook/geshi/geshi/vim.php
@@ -416,5 +416,3 @@ $language_data = array(
     'SCRIPT_DELIMITERS' => array(),
     'HIGHLIGHT_STRICT_BLOCK' => array()
 );
-
-?>
diff --git a/inc/geshi/visualfoxpro.php b/vendor/easybook/geshi/geshi/visualfoxpro.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/visualfoxpro.php
rename to vendor/easybook/geshi/geshi/visualfoxpro.php
diff --git a/inc/geshi/visualprolog.php b/vendor/easybook/geshi/geshi/visualprolog.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/visualprolog.php
rename to vendor/easybook/geshi/geshi/visualprolog.php
index d36f1c67ad8dfaae08b4bb0a85c609e59b02b7b5..26c438d21d8135bf01a2b3159301272955f244cd
--- a/inc/geshi/visualprolog.php
+++ b/vendor/easybook/geshi/geshi/visualprolog.php
@@ -125,5 +125,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/whitespace.php b/vendor/easybook/geshi/geshi/whitespace.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/whitespace.php
rename to vendor/easybook/geshi/geshi/whitespace.php
index 58f39637639323c06ee3659708ddd57e89a84d7c..eec0be3f675e4b18ef1af4eee712135040322fd5
--- a/inc/geshi/whitespace.php
+++ b/vendor/easybook/geshi/geshi/whitespace.php
@@ -117,5 +117,3 @@ $language_data = array (
             )
         )
 );
-
-?>
diff --git a/inc/geshi/whois.php b/vendor/easybook/geshi/geshi/whois.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/whois.php
rename to vendor/easybook/geshi/geshi/whois.php
diff --git a/inc/geshi/winbatch.php b/vendor/easybook/geshi/geshi/winbatch.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/winbatch.php
rename to vendor/easybook/geshi/geshi/winbatch.php
diff --git a/inc/geshi/xbasic.php b/vendor/easybook/geshi/geshi/xbasic.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/xbasic.php
rename to vendor/easybook/geshi/geshi/xbasic.php
diff --git a/inc/geshi/xml.php b/vendor/easybook/geshi/geshi/xml.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/xml.php
rename to vendor/easybook/geshi/geshi/xml.php
index 6354e457ba535d81fb30bab7515e94ec3b8635aa..88d17901e8e3192cc5b71aefe16222c6158e0f53
--- a/inc/geshi/xml.php
+++ b/vendor/easybook/geshi/geshi/xml.php
@@ -153,5 +153,3 @@ $language_data = array (
         )
     )
 );
-
-?>
diff --git a/vendor/easybook/geshi/geshi/xojo.php b/vendor/easybook/geshi/geshi/xojo.php
new file mode 100644
index 0000000000000000000000000000000000000000..58fcab1031f1801252f25f2198a857f45f65c42e
--- /dev/null
+++ b/vendor/easybook/geshi/geshi/xojo.php
@@ -0,0 +1,166 @@
+<?php
+/*************************************************************************************
+ * xojo.php
+ * --------
+ * Author: Dr Garry Pettet (contact@garrypettet.com)
+ * Copyright: (c) 2014 Dr Garry Pettet (http://garrypettet.com)
+ * Release Version: 1.0.0
+ * Date Started: 2014/10/19
+ *
+ * Xojo language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2014/10/19 (1.0.8.12)
+ *  -  First Release
+ *
+ * TODO (updated 2014/10/19)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ *     This file is part of GeSHi.
+ *
+ *   GeSHi 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.
+ *
+ *   GeSHi 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 GeSHi; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+    'LANG_NAME' => 'Xojo',
+    'COMMENT_SINGLE' => array(1 => "'", 2 => '//', 3 => 'rem'),
+    'COMMENT_MULTI' => array(),
+    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+    'QUOTEMARKS' => array('"'),
+    'ESCAPE_CHAR' => '',
+	'NUMBERS' => array(
+	        1 => GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE, // integers
+	        2 => GESHI_NUMBER_FLT_NONSCI // floating point numbers
+	        ),    
+    'KEYWORDS' => array(
+        //Keywords
+        1 => array(
+	        'AddHandler', 'AddressOf', 'Aggregates', 'And', 'Array', 'As', 'Assigns', 'Attributes', 
+	        'Break', 'ByRef', 'ByVal', 'Call', 'Case', 'Catch', 'Class', 'Const', 'Continue',
+	        'CType', 'Declare', 'Delegate', 'Dim', 'Do', 'DownTo', 'Each', 'Else', 'Elseif', 'End', 
+	        'Enum', 'Event', 'Exception', 'Exit', 'Extends', 'False', 'Finally', 'For', 
+	        'Function', 'Global', 'GoTo', 'Handles', 'If', 'Implements', 'In', 'Inherits', 
+	        'Inline68K', 'Interface', 'Is', 'IsA', 'Lib', 'Loop', 'Me', 'Mod', 'Module', 
+	        'Namespace', 'New', 'Next', 'Nil', 'Not', 'Object', 'Of', 'Optional', 'Or', 
+	        'ParamArray', 'Private', 'Property', 'Protected', 'Public', 'Raise', 
+	        'RaiseEvent', 'Rect', 'Redim', 'RemoveHandler', 'Return', 'Select', 'Self', 'Shared', 
+	        'Soft', 'Static', 'Step', 'Sub', 'Super', 'Then', 'To', 'True', 'Try',
+	        'Until', 'Using', 'Wend', 'While', 'With', 'WeakAddressOf', 'Xor'
+            ),
+        //Data Types
+        2 => array(
+            'Boolean', 'CFStringRef', 'CString', 'Currency', 'Double', 'Int8', 'Int16', 'Int32',
+            'Int64', 'Integer', 'OSType', 'PString', 'Ptr', 'Short', 'Single', 'String', 
+            'Structure', 'UInt8', 'UInt16', 'UInt32', 'UInt64', 'UShort', 'WindowPtr', 
+            'WString', 'XMLNodeType'
+            ),
+        //Compiler Directives
+        3 => array(
+            '#Bad', '#Else', '#Endif', '#If', '#Pragma', '#Tag'
+            ),
+        ),
+    'SYMBOLS' => array(
+        '+', '-', '*', '=', '/', '>', '<', '^', '(', ')', '.'
+        ),
+    'CASE_SENSITIVE' => array(
+        GESHI_COMMENTS => false,
+        1 => false,
+        2 => false,
+        3 => false
+        ),
+    'STYLES' => array(
+        'KEYWORDS' => array(
+            1 => 'color: #0000FF;',  // keywords
+            2 => 'color: #0000FF;',  // primitive data types
+            3 => 'color: #0000FF;',  // compiler commands
+            ),
+        'COMMENTS' => array(
+            1 => 'color: #7F0000;',
+            'MULTI' => 'color: #7F0000;'
+            ),
+        'ESCAPE_CHAR' => array(
+            0 => 'color: #008080;'
+            ),
+        'BRACKETS' => array(
+            0 => 'color: #000000;'
+            ),
+        'STRINGS' => array(
+            0 => 'color: #6500FE;'
+            ),
+        'NUMBERS' => array(
+            1 => 'color: #326598;', // integers
+            2 => 'color: #006532;', // floating point numbers
+            ),
+        'METHODS' => array(
+            1 => 'color: #000000;'
+            ),
+        'SYMBOLS' => array(
+            0 => 'color: #000000;'
+            ),
+        'REGEXPS' => array(
+	        1 => 'color: #326598;', // &h hex numbers
+	        2 => 'color: #326598;', // &b hex numbers
+	        3 => 'color: #326598;', // &o hex numbers
+            ),
+        'SCRIPT' => array(
+            )
+        ),
+    'URLS' => array(
+        1 => 'http://docs.xojo.com/index.php/{FNAMEU}',
+        2 => 'http://docs.xojo.com/index.php/{FNAMEU}',
+        3 => ''
+        ),
+    'OOLANG' => true,
+    'OBJECT_SPLITTERS' => array(
+        1 =>'.'
+        ),
+    'REGEXPS' => array(
+		1 => array( // &h numbers
+		    // search for &h, then any number of letters a-f or numbers 0-9
+		    GESHI_SEARCH => '(&amp;h[0-9a-fA-F]*\b)',
+		    GESHI_REPLACE => '\\1',
+		    GESHI_MODIFIERS => '',
+		    GESHI_BEFORE => '',
+		    GESHI_AFTER => ''
+		    ),
+		2 => array( // &b numbers
+		    // search for &b, then any number of 0-1 digits
+		    GESHI_SEARCH => '(&amp;b[0-1]*\b)',
+		    GESHI_REPLACE => '\\1',
+		    GESHI_MODIFIERS => '',
+		    GESHI_BEFORE => '',
+		    GESHI_AFTER => ''
+		    ),
+		3 => array( // &o octal numbers
+		    // search for &o, then any number of 0-7 digits
+		    GESHI_SEARCH => '(&amp;o[0-7]*\b)',
+		    GESHI_REPLACE => '\\1',
+		    GESHI_MODIFIERS => '',
+		    GESHI_BEFORE => '',
+		    GESHI_AFTER => ''
+		    )
+        ),
+    'STRICT_MODE_APPLIES' => GESHI_NEVER,
+    'SCRIPT_DELIMITERS' => array(
+        ),
+    'HIGHLIGHT_STRICT_BLOCK' => array(
+        )
+);
+
+?>
\ No newline at end of file
diff --git a/inc/geshi/xorg_conf.php b/vendor/easybook/geshi/geshi/xorg_conf.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/xorg_conf.php
rename to vendor/easybook/geshi/geshi/xorg_conf.php
index 99edc66523e2ca7dbc6a195d7a2c66d5ecc63c21..41e4496eeb8217441789952b7719a958efb750dd
--- a/inc/geshi/xorg_conf.php
+++ b/vendor/easybook/geshi/geshi/xorg_conf.php
@@ -120,5 +120,3 @@ $language_data = array (
         ),
     'TAB_WIDTH' => 4
 );
-
-?>
diff --git a/inc/geshi/xpp.php b/vendor/easybook/geshi/geshi/xpp.php
old mode 100644
new mode 100755
similarity index 99%
rename from inc/geshi/xpp.php
rename to vendor/easybook/geshi/geshi/xpp.php
index a06e27794f031d270edf73f0e8456d19b431627b..52db2727b971714472a85c1f22750d09a3dcbbab
--- a/inc/geshi/xpp.php
+++ b/vendor/easybook/geshi/geshi/xpp.php
@@ -432,5 +432,3 @@ $language_data = array (
     'HIGHLIGHT_STRICT_BLOCK' => array(
         )
 );
-
-?>
diff --git a/inc/geshi/yaml.php b/vendor/easybook/geshi/geshi/yaml.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/yaml.php
rename to vendor/easybook/geshi/geshi/yaml.php
diff --git a/inc/geshi/z80.php b/vendor/easybook/geshi/geshi/z80.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/z80.php
rename to vendor/easybook/geshi/geshi/z80.php
diff --git a/inc/geshi/zxbasic.php b/vendor/easybook/geshi/geshi/zxbasic.php
old mode 100644
new mode 100755
similarity index 100%
rename from inc/geshi/zxbasic.php
rename to vendor/easybook/geshi/geshi/zxbasic.php
diff --git a/vendor/splitbrain/php-archive/.gitignore b/vendor/splitbrain/php-archive/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..c6277c187bf8f14922e7322bcf90fa753e201db3
--- /dev/null
+++ b/vendor/splitbrain/php-archive/.gitignore
@@ -0,0 +1,8 @@
+*.iml
+.idea/
+composer.phar
+vendor/
+composer.lock
+apigen.phar
+docs/
+
diff --git a/vendor/splitbrain/php-archive/LICENSE b/vendor/splitbrain/php-archive/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..66d08e433795aeb3e1b47c273c857df90aec0efe
--- /dev/null
+++ b/vendor/splitbrain/php-archive/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015 Andreas Gohr <gohr@cosmocode.de>
+
+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
diff --git a/vendor/splitbrain/php-archive/README.md b/vendor/splitbrain/php-archive/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f18764b6102d14fcdd5f9eb123c738afe35568be
--- /dev/null
+++ b/vendor/splitbrain/php-archive/README.md
@@ -0,0 +1,70 @@
+PHPArchive - Pure PHP ZIP and TAR handling
+==========================================
+
+This library allows to handle new ZIP and TAR archives without the need for any special PHP extensions (gz and bzip are
+needed for compression). It can create new files or extract existing ones.
+
+To keep things simple, the modification (adding or removing files) of existing archives is not supported.
+
+[![Build Status](https://travis-ci.org/splitbrain/php-archive.svg)](https://travis-ci.org/splitbrain/php-archive)
+
+Install
+-------
+
+Use composer:
+
+```php composer.phar require splitbrain/php-archive```
+
+Usage
+-----
+
+The usage for the Zip and Tar classes are basically the same. Here are some
+examples for working with TARs to get you started.
+
+Check the [API docs](https://splitbrain.github.io/php-archive/) for more
+info.
+
+
+```php
+require_once 'vendor/autoload.php';
+use splitbrain\PHPArchive\Tar;
+
+// To list the contents of an existing TAR archive, open() it and use
+// contents() on it:
+$tar = new Tar();
+$tar->open('myfile.tgz');
+$toc = $tar->contents();
+print_r($toc); // array of FileInfo objects
+
+// To extract the contents of an existing TAR archive, open() it and use
+// extract() on it:
+$tar = new Tar();
+$tar->open('myfile.tgz');
+$tar->extract('/tmp');
+
+// To create a new TAR archive directly on the filesystem (low memory
+// requirements), create() it:
+$tar = new Tar();
+$tar->create('myfile.tgz');
+$tar->addFile(...);
+$tar->addData(...);
+...
+$tar->close();
+
+// To create a TAR archive directly in memory, create() it, add*()
+// files and then either save() or getArchive() it:
+$tar = new Tar();
+$tar->setCompression(9, Archive::COMPRESS_BZIP);
+$tar->create();
+$tar->addFile(...);
+$tar->addData(...);
+...
+$tar->save('myfile.tbz'); // compresses and saves it
+echo $tar->getArchive(); // compresses and returns it
+```
+
+Differences between Tar and Zip: Tars are compressed as a whole, while Zips compress each file individually. Therefore
+you can call ```setCompression``` before each ```addFile()``` and ```addData()``` function call.
+
+The FileInfo class can be used to specify additional info like ownership or permissions when adding a file to
+an archive. 
diff --git a/vendor/splitbrain/php-archive/composer.json b/vendor/splitbrain/php-archive/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..5ad41a8c4544df3dbb7e8bd12ec0c9c8ae56ec01
--- /dev/null
+++ b/vendor/splitbrain/php-archive/composer.json
@@ -0,0 +1,26 @@
+{
+    "name": "splitbrain/php-archive",
+    "description": "Pure-PHP implementation to read and write TAR and ZIP archives",
+    "keywords": ["zip", "tar", "archive", "unpack", "extract", "unzip"],
+    "authors": [
+        {
+            "name": "Andreas Gohr",
+            "email": "andi@splitbrain.org"
+        }
+    ],
+    "license": "MIT",
+
+    "require": {
+        "php": ">=5.3.0"
+    },
+
+    "require-dev": {
+        "phpunit/phpunit": "4.5.*"
+    },
+
+    "autoload": {
+        "psr-4": {
+            "splitbrain\\PHPArchive\\": "src"
+        }
+    }
+}
diff --git a/vendor/splitbrain/php-archive/phpunit.xml b/vendor/splitbrain/php-archive/phpunit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d7e1f24284934525fa42355c28ae3bc29fd448ef
--- /dev/null
+++ b/vendor/splitbrain/php-archive/phpunit.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         bootstrap="vendor/autoload.php"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false">
+    <testsuites>
+        <testsuite name="Test Suite">
+            <directory suffix=".php">./tests/</directory>
+        </testsuite>
+    </testsuites>
+</phpunit>
\ No newline at end of file
diff --git a/vendor/splitbrain/php-archive/src/Archive.php b/vendor/splitbrain/php-archive/src/Archive.php
new file mode 100644
index 0000000000000000000000000000000000000000..d672cc6ec025af228d6a19726ab756699e64db61
--- /dev/null
+++ b/vendor/splitbrain/php-archive/src/Archive.php
@@ -0,0 +1,132 @@
+<?php
+
+namespace splitbrain\PHPArchive;
+
+abstract class Archive
+{
+
+    const COMPRESS_AUTO = -1;
+    const COMPRESS_NONE = 0;
+    const COMPRESS_GZIP = 1;
+    const COMPRESS_BZIP = 2;
+
+    /**
+     * Set the compression level and type
+     *
+     * @param int $level Compression level (0 to 9)
+     * @param int $type  Type of compression to use (use COMPRESS_* constants)
+     * @return mixed
+     */
+    abstract public function setCompression($level = 9, $type = Archive::COMPRESS_AUTO);
+
+    /**
+     * Open an existing archive file for reading
+     *
+     * @param string $file
+     * @throws ArchiveIOException
+     */
+    abstract public function open($file);
+
+    /**
+     * Read the contents of an archive
+     *
+     * This function lists the files stored in the archive, and returns an indexed array of FileInfo objects
+     *
+     * The archive is closed afer reading the contents, because rewinding is not possible in bzip2 streams.
+     * Reopen the file with open() again if you want to do additional operations
+     *
+     * @return FileInfo[]
+     */
+    abstract public function contents();
+
+    /**
+     * Extract an existing archive
+     *
+     * The $strip parameter allows you to strip a certain number of path components from the filenames
+     * found in the archive file, similar to the --strip-components feature of GNU tar. This is triggered when
+     * an integer is passed as $strip.
+     * Alternatively a fixed string prefix may be passed in $strip. If the filename matches this prefix,
+     * the prefix will be stripped. It is recommended to give prefixes with a trailing slash.
+     *
+     * By default this will extract all files found in the archive. You can restrict the output using the $include
+     * and $exclude parameter. Both expect a full regular expression (including delimiters and modifiers). If
+     * $include is set, only files that match this expression will be extracted. Files that match the $exclude
+     * expression will never be extracted. Both parameters can be used in combination. Expressions are matched against
+     * stripped filenames as described above.
+     *
+     * The archive is closed afterwards. Reopen the file with open() again if you want to do additional operations
+     *
+     * @param string     $outdir  the target directory for extracting
+     * @param int|string $strip   either the number of path components or a fixed prefix to strip
+     * @param string     $exclude a regular expression of files to exclude
+     * @param string     $include a regular expression of files to include
+     * @throws ArchiveIOException
+     * @return array
+     */
+    abstract public function extract($outdir, $strip = '', $exclude = '', $include = '');
+
+    /**
+     * Create a new archive file
+     *
+     * If $file is empty, the archive file will be created in memory
+     *
+     * @param string $file
+     */
+    abstract public function create($file = '');
+
+    /**
+     * Add a file to the current archive using an existing file in the filesystem
+     *
+     * @param string          $file     path to the original file
+     * @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with all meta data, empty to take from original
+     * @throws ArchiveIOException
+     */
+    abstract public function addFile($file, $fileinfo = '');
+
+    /**
+     * Add a file to the current archive using the given $data as content
+     *
+     * @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with all meta data
+     * @param string          $data     binary content of the file to add
+     * @throws ArchiveIOException
+     */
+    abstract public function addData($fileinfo, $data);
+
+    /**
+     * Close the archive, close all file handles
+     *
+     * After a call to this function no more data can be added to the archive, for
+     * read access no reading is allowed anymore
+     */
+    abstract public function close();
+
+    /**
+     * Returns the created in-memory archive data
+     *
+     * This implicitly calls close() on the Archive
+     */
+    abstract public function getArchive();
+
+    /**
+     * Save the created in-memory archive data
+     *
+     * Note: It is more memory effective to specify the filename in the create() function and
+     * let the library work on the new file directly.
+     *
+     * @param string $file
+     */
+    abstract public function save($file);
+
+}
+
+class ArchiveIOException extends \Exception
+{
+}
+
+class ArchiveIllegalCompressionException extends \Exception
+{
+}
+
+class ArchiveCorruptedException extends \Exception
+{
+}
diff --git a/vendor/splitbrain/php-archive/src/FileInfo.php b/vendor/splitbrain/php-archive/src/FileInfo.php
new file mode 100644
index 0000000000000000000000000000000000000000..612f924c34668e02c0d0d3aa6bd9c09804a66909
--- /dev/null
+++ b/vendor/splitbrain/php-archive/src/FileInfo.php
@@ -0,0 +1,343 @@
+<?php
+
+namespace splitbrain\PHPArchive;
+
+/**
+ * Class FileInfo
+ *
+ * stores meta data about a file in an Archive
+ *
+ * @author  Andreas Gohr <andi@splitbrain.org>
+ * @package splitbrain\PHPArchive
+ * @license MIT
+ */
+class FileInfo
+{
+
+    protected $isdir = false;
+    protected $path = '';
+    protected $size = 0;
+    protected $csize = 0;
+    protected $mtime = 0;
+    protected $mode = 0664;
+    protected $owner = '';
+    protected $group = '';
+    protected $uid = 0;
+    protected $gid = 0;
+    protected $comment = '';
+
+    /**
+     * initialize dynamic defaults
+     *
+     * @param string $path The path of the file, can also be set later through setPath()
+     */
+    public function __construct($path = '')
+    {
+        $this->mtime = time();
+        $this->setPath($path);
+    }
+
+    /**
+     * Factory to build FileInfo from existing file or directory
+     *
+     * @param string $path path to a file on the local file system
+     * @param string $as   optional path to use inside the archive
+     * @throws FileInfoException
+     * @return FileInfo
+     */
+    public static function fromPath($path, $as = '')
+    {
+        clearstatcache(false, $path);
+
+        if (!file_exists($path)) {
+            throw new FileInfoException("$path does not exist");
+        }
+
+        $stat = stat($path);
+        $file = new FileInfo();
+
+        $file->setPath($path);
+        $file->setIsdir(is_dir($path));
+        $file->setMode(fileperms($path));
+        $file->setOwner(fileowner($path));
+        $file->setGroup(filegroup($path));
+        $file->setSize(filesize($path));
+        $file->setUid($stat['uid']);
+        $file->setGid($stat['gid']);
+        $file->setMtime($stat['mtime']);
+
+        if ($as) {
+            $file->setPath($as);
+        }
+
+        return $file;
+    }
+
+    /**
+     * @return int
+     */
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    /**
+     * @param int $size
+     */
+    public function setSize($size)
+    {
+        $this->size = $size;
+    }
+
+    /**
+     * @return int
+     */
+    public function getCompressedSize()
+    {
+        return $this->csize;
+    }
+
+    /**
+     * @param int $csize
+     */
+    public function setCompressedSize($csize)
+    {
+        $this->csize = $csize;
+    }
+
+    /**
+     * @return int
+     */
+    public function getMtime()
+    {
+        return $this->mtime;
+    }
+
+    /**
+     * @param int $mtime
+     */
+    public function setMtime($mtime)
+    {
+        $this->mtime = $mtime;
+    }
+
+    /**
+     * @return int
+     */
+    public function getGid()
+    {
+        return $this->gid;
+    }
+
+    /**
+     * @param int $gid
+     */
+    public function setGid($gid)
+    {
+        $this->gid = $gid;
+    }
+
+    /**
+     * @return int
+     */
+    public function getUid()
+    {
+        return $this->uid;
+    }
+
+    /**
+     * @param int $uid
+     */
+    public function setUid($uid)
+    {
+        $this->uid = $uid;
+    }
+
+    /**
+     * @return string
+     */
+    public function getComment()
+    {
+        return $this->comment;
+    }
+
+    /**
+     * @param string $comment
+     */
+    public function setComment($comment)
+    {
+        $this->comment = $comment;
+    }
+
+    /**
+     * @return string
+     */
+    public function getGroup()
+    {
+        return $this->group;
+    }
+
+    /**
+     * @param string $group
+     */
+    public function setGroup($group)
+    {
+        $this->group = $group;
+    }
+
+    /**
+     * @return boolean
+     */
+    public function getIsdir()
+    {
+        return $this->isdir;
+    }
+
+    /**
+     * @param boolean $isdir
+     */
+    public function setIsdir($isdir)
+    {
+        // default mode for directories
+        if ($isdir && $this->mode === 0664) {
+            $this->mode = 0775;
+        }
+        $this->isdir = $isdir;
+    }
+
+    /**
+     * @return int
+     */
+    public function getMode()
+    {
+        return $this->mode;
+    }
+
+    /**
+     * @param int $mode
+     */
+    public function setMode($mode)
+    {
+        $this->mode = $mode;
+    }
+
+    /**
+     * @return string
+     */
+    public function getOwner()
+    {
+        return $this->owner;
+    }
+
+    /**
+     * @param string $owner
+     */
+    public function setOwner($owner)
+    {
+        $this->owner = $owner;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
+
+    /**
+     * @param string $path
+     */
+    public function setPath($path)
+    {
+        $this->path = $this->cleanPath($path);
+    }
+
+    /**
+     * Cleans up a path and removes relative parts, also strips leading slashes
+     *
+     * @param string $path
+     * @return string
+     */
+    protected function cleanPath($path)
+    {
+        $path    = str_replace('\\', '/', $path);
+        $path    = explode('/', $path);
+        $newpath = array();
+        foreach ($path as $p) {
+            if ($p === '' || $p === '.') {
+                continue;
+            }
+            if ($p === '..') {
+                array_pop($newpath);
+                continue;
+            }
+            array_push($newpath, $p);
+        }
+        return trim(implode('/', $newpath), '/');
+    }
+
+    /**
+     * Strip given prefix or number of path segments from the filename
+     *
+     * The $strip parameter allows you to strip a certain number of path components from the filenames
+     * found in the tar file, similar to the --strip-components feature of GNU tar. This is triggered when
+     * an integer is passed as $strip.
+     * Alternatively a fixed string prefix may be passed in $strip. If the filename matches this prefix,
+     * the prefix will be stripped. It is recommended to give prefixes with a trailing slash.
+     *
+     * @param  int|string $strip
+     * @return FileInfo
+     */
+    public function strip($strip)
+    {
+        $filename = $this->getPath();
+        $striplen = strlen($strip);
+        if (is_int($strip)) {
+            // if $strip is an integer we strip this many path components
+            $parts = explode('/', $filename);
+            if (!$this->getIsdir()) {
+                $base = array_pop($parts); // keep filename itself
+            } else {
+                $base = '';
+            }
+            $filename = join('/', array_slice($parts, $strip));
+            if ($base) {
+                $filename .= "/$base";
+            }
+        } else {
+            // if strip is a string, we strip a prefix here
+            if (substr($filename, 0, $striplen) == $strip) {
+                $filename = substr($filename, $striplen);
+            }
+        }
+
+        $this->setPath($filename);
+    }
+
+    /**
+     * Does the file match the given include and exclude expressions?
+     *
+     * Exclude rules take precedence over include rules
+     *
+     * @param string $include Regular expression of files to include
+     * @param string $exclude Regular expression of files to exclude
+     * @return bool
+     */
+    public function match($include = '', $exclude = '')
+    {
+        $extract = true;
+        if ($include && !preg_match($include, $this->getPath())) {
+            $extract = false;
+        }
+        if ($exclude && preg_match($exclude, $this->getPath())) {
+            $extract = false;
+        }
+
+        return $extract;
+    }
+}
+
+class FileInfoException extends \Exception
+{
+}
\ No newline at end of file
diff --git a/vendor/splitbrain/php-archive/src/Tar.php b/vendor/splitbrain/php-archive/src/Tar.php
new file mode 100644
index 0000000000000000000000000000000000000000..e29c7d5a63ba4ba4f960fc749877a0494bf078bd
--- /dev/null
+++ b/vendor/splitbrain/php-archive/src/Tar.php
@@ -0,0 +1,659 @@
+<?php
+
+namespace splitbrain\PHPArchive;
+
+/**
+ * Class Tar
+ *
+ * Creates or extracts Tar archives. Supports gz and bzip compression
+ *
+ * Long pathnames (>100 chars) are supported in POSIX ustar and GNU longlink formats.
+ *
+ * @author  Andreas Gohr <andi@splitbrain.org>
+ * @package splitbrain\PHPArchive
+ * @license MIT
+ */
+class Tar extends Archive
+{
+
+    protected $file = '';
+    protected $comptype = Archive::COMPRESS_AUTO;
+    protected $complevel = 9;
+    protected $fh;
+    protected $memory = '';
+    protected $closed = true;
+    protected $writeaccess = false;
+
+    /**
+     * Sets the compression to use
+     *
+     * @param int $level Compression level (0 to 9)
+     * @param int $type  Type of compression to use (use COMPRESS_* constants)
+     * @return mixed
+     */
+    public function setCompression($level = 9, $type = Archive::COMPRESS_AUTO)
+    {
+        $this->compressioncheck($type);
+        $this->comptype  = $type;
+        $this->complevel = $level;
+        if($level == 0) $this->comptype = Archive::COMPRESS_NONE;
+        if($type == Archive::COMPRESS_NONE) $this->complevel = 0;
+    }
+
+    /**
+     * Open an existing TAR file for reading
+     *
+     * @param string $file
+     * @throws ArchiveIOException
+     */
+    public function open($file)
+    {
+        $this->file = $file;
+
+        // update compression to mach file
+        if ($this->comptype == Tar::COMPRESS_AUTO) {
+            $this->setCompression($this->complevel, $this->filetype($file));
+        }
+
+        // open file handles
+        if ($this->comptype === Archive::COMPRESS_GZIP) {
+            $this->fh = @gzopen($this->file, 'rb');
+        } elseif ($this->comptype === Archive::COMPRESS_BZIP) {
+            $this->fh = @bzopen($this->file, 'r');
+        } else {
+            $this->fh = @fopen($this->file, 'rb');
+        }
+
+        if (!$this->fh) {
+            throw new ArchiveIOException('Could not open file for reading: '.$this->file);
+        }
+        $this->closed = false;
+    }
+
+    /**
+     * Read the contents of a TAR archive
+     *
+     * This function lists the files stored in the archive
+     *
+     * The archive is closed afer reading the contents, because rewinding is not possible in bzip2 streams.
+     * Reopen the file with open() again if you want to do additional operations
+     *
+     * @throws ArchiveIOException
+     * @returns FileInfo[]
+     */
+    public function contents()
+    {
+        if ($this->closed || !$this->file) {
+            throw new ArchiveIOException('Can not read from a closed archive');
+        }
+
+        $result = array();
+        while ($read = $this->readbytes(512)) {
+            $header = $this->parseHeader($read);
+            if (!is_array($header)) {
+                continue;
+            }
+
+            $this->skipbytes(ceil($header['size'] / 512) * 512);
+            $result[] = $this->header2fileinfo($header);
+        }
+
+        $this->close();
+        return $result;
+    }
+
+    /**
+     * Extract an existing TAR archive
+     *
+     * The $strip parameter allows you to strip a certain number of path components from the filenames
+     * found in the tar file, similar to the --strip-components feature of GNU tar. This is triggered when
+     * an integer is passed as $strip.
+     * Alternatively a fixed string prefix may be passed in $strip. If the filename matches this prefix,
+     * the prefix will be stripped. It is recommended to give prefixes with a trailing slash.
+     *
+     * By default this will extract all files found in the archive. You can restrict the output using the $include
+     * and $exclude parameter. Both expect a full regular expression (including delimiters and modifiers). If
+     * $include is set only files that match this expression will be extracted. Files that match the $exclude
+     * expression will never be extracted. Both parameters can be used in combination. Expressions are matched against
+     * stripped filenames as described above.
+     *
+     * The archive is closed afer reading the contents, because rewinding is not possible in bzip2 streams.
+     * Reopen the file with open() again if you want to do additional operations
+     *
+     * @param string     $outdir  the target directory for extracting
+     * @param int|string $strip   either the number of path components or a fixed prefix to strip
+     * @param string     $exclude a regular expression of files to exclude
+     * @param string     $include a regular expression of files to include
+     * @throws ArchiveIOException
+     * @return FileInfo[]
+     */
+    public function extract($outdir, $strip = '', $exclude = '', $include = '')
+    {
+        if ($this->closed || !$this->file) {
+            throw new ArchiveIOException('Can not read from a closed archive');
+        }
+
+        $outdir = rtrim($outdir, '/');
+        @mkdir($outdir, 0777, true);
+        if (!is_dir($outdir)) {
+            throw new ArchiveIOException("Could not create directory '$outdir'");
+        }
+
+        $extracted = array();
+        while ($dat = $this->readbytes(512)) {
+            // read the file header
+            $header = $this->parseHeader($dat);
+            if (!is_array($header)) {
+                continue;
+            }
+            $fileinfo = $this->header2fileinfo($header);
+
+            // apply strip rules
+            $fileinfo->strip($strip);
+
+            // skip unwanted files
+            if (!strlen($fileinfo->getPath()) || !$fileinfo->match($include, $exclude)) {
+                $this->skipbytes(ceil($header['size'] / 512) * 512);
+                continue;
+            }
+
+            // create output directory
+            $output    = $outdir.'/'.$fileinfo->getPath();
+            $directory = ($fileinfo->getIsdir()) ? $output : dirname($output);
+            @mkdir($directory, 0777, true);
+
+            // extract data
+            if (!$fileinfo->getIsdir()) {
+                $fp = fopen($output, "wb");
+                if (!$fp) {
+                    throw new ArchiveIOException('Could not open file for writing: '.$output);
+                }
+
+                $size = floor($header['size'] / 512);
+                for ($i = 0; $i < $size; $i++) {
+                    fwrite($fp, $this->readbytes(512), 512);
+                }
+                if (($header['size'] % 512) != 0) {
+                    fwrite($fp, $this->readbytes(512), $header['size'] % 512);
+                }
+
+                fclose($fp);
+                touch($output, $fileinfo->getMtime());
+                chmod($output, $fileinfo->getMode());
+            } else {
+                $this->skipbytes(ceil($header['size'] / 512) * 512); // the size is usually 0 for directories
+            }
+
+            $extracted[] = $fileinfo;
+        }
+
+        $this->close();
+        return $extracted;
+    }
+
+    /**
+     * Create a new TAR file
+     *
+     * If $file is empty, the tar file will be created in memory
+     *
+     * @param string $file
+     * @throws ArchiveIOException
+     */
+    public function create($file = '')
+    {
+        $this->file   = $file;
+        $this->memory = '';
+        $this->fh     = 0;
+
+        if ($this->file) {
+            // determine compression
+            if ($this->comptype == Archive::COMPRESS_AUTO) {
+                $this->setCompression($this->complevel, $this->filetype($file));
+            }
+
+            if ($this->comptype === Archive::COMPRESS_GZIP) {
+                $this->fh = @gzopen($this->file, 'wb'.$this->complevel);
+            } elseif ($this->comptype === Archive::COMPRESS_BZIP) {
+                $this->fh = @bzopen($this->file, 'w');
+            } else {
+                $this->fh = @fopen($this->file, 'wb');
+            }
+
+            if (!$this->fh) {
+                throw new ArchiveIOException('Could not open file for writing: '.$this->file);
+            }
+        }
+        $this->writeaccess = true;
+        $this->closed      = false;
+    }
+
+    /**
+     * Add a file to the current TAR archive using an existing file in the filesystem
+     *
+     * @param string          $file     path to the original file
+     * @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with all meta data, empty to take from original
+     * @throws ArchiveIOException
+     */
+    public function addFile($file, $fileinfo = '')
+    {
+        if (is_string($fileinfo)) {
+            $fileinfo = FileInfo::fromPath($file, $fileinfo);
+        }
+
+        if ($this->closed) {
+            throw new ArchiveIOException('Archive has been closed, files can no longer be added');
+        }
+
+        $fp = fopen($file, 'rb');
+        if (!$fp) {
+            throw new ArchiveIOException('Could not open file for reading: '.$file);
+        }
+
+        // create file header
+        $this->writeFileHeader($fileinfo);
+
+        // write data
+        while (!feof($fp)) {
+            $data = fread($fp, 512);
+            if ($data === false) {
+                break;
+            }
+            if ($data === '') {
+                break;
+            }
+            $packed = pack("a512", $data);
+            $this->writebytes($packed);
+        }
+        fclose($fp);
+    }
+
+    /**
+     * Add a file to the current TAR archive using the given $data as content
+     *
+     * @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with all meta data
+     * @param string          $data     binary content of the file to add
+     * @throws ArchiveIOException
+     */
+    public function addData($fileinfo, $data)
+    {
+        if (is_string($fileinfo)) {
+            $fileinfo = new FileInfo($fileinfo);
+        }
+
+        if ($this->closed) {
+            throw new ArchiveIOException('Archive has been closed, files can no longer be added');
+        }
+
+        $len = strlen($data);
+        $fileinfo->setSize($len);
+        $this->writeFileHeader($fileinfo);
+
+        for ($s = 0; $s < $len; $s += 512) {
+            $this->writebytes(pack("a512", substr($data, $s, 512)));
+        }
+    }
+
+    /**
+     * Add the closing footer to the archive if in write mode, close all file handles
+     *
+     * After a call to this function no more data can be added to the archive, for
+     * read access no reading is allowed anymore
+     *
+     * "Physically, an archive consists of a series of file entries terminated by an end-of-archive entry, which
+     * consists of two 512 blocks of zero bytes"
+     *
+     * @link http://www.gnu.org/software/tar/manual/html_chapter/tar_8.html#SEC134
+     */
+    public function close()
+    {
+        if ($this->closed) {
+            return;
+        } // we did this already
+
+        // write footer
+        if ($this->writeaccess) {
+            $this->writebytes(pack("a512", ""));
+            $this->writebytes(pack("a512", ""));
+        }
+
+        // close file handles
+        if ($this->file) {
+            if ($this->comptype === Archive::COMPRESS_GZIP) {
+                gzclose($this->fh);
+            } elseif ($this->comptype === Archive::COMPRESS_BZIP) {
+                bzclose($this->fh);
+            } else {
+                fclose($this->fh);
+            }
+
+            $this->file = '';
+            $this->fh   = 0;
+        }
+
+        $this->writeaccess = false;
+        $this->closed      = true;
+    }
+
+    /**
+     * Returns the created in-memory archive data
+     *
+     * This implicitly calls close() on the Archive
+     */
+    public function getArchive()
+    {
+        $this->close();
+
+        if ($this->comptype === Archive::COMPRESS_AUTO) {
+            $this->comptype = Archive::COMPRESS_NONE;
+        }
+
+        if ($this->comptype === Archive::COMPRESS_GZIP) {
+            return gzcompress($this->memory, $this->complevel);
+        }
+        if ($this->comptype === Archive::COMPRESS_BZIP) {
+            return bzcompress($this->memory);
+        }
+        return $this->memory;
+    }
+
+    /**
+     * Save the created in-memory archive data
+     *
+     * Note: It more memory effective to specify the filename in the create() function and
+     * let the library work on the new file directly.
+     *
+     * @param string $file
+     * @throws ArchiveIOException
+     */
+    public function save($file)
+    {
+        if ($this->comptype === Archive::COMPRESS_AUTO) {
+            $this->setCompression($this->complevel, $this->filetype($file));
+        }
+
+        if (!file_put_contents($file, $this->getArchive())) {
+            throw new ArchiveIOException('Could not write to file: '.$file);
+        }
+    }
+
+    /**
+     * Read from the open file pointer
+     *
+     * @param int $length bytes to read
+     * @return string
+     */
+    protected function readbytes($length)
+    {
+        if ($this->comptype === Archive::COMPRESS_GZIP) {
+            return @gzread($this->fh, $length);
+        } elseif ($this->comptype === Archive::COMPRESS_BZIP) {
+            return @bzread($this->fh, $length);
+        } else {
+            return @fread($this->fh, $length);
+        }
+    }
+
+    /**
+     * Write to the open filepointer or memory
+     *
+     * @param string $data
+     * @throws ArchiveIOException
+     * @return int number of bytes written
+     */
+    protected function writebytes($data)
+    {
+        if (!$this->file) {
+            $this->memory .= $data;
+            $written = strlen($data);
+        } elseif ($this->comptype === Archive::COMPRESS_GZIP) {
+            $written = @gzwrite($this->fh, $data);
+        } elseif ($this->comptype === Archive::COMPRESS_BZIP) {
+            $written = @bzwrite($this->fh, $data);
+        } else {
+            $written = @fwrite($this->fh, $data);
+        }
+        if ($written === false) {
+            throw new ArchiveIOException('Failed to write to archive stream');
+        }
+        return $written;
+    }
+
+    /**
+     * Skip forward in the open file pointer
+     *
+     * This is basically a wrapper around seek() (and a workaround for bzip2)
+     *
+     * @param int $bytes seek to this position
+     */
+    function skipbytes($bytes)
+    {
+        if ($this->comptype === Archive::COMPRESS_GZIP) {
+            @gzseek($this->fh, $bytes, SEEK_CUR);
+        } elseif ($this->comptype === Archive::COMPRESS_BZIP) {
+            // there is no seek in bzip2, we simply read on
+            // bzread allows to read a max of 8kb at once
+            while($bytes) {
+                $toread = min(8192, $bytes);
+                @bzread($this->fh, $toread);
+                $bytes -= $toread;
+            }
+        } else {
+            @fseek($this->fh, $bytes, SEEK_CUR);
+        }
+    }
+
+    /**
+     * Write the given file metat data as header
+     *
+     * @param FileInfo $fileinfo
+     */
+    protected function writeFileHeader(FileInfo $fileinfo)
+    {
+        $this->writeRawFileHeader(
+            $fileinfo->getPath(),
+            $fileinfo->getUid(),
+            $fileinfo->getGid(),
+            $fileinfo->getMode(),
+            $fileinfo->getSize(),
+            $fileinfo->getMtime(),
+            $fileinfo->getIsdir() ? '5' : '0'
+        );
+    }
+
+    /**
+     * Write a file header to the stream
+     *
+     * @param string $name
+     * @param int    $uid
+     * @param int    $gid
+     * @param int    $perm
+     * @param int    $size
+     * @param int    $mtime
+     * @param string $typeflag Set to '5' for directories
+     */
+    protected function writeRawFileHeader($name, $uid, $gid, $perm, $size, $mtime, $typeflag = '')
+    {
+        // handle filename length restrictions
+        $prefix  = '';
+        $namelen = strlen($name);
+        if ($namelen > 100) {
+            $file = basename($name);
+            $dir  = dirname($name);
+            if (strlen($file) > 100 || strlen($dir) > 155) {
+                // we're still too large, let's use GNU longlink
+                $this->writeRawFileHeader('././@LongLink', 0, 0, 0, $namelen, 0, 'L');
+                for ($s = 0; $s < $namelen; $s += 512) {
+                    $this->writebytes(pack("a512", substr($name, $s, 512)));
+                }
+                $name = substr($name, 0, 100); // cut off name
+            } else {
+                // we're fine when splitting, use POSIX ustar
+                $prefix = $dir;
+                $name   = $file;
+            }
+        }
+
+        // values are needed in octal
+        $uid   = sprintf("%6s ", decoct($uid));
+        $gid   = sprintf("%6s ", decoct($gid));
+        $perm  = sprintf("%6s ", decoct($perm));
+        $size  = sprintf("%11s ", decoct($size));
+        $mtime = sprintf("%11s", decoct($mtime));
+
+        $data_first = pack("a100a8a8a8a12A12", $name, $perm, $uid, $gid, $size, $mtime);
+        $data_last  = pack("a1a100a6a2a32a32a8a8a155a12", $typeflag, '', 'ustar', '', '', '', '', '', $prefix, "");
+
+        for ($i = 0, $chks = 0; $i < 148; $i++) {
+            $chks += ord($data_first[$i]);
+        }
+
+        for ($i = 156, $chks += 256, $j = 0; $i < 512; $i++, $j++) {
+            $chks += ord($data_last[$j]);
+        }
+
+        $this->writebytes($data_first);
+
+        $chks = pack("a8", sprintf("%6s ", decoct($chks)));
+        $this->writebytes($chks.$data_last);
+    }
+
+    /**
+     * Decode the given tar file header
+     *
+     * @param string $block a 512 byte block containing the header data
+     * @return array|false returns false when this was a null block
+     * @throws ArchiveCorruptedException
+     */
+    protected function parseHeader($block)
+    {
+        if (!$block || strlen($block) != 512) {
+            throw new ArchiveCorruptedException('Unexpected length of header');
+        }
+
+        // null byte blocks are ignored
+        if(trim($block) === '') return false;
+
+        for ($i = 0, $chks = 0; $i < 148; $i++) {
+            $chks += ord($block[$i]);
+        }
+
+        for ($i = 156, $chks += 256; $i < 512; $i++) {
+            $chks += ord($block[$i]);
+        }
+
+        $header = @unpack(
+            "a100filename/a8perm/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor/a155prefix",
+            $block
+        );
+        if (!$header) {
+            throw new ArchiveCorruptedException('Failed to parse header');
+        }
+
+        $return['checksum'] = OctDec(trim($header['checksum']));
+        if ($return['checksum'] != $chks) {
+            throw new ArchiveCorruptedException('Header does not match it\'s checksum');
+        }
+
+        $return['filename'] = trim($header['filename']);
+        $return['perm']     = OctDec(trim($header['perm']));
+        $return['uid']      = OctDec(trim($header['uid']));
+        $return['gid']      = OctDec(trim($header['gid']));
+        $return['size']     = OctDec(trim($header['size']));
+        $return['mtime']    = OctDec(trim($header['mtime']));
+        $return['typeflag'] = $header['typeflag'];
+        $return['link']     = trim($header['link']);
+        $return['uname']    = trim($header['uname']);
+        $return['gname']    = trim($header['gname']);
+
+        // Handle ustar Posix compliant path prefixes
+        if (trim($header['prefix'])) {
+            $return['filename'] = trim($header['prefix']).'/'.$return['filename'];
+        }
+
+        // Handle Long-Link entries from GNU Tar
+        if ($return['typeflag'] == 'L') {
+            // following data block(s) is the filename
+            $filename = trim($this->readbytes(ceil($header['size'] / 512) * 512));
+            // next block is the real header
+            $block  = $this->readbytes(512);
+            $return = $this->parseHeader($block);
+            // overwrite the filename
+            $return['filename'] = $filename;
+        }
+
+        return $return;
+    }
+
+    /**
+     * Creates a FileInfo object from the given parsed header
+     *
+     * @param $header
+     * @return FileInfo
+     */
+    protected function header2fileinfo($header)
+    {
+        $fileinfo = new FileInfo();
+        $fileinfo->setPath($header['filename']);
+        $fileinfo->setMode($header['perm']);
+        $fileinfo->setUid($header['uid']);
+        $fileinfo->setGid($header['gid']);
+        $fileinfo->setSize($header['size']);
+        $fileinfo->setMtime($header['mtime']);
+        $fileinfo->setOwner($header['uname']);
+        $fileinfo->setGroup($header['gname']);
+        $fileinfo->setIsdir((bool) $header['typeflag']);
+
+        return $fileinfo;
+    }
+
+    /**
+     * Checks if the given compression type is available and throws an exception if not
+     *
+     * @param $comptype
+     * @throws ArchiveIllegalCompressionException
+     */
+    protected function compressioncheck($comptype)
+    {
+        if ($comptype === Archive::COMPRESS_GZIP && !function_exists('gzopen')) {
+            throw new ArchiveIllegalCompressionException('No gzip support available');
+        }
+
+        if ($comptype === Archive::COMPRESS_BZIP && !function_exists('bzopen')) {
+            throw new ArchiveIllegalCompressionException('No bzip2 support available');
+        }
+    }
+
+    /**
+     * Guesses the wanted compression from the given file
+     *
+     * Uses magic bytes for existing files, the file extension otherwise
+     *
+     * You don't need to call this yourself. It's used when you pass Archive::COMPRESS_AUTO somewhere
+     *
+     * @param string $file
+     * @return int
+     */
+    public function filetype($file)
+    {
+        // for existing files, try to read the magic bytes
+        if(file_exists($file) && is_readable($file) && filesize($file) > 5) {
+            $fh = fopen($file, 'rb');
+            if(!$fh) return false;
+            $magic = fread($fh, 5);
+            fclose($fh);
+
+            if(strpos($magic, "\x42\x5a") === 0) return Archive::COMPRESS_BZIP;
+            if(strpos($magic, "\x1f\x8b") === 0) return Archive::COMPRESS_GZIP;
+        }
+
+        // otherwise rely on file name
+        $file = strtolower($file);
+        if (substr($file, -3) == '.gz' || substr($file, -4) == '.tgz') {
+            return Archive::COMPRESS_GZIP;
+        } elseif (substr($file, -4) == '.bz2' || substr($file, -4) == '.tbz') {
+            return Archive::COMPRESS_BZIP;
+        }
+
+        return Archive::COMPRESS_NONE;
+    }
+}
diff --git a/vendor/splitbrain/php-archive/src/Zip.php b/vendor/splitbrain/php-archive/src/Zip.php
new file mode 100644
index 0000000000000000000000000000000000000000..1bc1ac1b7b24415b879608e70e4d6a03a17b4f72
--- /dev/null
+++ b/vendor/splitbrain/php-archive/src/Zip.php
@@ -0,0 +1,750 @@
+<?php
+
+namespace splitbrain\PHPArchive;
+
+/**
+ * Class Zip
+ *
+ * Creates or extracts Zip archives
+ *
+ * for specs see http://www.pkware.com/appnote
+ *
+ * @author  Andreas Gohr <andi@splitbrain.org>
+ * @package splitbrain\PHPArchive
+ * @license MIT
+ */
+class Zip extends Archive
+{
+
+    protected $file = '';
+    protected $fh;
+    protected $memory = '';
+    protected $closed = true;
+    protected $writeaccess = false;
+    protected $ctrl_dir;
+    protected $complevel = 9;
+
+    /**
+     * Set the compression level.
+     *
+     * Compression Type is ignored for ZIP
+     *
+     * You can call this function before adding each file to set differen compression levels
+     * for each file.
+     *
+     * @param int $level Compression level (0 to 9)
+     * @param int $type  Type of compression to use ignored for ZIP
+     * @return mixed
+     */
+    public function setCompression($level = 9, $type = Archive::COMPRESS_AUTO)
+    {
+        $this->complevel = $level;
+    }
+
+    /**
+     * Open an existing ZIP file for reading
+     *
+     * @param string $file
+     * @throws ArchiveIOException
+     */
+    public function open($file)
+    {
+        $this->file = $file;
+        $this->fh   = @fopen($this->file, 'rb');
+        if (!$this->fh) {
+            throw new ArchiveIOException('Could not open file for reading: '.$this->file);
+        }
+        $this->closed = false;
+    }
+
+    /**
+     * Read the contents of a ZIP archive
+     *
+     * This function lists the files stored in the archive, and returns an indexed array of FileInfo objects
+     *
+     * The archive is closed afer reading the contents, for API compatibility with TAR files
+     * Reopen the file with open() again if you want to do additional operations
+     *
+     * @throws ArchiveIOException
+     * @return FileInfo[]
+     */
+    public function contents()
+    {
+        if ($this->closed || !$this->file) {
+            throw new ArchiveIOException('Can not read from a closed archive');
+        }
+
+        $result = array();
+
+        $centd = $this->readCentralDir();
+
+        @rewind($this->fh);
+        @fseek($this->fh, $centd['offset']);
+
+        for ($i = 0; $i < $centd['entries']; $i++) {
+            $result[] = $this->header2fileinfo($this->readCentralFileHeader());
+        }
+
+        $this->close();
+        return $result;
+    }
+
+    /**
+     * Extract an existing ZIP archive
+     *
+     * The $strip parameter allows you to strip a certain number of path components from the filenames
+     * found in the tar file, similar to the --strip-components feature of GNU tar. This is triggered when
+     * an integer is passed as $strip.
+     * Alternatively a fixed string prefix may be passed in $strip. If the filename matches this prefix,
+     * the prefix will be stripped. It is recommended to give prefixes with a trailing slash.
+     *
+     * By default this will extract all files found in the archive. You can restrict the output using the $include
+     * and $exclude parameter. Both expect a full regular expression (including delimiters and modifiers). If
+     * $include is set only files that match this expression will be extracted. Files that match the $exclude
+     * expression will never be extracted. Both parameters can be used in combination. Expressions are matched against
+     * stripped filenames as described above.
+     *
+     * @param string     $outdir  the target directory for extracting
+     * @param int|string $strip   either the number of path components or a fixed prefix to strip
+     * @param string     $exclude a regular expression of files to exclude
+     * @param string     $include a regular expression of files to include
+     * @throws ArchiveIOException
+     * @return FileInfo[]
+     */
+    function extract($outdir, $strip = '', $exclude = '', $include = '')
+    {
+        if ($this->closed || !$this->file) {
+            throw new ArchiveIOException('Can not read from a closed archive');
+        }
+
+        $outdir = rtrim($outdir, '/');
+        @mkdir($outdir, 0777, true);
+
+        $extracted = array();
+
+        $cdir      = $this->readCentralDir();
+        $pos_entry = $cdir['offset']; // begin of the central file directory
+
+        for ($i = 0; $i < $cdir['entries']; $i++) {
+            // read file header
+            @fseek($this->fh, $pos_entry);
+            $header          = $this->readCentralFileHeader();
+            $header['index'] = $i;
+            $pos_entry       = ftell($this->fh); // position of the next file in central file directory
+            fseek($this->fh, $header['offset']); // seek to beginning of file header
+            $header   = $this->readFileHeader($header);
+            $fileinfo = $this->header2fileinfo($header);
+
+            // apply strip rules
+            $fileinfo->strip($strip);
+
+            // skip unwanted files
+            if (!strlen($fileinfo->getPath()) || !$fileinfo->match($include, $exclude)) {
+                continue;
+            }
+
+            $extracted[] = $fileinfo;
+
+            // create output directory
+            $output    = $outdir.'/'.$fileinfo->getPath();
+            $directory = ($header['folder']) ? $output : dirname($output);
+            @mkdir($directory, 0777, true);
+
+            // nothing more to do for directories
+            if ($fileinfo->getIsdir()) {
+                continue;
+            }
+
+            // compressed files are written to temporary .gz file first
+            if ($header['compression'] == 0) {
+                $extractto = $output;
+            } else {
+                $extractto = $output.'.gz';
+            }
+
+            // open file for writing
+            $fp = fopen($extractto, "wb");
+            if (!$fp) {
+                throw new ArchiveIOException('Could not open file for writing: '.$extractto);
+            }
+
+            // prepend compression header
+            if ($header['compression'] != 0) {
+                $binary_data = pack(
+                    'va1a1Va1a1',
+                    0x8b1f,
+                    chr($header['compression']),
+                    chr(0x00),
+                    time(),
+                    chr(0x00),
+                    chr(3)
+                );
+                fwrite($fp, $binary_data, 10);
+            }
+
+            // read the file and store it on disk
+            $size = $header['compressed_size'];
+            while ($size != 0) {
+                $read_size   = ($size < 2048 ? $size : 2048);
+                $buffer      = fread($this->fh, $read_size);
+                $binary_data = pack('a'.$read_size, $buffer);
+                fwrite($fp, $binary_data, $read_size);
+                $size -= $read_size;
+            }
+
+            // finalize compressed file
+            if ($header['compression'] != 0) {
+                $binary_data = pack('VV', $header['crc'], $header['size']);
+                fwrite($fp, $binary_data, 8);
+            }
+
+            // close file
+            fclose($fp);
+
+            // unpack compressed file
+            if ($header['compression'] != 0) {
+                $gzp = @gzopen($extractto, 'rb');
+                if (!$gzp) {
+                    @unlink($extractto);
+                    throw new ArchiveIOException('Failed file extracting. gzip support missing?');
+                }
+                $fp = @fopen($output, 'wb');
+                if (!$fp) {
+                    throw new ArchiveIOException('Could not open file for writing: '.$extractto);
+                }
+
+                $size = $header['size'];
+                while ($size != 0) {
+                    $read_size   = ($size < 2048 ? $size : 2048);
+                    $buffer      = gzread($gzp, $read_size);
+                    $binary_data = pack('a'.$read_size, $buffer);
+                    @fwrite($fp, $binary_data, $read_size);
+                    $size -= $read_size;
+                }
+                fclose($fp);
+                gzclose($gzp);
+                unlink($extractto); // remove temporary gz file
+            }
+
+            touch($output, $fileinfo->getMtime());
+            //FIXME what about permissions?
+        }
+
+        $this->close();
+        return $extracted;
+    }
+
+    /**
+     * Create a new ZIP file
+     *
+     * If $file is empty, the zip file will be created in memory
+     *
+     * @param string $file
+     * @throws ArchiveIOException
+     */
+    public function create($file = '')
+    {
+        $this->file   = $file;
+        $this->memory = '';
+        $this->fh     = 0;
+
+        if ($this->file) {
+            $this->fh = @fopen($this->file, 'wb');
+
+            if (!$this->fh) {
+                throw new ArchiveIOException('Could not open file for writing: '.$this->file);
+            }
+        }
+        $this->writeaccess = true;
+        $this->closed      = false;
+        $this->ctrl_dir    = array();
+    }
+
+    /**
+     * Add a file to the current ZIP archive using an existing file in the filesystem
+     *
+     * @param string          $file     path to the original file
+     * @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with all meta data, empty to take from original
+     * @throws ArchiveIOException
+     */
+
+    /**
+     * Add a file to the current archive using an existing file in the filesystem
+     *
+     * @param string          $file     path to the original file
+     * @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with all meta data, empty to take from original
+     * @throws ArchiveIOException
+     */
+    public function addFile($file, $fileinfo = '')
+    {
+        if (is_string($fileinfo)) {
+            $fileinfo = FileInfo::fromPath($file, $fileinfo);
+        }
+
+        if ($this->closed) {
+            throw new ArchiveIOException('Archive has been closed, files can no longer be added');
+        }
+
+        $data = @file_get_contents($file);
+        if ($data === false) {
+            throw new ArchiveIOException('Could not open file for reading: '.$file);
+        }
+
+        // FIXME could we stream writing compressed data? gzwrite on a fopen handle?
+        $this->addData($fileinfo, $data);
+    }
+
+    /**
+     * Add a file to the current TAR archive using the given $data as content
+     *
+     * @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with all meta data
+     * @param string          $data     binary content of the file to add
+     * @throws ArchiveIOException
+     */
+    public function addData($fileinfo, $data)
+    {
+        if (is_string($fileinfo)) {
+            $fileinfo = new FileInfo($fileinfo);
+        }
+
+        if ($this->closed) {
+            throw new ArchiveIOException('Archive has been closed, files can no longer be added');
+        }
+
+        // prepare info and compress data
+        $size     = strlen($data);
+        $crc      = crc32($data);
+        if ($this->complevel) {
+            $data = gzcompress($data, $this->complevel);
+            $data = substr($data, 2, -4); // strip compression headers
+        }
+        $csize  = strlen($data);
+        $offset = $this->dataOffset();
+        $name   = $fileinfo->getPath();
+        $time   = $fileinfo->getMtime();
+
+        // write local file header
+        $this->writebytes($this->makeLocalFileHeader(
+            $time,
+            $crc,
+            $size,
+            $csize,
+            $name,
+            (bool) $this->complevel
+        ));
+
+        // we store no encryption header
+
+        // write data
+        $this->writebytes($data);
+
+        // we store no data descriptor
+
+        // add info to central file directory
+        $this->ctrl_dir[] = $this->makeCentralFileRecord(
+            $offset,
+            $time,
+            $crc,
+            $size,
+            $csize,
+            $name,
+            (bool) $this->complevel
+        );
+    }
+
+    /**
+     * Add the closing footer to the archive if in write mode, close all file handles
+     *
+     * After a call to this function no more data can be added to the archive, for
+     * read access no reading is allowed anymore
+     */
+    public function close()
+    {
+        if ($this->closed) {
+            return;
+        } // we did this already
+
+        if ($this->writeaccess) {
+            // write central directory
+            $offset = $this->dataOffset();
+            $ctrldir = join('', $this->ctrl_dir);
+            $this->writebytes($ctrldir);
+
+            // write end of central directory record
+            $this->writebytes("\x50\x4b\x05\x06"); // end of central dir signature
+            $this->writebytes(pack('v', 0)); // number of this disk
+            $this->writebytes(pack('v', 0)); // number of the disk with the start of the central directory
+            $this->writebytes(pack('v',
+                count($this->ctrl_dir))); // total number of entries in the central directory on this disk
+            $this->writebytes(pack('v', count($this->ctrl_dir))); // total number of entries in the central directory
+            $this->writebytes(pack('V', strlen($ctrldir))); // size of the central directory
+            $this->writebytes(pack('V',
+                $offset)); // offset of start of central directory with respect to the starting disk number
+            $this->writebytes(pack('v', 0)); // .ZIP file comment length
+
+            $this->ctrl_dir = array();
+        }
+
+        // close file handles
+        if ($this->file) {
+            fclose($this->fh);
+            $this->file = '';
+            $this->fh   = 0;
+        }
+
+        $this->writeaccess = false;
+        $this->closed      = true;
+    }
+
+    /**
+     * Returns the created in-memory archive data
+     *
+     * This implicitly calls close() on the Archive
+     */
+    public function getArchive()
+    {
+        $this->close();
+
+        return $this->memory;
+    }
+
+    /**
+     * Save the created in-memory archive data
+     *
+     * Note: It's more memory effective to specify the filename in the create() function and
+     * let the library work on the new file directly.
+     *
+     * @param     $file
+     * @throws ArchiveIOException
+     */
+    public function save($file)
+    {
+        if (!file_put_contents($file, $this->getArchive())) {
+            throw new ArchiveIOException('Could not write to file: '.$file);
+        }
+    }
+
+    /**
+     * Read the central directory
+     *
+     * This key-value list contains general information about the ZIP file
+     *
+     * @return array
+     */
+    protected function readCentralDir()
+    {
+        $size = filesize($this->file);
+        if ($size < 277) {
+            $maximum_size = $size;
+        } else {
+            $maximum_size = 277;
+        }
+
+        @fseek($this->fh, $size - $maximum_size);
+        $pos   = ftell($this->fh);
+        $bytes = 0x00000000;
+
+        while ($pos < $size) {
+            $byte  = @fread($this->fh, 1);
+            $bytes = (($bytes << 8) & 0xFFFFFFFF) | ord($byte);
+            if ($bytes == 0x504b0506) {
+                break;
+            }
+            $pos++;
+        }
+
+        $data = unpack(
+            'vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',
+            fread($this->fh, 18)
+        );
+
+        if ($data['comment_size'] != 0) {
+            $centd['comment'] = fread($this->fh, $data['comment_size']);
+        } else {
+            $centd['comment'] = '';
+        }
+        $centd['entries']      = $data['entries'];
+        $centd['disk_entries'] = $data['disk_entries'];
+        $centd['offset']       = $data['offset'];
+        $centd['disk_start']   = $data['disk_start'];
+        $centd['size']         = $data['size'];
+        $centd['disk']         = $data['disk'];
+        return $centd;
+    }
+
+    /**
+     * Read the next central file header
+     *
+     * Assumes the current file pointer is pointing at the right position
+     *
+     * @return array
+     */
+    protected function readCentralFileHeader()
+    {
+        $binary_data = fread($this->fh, 46);
+        $header      = unpack(
+            'vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset',
+            $binary_data
+        );
+
+        if ($header['filename_len'] != 0) {
+            $header['filename'] = fread($this->fh, $header['filename_len']);
+        } else {
+            $header['filename'] = '';
+        }
+
+        if ($header['extra_len'] != 0) {
+            $header['extra'] = fread($this->fh, $header['extra_len']);
+        } else {
+            $header['extra'] = '';
+        }
+
+        if ($header['comment_len'] != 0) {
+            $header['comment'] = fread($this->fh, $header['comment_len']);
+        } else {
+            $header['comment'] = '';
+        }
+
+        $header['mtime']           = $this->makeUnixTime($header['mdate'], $header['mtime']);
+        $header['stored_filename'] = $header['filename'];
+        $header['status']          = 'ok';
+        if (substr($header['filename'], -1) == '/') {
+            $header['external'] = 0x41FF0010;
+        }
+        $header['folder'] = ($header['external'] == 0x41FF0010 || $header['external'] == 16) ? 1 : 0;
+
+        return $header;
+    }
+
+    /**
+     * Reads the local file header
+     *
+     * This header precedes each individual file inside the zip file. Assumes the current file pointer is pointing at
+     * the right position already. Enhances the given central header with the data found at the local header.
+     *
+     * @param array $header the central file header read previously (see above)
+     * @return array
+     */
+    protected function readFileHeader($header)
+    {
+        $binary_data = fread($this->fh, 30);
+        $data        = unpack(
+            'vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len',
+            $binary_data
+        );
+
+        $header['filename'] = fread($this->fh, $data['filename_len']);
+        if ($data['extra_len'] != 0) {
+            $header['extra'] = fread($this->fh, $data['extra_len']);
+        } else {
+            $header['extra'] = '';
+        }
+
+        $header['compression'] = $data['compression'];
+        foreach (array(
+                     'size',
+                     'compressed_size',
+                     'crc'
+                 ) as $hd) { // On ODT files, these headers are 0. Keep the previous value.
+            if ($data[$hd] != 0) {
+                $header[$hd] = $data[$hd];
+            }
+        }
+        $header['flag']  = $data['flag'];
+        $header['mtime'] = $this->makeUnixTime($data['mdate'], $data['mtime']);
+
+        $header['stored_filename'] = $header['filename'];
+        $header['status']          = "ok";
+        $header['folder']          = ($header['external'] == 0x41FF0010 || $header['external'] == 16) ? 1 : 0;
+        return $header;
+    }
+
+    /**
+     * Create fileinfo object from header data
+     *
+     * @param $header
+     * @return FileInfo
+     */
+    protected function header2fileinfo($header)
+    {
+        $fileinfo = new FileInfo();
+        $fileinfo->setPath($header['filename']);
+        $fileinfo->setSize($header['size']);
+        $fileinfo->setCompressedSize($header['compressed_size']);
+        $fileinfo->setMtime($header['mtime']);
+        $fileinfo->setComment($header['comment']);
+        $fileinfo->setIsdir($header['external'] == 0x41FF0010 || $header['external'] == 16);
+        return $fileinfo;
+    }
+
+    /**
+     * Write to the open filepointer or memory
+     *
+     * @param string $data
+     * @throws ArchiveIOException
+     * @return int number of bytes written
+     */
+    protected function writebytes($data)
+    {
+        if (!$this->file) {
+            $this->memory .= $data;
+            $written = strlen($data);
+        } else {
+            $written = @fwrite($this->fh, $data);
+        }
+        if ($written === false) {
+            throw new ArchiveIOException('Failed to write to archive stream');
+        }
+        return $written;
+    }
+
+    /**
+     * Current data pointer position
+     *
+     * @fixme might need a -1
+     * @return int
+     */
+    protected function dataOffset()
+    {
+        if ($this->file) {
+            return ftell($this->fh);
+        } else {
+            return strlen($this->memory);
+        }
+    }
+
+    /**
+     * Create a DOS timestamp from a UNIX timestamp
+     *
+     * DOS timestamps start at 1980-01-01, earlier UNIX stamps will be set to this date
+     *
+     * @param $time
+     * @return int
+     */
+    protected function makeDosTime($time)
+    {
+        $timearray = getdate($time);
+        if ($timearray['year'] < 1980) {
+            $timearray['year']    = 1980;
+            $timearray['mon']     = 1;
+            $timearray['mday']    = 1;
+            $timearray['hours']   = 0;
+            $timearray['minutes'] = 0;
+            $timearray['seconds'] = 0;
+        }
+        return (($timearray['year'] - 1980) << 25) |
+        ($timearray['mon'] << 21) |
+        ($timearray['mday'] << 16) |
+        ($timearray['hours'] << 11) |
+        ($timearray['minutes'] << 5) |
+        ($timearray['seconds'] >> 1);
+    }
+
+    /**
+     * Create a UNIX timestamp from a DOS timestamp
+     *
+     * @param $mdate
+     * @param $mtime
+     * @return int
+     */
+    protected function makeUnixTime($mdate = null, $mtime = null)
+    {
+        if ($mdate && $mtime) {
+            $year = (($mdate & 0xFE00) >> 9) + 1980;
+            $month = ($mdate & 0x01E0) >> 5;
+            $day = $mdate & 0x001F;
+
+            $hour = ($mtime & 0xF800) >> 11;
+            $minute = ($mtime & 0x07E0) >> 5;
+            $seconde = ($mtime & 0x001F) << 1;
+
+            $mtime = mktime($hour, $minute, $seconde, $month, $day, $year);
+        } else {
+            $mtime = time();
+        }
+
+        return $mtime;
+    }
+
+    /**
+     * Returns a local file header for the given data
+     *
+     * @param int $offset location of the local header
+     * @param int $ts unix timestamp
+     * @param int $crc CRC32 checksum of the uncompressed data
+     * @param int $len length of the uncompressed data
+     * @param int $clen length of the compressed data
+     * @param string $name file name
+     * @param boolean|null $comp if compression is used, if null it's determined from $len != $clen
+     * @return string
+     */
+    protected function makeCentralFileRecord($offset, $ts, $crc, $len, $clen, $name, $comp = null)
+    {
+        if(is_null($comp)) $comp = $len != $clen;
+        $comp = $comp ? 8 : 0;
+        $dtime = dechex($this->makeDosTime($ts));
+
+        $header = "\x50\x4b\x01\x02"; // central file header signature
+        $header .= pack('v', 14); // version made by - VFAT
+        $header .= pack('v', 20); // version needed to extract - 2.0
+        $header .= pack('v', 0); // general purpose flag - no flags set
+        $header .= pack('v', $comp); // compression method - deflate|none
+        $header .= pack(
+            'H*',
+            $dtime[6] . $dtime[7] .
+            $dtime[4] . $dtime[5] .
+            $dtime[2] . $dtime[3] .
+            $dtime[0] . $dtime[1]
+        ); //  last mod file time and date
+        $header .= pack('V', $crc); // crc-32
+        $header .= pack('V', $clen); // compressed size
+        $header .= pack('V', $len); // uncompressed size
+        $header .= pack('v', strlen($name)); // file name length
+        $header .= pack('v', 0); // extra field length
+        $header .= pack('v', 0); // file comment length
+        $header .= pack('v', 0); // disk number start
+        $header .= pack('v', 0); // internal file attributes
+        $header .= pack('V', 0); // external file attributes  @todo was 0x32!?
+        $header .= pack('V', $offset); // relative offset of local header
+        $header .= $name; // file name
+
+        return $header;
+    }
+
+    /**
+     * Returns a local file header for the given data
+     *
+     * @param int $ts unix timestamp
+     * @param int $crc CRC32 checksum of the uncompressed data
+     * @param int $len length of the uncompressed data
+     * @param int $clen length of the compressed data
+     * @param string $name file name
+     * @param boolean|null $comp if compression is used, if null it's determined from $len != $clen
+     * @return string
+     */
+    protected function makeLocalFileHeader($ts, $crc, $len, $clen, $name, $comp = null)
+    {
+        if(is_null($comp)) $comp = $len != $clen;
+        $comp = $comp ? 8 : 0;
+        $dtime = dechex($this->makeDosTime($ts));
+
+        $header = "\x50\x4b\x03\x04"; //  local file header signature
+        $header .= pack('v', 20); // version needed to extract - 2.0
+        $header .= pack('v', 0); // general purpose flag - no flags set
+        $header .= pack('v', $comp); // compression method - deflate|none
+        $header .= pack(
+            'H*',
+            $dtime[6] . $dtime[7] .
+            $dtime[4] . $dtime[5] .
+            $dtime[2] . $dtime[3] .
+            $dtime[0] . $dtime[1]
+        ); //  last mod file time and date
+        $header .= pack('V', $crc); // crc-32
+        $header .= pack('V', $clen); // compressed size
+        $header .= pack('V', $len); // uncompressed size
+        $header .= pack('v', strlen($name)); // file name length
+        $header .= pack('v', 0); // extra field length
+        $header .= $name;
+        return $header;
+    }
+}