[pkg-horde] [SCM] Debian Horde Packages repository: gollem package branch, debian-sid, updated. 18a786c0276a5ec4e8e09b677efb69a0035880ac

Gregory Colpart reg at foulademer.gcolpart.com
Sat May 2 11:58:36 UTC 2009


The following commit has been merged in the debian-sid branch:
commit e113e8dac10fa602a39c8ea5dacad4fbd8718eb4
Author: Gregory Colpart <reg at foulademer.gcolpart.com>
Date:   Sat May 2 13:07:29 2009 +0200

    merge from upstream

diff --git a/COPYING b/COPYING
index 5a965fb..a6b6756 100644
--- a/COPYING
+++ b/COPYING
@@ -1,7 +1,7 @@
 		    GNU GENERAL PUBLIC LICENSE
 		       Version 2, June 1991
 
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ Copyright 1989, 1991 Free Software Foundation, Inc.
      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
diff --git a/README b/README
index 5b10d35..a3f5253 100644
--- a/README
+++ b/README
@@ -1,8 +1,8 @@
 What is Gollem?
 ===============
 
-:Last update:   $Date: 2005/11/11 23:10:38 $
-:Revision:      $Revision: 1.6.2.1 $
+:Last update:   $Date: 2008/10/13 09:32:22 $
+:Revision:      $Revision: 1.6.2.2 $
 :Contact:       gollem at lists.horde.org
 
 .. contents:: Contents
diff --git a/clipboard.php b/clipboard.php
index 7698880..abdb6e0 100644
--- a/clipboard.php
+++ b/clipboard.php
@@ -1,22 +1,23 @@
 <?php
 /**
- * $Horde: gollem/clipboard.php,v 1.4.2.4 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/clipboard.php,v 1.4.2.6 2009/01/06 15:23:53 jan Exp $
  *
- * Copyright 2005-2007 Michael Slusarz <slusarz at horde.org>
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
- * did notcan receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Michael Slusarz <slusarz at horde.org>
  */
 
 @define('GOLLEM_BASE', dirname(__FILE__));
 require_once GOLLEM_BASE . '/lib/base.php';
-require_once 'Horde/Template.php';
 
 $dir = Util::getFormData('dir');
 
 $title = _("Clipboard");
-
-Horde::addScriptFile('stripe.js', 'gollem', true);
+Horde::addScriptFile('prototype.js', 'gollem', true);
+Horde::addScriptFile('tables.js', 'gollem', true);
 require GOLLEM_TEMPLATES . '/common-header.inc';
 Gollem::menu();
 Gollem::status();
@@ -32,7 +33,7 @@ foreach ($_SESSION['gollem']['clipboard'] as $key => $val) {
 }
 
 /* Set up the template object. */
-$template = &new Horde_Template();
+$template = new Gollem_Template();
 $template->setOption('gettext', true);
 $template->set('cancelbutton', _("Cancel"));
 $template->set('clearbutton', _("Clear"));
diff --git a/config/backends.php.dist b/config/backends.php.dist
index 6ad4ed2..89d3086 100644
--- a/config/backends.php.dist
+++ b/config/backends.php.dist
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: gollem/config/backends.php.dist,v 1.41.2.7 2006/11/27 03:32:40 slusarz Exp $
+ * $Horde: gollem/config/backends.php.dist,v 1.41.2.8 2008/10/09 20:54:40 jan Exp $
  *
  * This file is where you specify what backends people using your
  * installation of Gollem can log in to. There are a number of properties
@@ -13,7 +13,9 @@
  *         Valid options:
  *           'file'  --  Work with a local file system.
  *           'ftp'   --  Connect to a FTP server.
+ *           'smb'   --  Connect to a SMB fileshare.
  *           'sql'   --  Connect to VFS filesystem stored in SQL database.
+ *           'ssh2'  --  Connect to a remote server via SSH2.
  *
  * preferred: This is only useful if you want to use the same backend.php
  *            file for different machines: if the hostname of the Gollem
@@ -79,6 +81,7 @@
  *
  * attributes: The list of attributes that the driver supports. Available
  *             attributes:
+ *               'edit'
  *               'download'
  *               'group'
  *               'modified'
@@ -109,6 +112,8 @@ $backends['ftp'] = array(
         // IDs from the local password file.  This is useful only if the FTP
         // server is running on localhost or if the local user/group
         // IDs are identical to the remote FTP server.
+        // You must be running a version of Horde >= 3.1 for this parameter to
+        // have any effect.
         // 'maplocalids' => true,
         // The default permissions to set for newly created folders and files.
         // 'permissions' => '750'
@@ -125,7 +130,7 @@ $backends['ftp'] = array(
     // 'filter' => '^regex$',
     // 'quota' => false,
     'clipboard' => true,
-    'attributes' => array('type', 'name', 'download', 'modified', 'size', 'permission', 'owner', 'group')
+    'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size', 'permission', 'owner', 'group')
 );
 
 // This backend uses Horde credentials to automatically log in.
@@ -166,7 +171,7 @@ $backends['hordeftp'] = array(
     // 'filter' => '^regex$',
     // 'quota' => false,
     'clipboard' => true,
-    'attributes' => array('type', 'name', 'download', 'modified', 'size', 'permission', 'owner', 'group')
+    'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size', 'permission', 'owner', 'group')
 );
 
 // SQL Example.
@@ -178,7 +183,8 @@ $backends['sql'] = array(
 
     // The default connection details are pulled from the Horde-wide SQL
     // connection configuration.
-    'params' => array_merge($GLOBALS['conf']['sql'], array('table' => 'horde_vfs')),
+    'params' => array_merge($GLOBALS['conf']['sql'],
+                            array('table' => 'horde_vfs')),
 
     // If you need different connection details than from the Horde-wide SQL
     // connection configuration, uncomment and set the following lines.
@@ -202,7 +208,7 @@ $backends['sql'] = array(
     // 'filter' => '^regex$',
     // 'quota' => false,
     'clipboard' => false,
-    'attributes' => array('type', 'name', 'download', 'modified', 'size', 'permission', 'owner', 'group')
+    'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size')
 );
 
 // This backend specifies a home directory and root directory in a SQL vfs.
@@ -214,7 +220,8 @@ $backends['sqlhome'] = array(
 
     // The default connection details are pulled from the Horde-wide SQL
     // connection configuration.
-    'params' => array_merge($GLOBALS['conf']['sql'], array('table' => 'horde_vfs')),
+    'params' => array_merge($GLOBALS['conf']['sql'],
+                            array('table' => 'horde_vfs')),
 
     // If you need different connection details than from the Horde-wide SQL
     // connection configuration, uncomment and set the following lines.
@@ -238,7 +245,7 @@ $backends['sqlhome'] = array(
     // 'filter' => '^regex$',
     // 'quota' => false,
     'clipboard' => false,
-    'attributes' => array('type', 'name', 'download', 'modified', 'size', 'permission', 'owner', 'group'),
+    'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size', 'permission', 'owner', 'group'),
 );
 
 // NOTE: /exampledir/home and all subdirectories should be, for
@@ -263,7 +270,7 @@ $backends['file'] = array(
     // 'filter' => '^regex$',
     // 'quota' => false,
     'clipboard' => true,
-    'attributes' => array('type', 'name', 'download', 'modified', 'size', 'permission', 'owner', 'group')
+    'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size', 'permission', 'owner', 'group')
 );
 
 // SMB Example
@@ -302,5 +309,46 @@ $backends['file'] = array(
 //     // 'filter' => '^regex$',
 //     // 'quota' => false,
 //     'clipboard' => true,
-//     'attributes' => array('type', 'name', 'download', 'modified', 'size')
+//     'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size')
+// );
+
+// SSH2 Example
+// ** For the SSH2 backend to work, you must be using a version of Horde
+// ** that contains the SSH2 VFS driver. See the test.php script to determine
+// ** whether the SSH2 driver is present on your system.
+// $backends['ssh2'] = array(
+//     'name' => 'SSH2 Server',
+//     'driver' => 'ssh2',
+//     'preferred' => '',
+//     'hordeauth' => false,
+//     'params' => array(
+//         // The hostname/IP Address of the SSH server
+//         'hostspec' => 'ssh2.example.com',
+//         // The port number of the SSH server
+//         'port' => 22,
+//         // Set timeout (in seconds) for the SSH server. Default: 90 seconds
+//         // 'timeout' => 90,
+//         // If true and the POSIX extension is available the driver will map
+//         // the user and group IDs returned from the SSH server with the local
+//         // IDs from the local password file.  This is useful only if the SSH
+//         // server is running on localhost or if the local user/group
+//         // IDs are identical to the remote SSH server.
+//         // 'maplocalids' => true,
+//         // The default permissions to set for newly created folders and
+//         // files.
+//         // 'permissions' => '750'
+//     ),
+//     'loginparams' => array(
+//         // Allow the user to change the SSH server
+//         // 'hostspec' => 'Hostname',
+//         // Allow the user to change the SSH port
+//         // 'port' => 'Port'
+//     ),
+//     // 'root' => '',
+//     // 'home' => '',
+//     // 'createhome' => false,
+//     // 'filter' => '^regex$',
+//     // 'quota' => false,
+//     'clipboard' => true,
+//     'attributes' => array('type', 'name', 'edit', 'download', 'modified', 'size', 'permission', 'owner', 'group')
 // );
diff --git a/config/conf.xml b/config/conf.xml
index 28f4fbb..2c4ceea 100644
--- a/config/conf.xml
+++ b/config/conf.xml
@@ -1,29 +1,42 @@
 <?xml version="1.0"?>
-<!-- $Horde: gollem/config/conf.xml,v 1.5.2.2 2005/12/11 18:31:18 slusarz Exp $ -->
+<!-- $Horde: gollem/config/conf.xml,v 1.5.2.3 2008/10/09 20:54:40 jan Exp $ -->
 <configuration>
  <configtab name="manager" desc="File Manager Settings">
-  <configsection name="manager">
-   <configheader>File Manager settings</configheader>
-   <configstring name="date_format" desc="Date Format used in File List">%x</configstring>
-  </configsection>
-
   <configsection name="backend">
    <configheader>Backend Settings</configheader>
-   <configenum name="backend_list" desc="Should we display a list of backends (defined in config/backends.php) for users to choose from? The options are 'shown', 'hidden', and 'none'. If the backend list is hidden then you can use the 'preferred' mechanism to auto-select from it based on an HTTP virtualhost or another piece of data. If it is shown, the user will be able to pick from any of the options. If none, no server list will be shown and the defaults will be used unless another mechanism changes them.">
-    hidden
+   <configenum name="backend_list" desc="Should we display a list of backends
+   (defined in config/backends.php) for users to choose from? The options are
+   'none', 'hidden', and 'shown'. If 'none', no server list will be shown and
+   and the defaults will be used unless another mechanism changes them. If the
+   the backend list is 'hidden' then you can use the 'preferred' mechanism to
+   auto-select from it based on an HTTP virtualhost or another piece of data.
+   If it is 'shown', the user will be able to pick from any of the
+   options.">none
     <values>
      <value>none</value>
-     <value>shown</value>
      <value>hidden</value>
+     <value>shown</value>
     </values>
    </configenum>
   </configsection>
+  <configsection name="foldercache">
+   <configheader>Caching</configheader>
+   <configswitch name="use_cache" desc="Cache the folder list?">false
+    <case name="false" desc="No" />
+    <case name="true" desc="Yes">
+     <configinteger name="lifetime" desc="Cache lifetime, in seconds.  If
+     using the Memcache driver this will only have an effect in Horde 3.2 or
+     later.">120</configinteger>
+    </case>
+   </configswitch>
+  </configsection>
  </configtab>
 
  <configtab name="menu" desc="Menu Settings">
   <configsection name="menu">
    <configheader>Menu settings</configheader>
-   <configmultienum name="apps" desc="Select any applications that should be linked in Gollem's menu">
+   <configmultienum name="apps" desc="Select any applications that should be
+   linked in Gollem's menu">
    <values>
     <configspecial name="list-horde-apps" />
    </values>
diff --git a/config/credentials.php.dist b/config/credentials.php.dist
index 9db5979..f709c3d 100644
--- a/config/credentials.php.dist
+++ b/config/credentials.php.dist
@@ -10,7 +10,7 @@
  * File stores are defined in 'backends.php'.
  * Default user preferences are defined in 'prefs.php'.
  *
- * $Horde: gollem/config/credentials.php.dist,v 1.3 2003/02/22 17:13:23 chuck Exp $
+ * $Horde: gollem/config/credentials.php.dist,v 1.3.2.1 2008/10/09 20:54:40 jan Exp $
  */
 
 $credentials['username'] = array(
diff --git a/config/menu.php.dist b/config/menu.php.dist
index fe6029c..429d6c0 100644
--- a/config/menu.php.dist
+++ b/config/menu.php.dist
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: gollem/config/menu.php.dist,v 1.5 2005/08/15 05:36:27 slusarz Exp $
+ * $Horde: gollem/config/menu.php.dist,v 1.5.2.1 2008/10/09 20:54:40 jan Exp $
  *
  * This file lets you extend Gollem's menu with your own items.
  *
diff --git a/config/mime_drivers.php.dist b/config/mime_drivers.php.dist
index 204284e..b424082 100644
--- a/config/mime_drivers.php.dist
+++ b/config/mime_drivers.php.dist
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: gollem/config/mime_drivers.php.dist,v 1.8 2005/03/18 21:10:31 slusarz Exp $
+ * $Horde: gollem/config/mime_drivers.php.dist,v 1.8.2.1 2008/10/09 20:54:40 jan Exp $
  *
  * Decide which output drivers you want to activate for Gollem.
  * Settings in this file override settings in horde/config/mime_drivers.php.
@@ -27,6 +27,9 @@ $mime_drivers_map['gollem']['overrides'] = array();
 /**
  * Image driver settings
  */
-$mime_drivers['gollem']['images']['inline'] = true;
-$mime_drivers['gollem']['images']['handles'] = array(
-    'image/*');
+$mime_drivers['gollem']['images'] = array(
+    'inline' => true,
+    'handles' => array(
+        'image/*'
+    )
+);
diff --git a/config/prefs.php.dist b/config/prefs.php.dist
index 3e152f8..1663644 100644
--- a/config/prefs.php.dist
+++ b/config/prefs.php.dist
@@ -1,22 +1,19 @@
 <?php
 /**
- * $Horde: gollem/config/prefs.php.dist,v 1.32 2005/06/16 05:47:44 slusarz Exp $
+ * $Horde: gollem/config/prefs.php.dist,v 1.32.2.1 2008/10/09 20:54:40 jan Exp $
  *
  * See horde/config/prefs.php for documentation on the structure of this file.
  */
 
 // Make sure that constants are defined.
-// To respect Debian FHS policy, config/ is in /etc/ directory
-// Then we need use hardcoded parameter in Debian
- at define('GOLLEM_BASE', '/usr/share/horde3/gollem');
-require_once GOLLEM_BASE . '/lib/Gollem.php';
+require_once dirname(__FILE__) . '/../lib/Gollem.php';
 
 $prefGroups['display'] = array(
     'column' => _("User Interface"),
     'label' => _("File Display"),
     'desc' => _("Change your file sorting options."),
     'members' => array('show_dotfiles', 'sortdirsfirst', 'columnselect',
-                       'sortby', 'sortdir'));
+                       'sortby', 'sortdir', 'perpage'));
 
 $prefGroups['settings'] = array(
     'column' => _("User Interface"),
@@ -37,15 +34,15 @@ $_prefs['show_dotfiles'] = array(
 $_prefs['columnselect'] = array(
     'locked' => false,
     'type' => 'special'
-); 
- 
+);
+
 // columns to be displayed
 $_prefs['columns'] = array(
     'value' => "ftp\ttype\tname\tdownload\tmodified\tsize\tpermission\towner\tgroup",
     'locked' => false,
     'shared' => false,
     'type' => 'implicit'
-); 
+);
 
 // user preferred sorting column
 $_prefs['sortby'] = array(
@@ -84,7 +81,16 @@ $_prefs['sortdirsfirst'] = array(
     'desc' => _("List folders first?")
 );
 
-//user preferred recursive deletes
+// number of items per page
+$_prefs['perpage'] = array(
+    'value' => 20,
+    'locked' => false,
+    'shared' => true,
+    'type' => 'number',
+    'desc' => _("Items per page")
+);
+
+// user preferred recursive deletes
 $_prefs['recursive_deletes'] = array(
     'value' => 'disabled',
     'locked' => false,
diff --git a/docs/CHANGES b/docs/CHANGES
index 4bb8dc8..b8e0c6c 100644
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -1,10 +1,55 @@
+----
+v1.1
+----
+
+[jan] Fix attachment dialog with only a single autologin backend (Bug #7096).
+[jan] Start with first page again when filter string is changed (Bug #7935).
+[mms] Navigation link now uses description from backends.php (Request #8037,
+      Thomas Reifferscheid <thomas at reifferscheid.org>).
+[mms] Fix autologin when switching backends on login page (Bug #7892,
+      horde at smartsector.hu).
+
+
+--------
+v1.1-RC1
+--------
+
+[mms] Add folder caching.
+[mms] Add pager navigation and filtering (Request #7160, joel at scopserv.com).
+[jan] Add Estonian translation (Alar Sing <alar.sing at err.ee>).
+[jan] Add Basque translation (Euskal Herriko Unibertsitatea EHU/UPV
+      <xabier.arrieta at ehu.es>).
+[cjh] Use the Horde date_format preference (Bug #6683).
+[cjh] Apply fix for http://dev.rubyonrails.org/ticket/11473 to prototype.js
+      (Request #6590).
+[jan] Add Turkish translation (METU <horde-tr at metu.edu.tr>).
+[cjh] If the VFS backend supports streams, use them to avoid reading entire
+      files into memory when downloading (Request #5913).
+[mms] Compress download data.
+[jan] Add Ukrainian translation (Andriy Kopystyansky <anri at polynet.lviv.ua>).
+[bak] Add browse API to allow browsing backends through WebDAV (Request #5337).
+[cjh] Inline PHP-generated javascript to avoid cross-domain leaking
+      (Bug #5307).
+[mms] Preserve URL anchor information when performing login.
+[mms] All javascript now contained in static, cacheable files.
+[cjh] Add javascript sortable tables to Gollem.
+[cjh] Use optimized Horde_Template code as Gollem_Template.
+[cjh] Fix javascript errors when filenames contain quotes (Bug #3824),
+      and make several links work without JavaScript.
+[jan] Add editing of text files.
+[mms] Add examples/checks for SSH2 VFS driver.
+[jan] Add Slovak translation (Martin Matuška <martin at matuska.org>).
+[cjh] Fix uploading files to non-empty directories when deletion is disabled
+      (Bug #5349).
+
+
 ------
 v1.0.3
 ------
 
 [jan] Add Catalan translation (Jordi Giralt <projecte.k2 at upcnet.es>).
 [jan] Add Slovenian translation (Duck <duck at obala.net>).
-[jan] Add Brazilian Portuguese translation (Fábio Gomes <flgoms at uol.com.br>).
+[jan] Add Brazilian Portuguese translation (Fábio Gomes <flgoms at uol.com.br>).
 [mms] Don't show quota link in menu if quota support for current backend is
       disabled.
 
@@ -181,7 +226,7 @@ v1.0-ALPHA
 [cjh] Use the new Notification system.
 [cjh] Use GOLLEM_TEMPLATES constant for all template paths.
 [cjh] Use $registry->get() for all Registry information.
-[jan] Add Swedish translation (Andreas Dahlén <andreas at dahlen.ws>).
+[jan] Add Swedish translation (Andreas Dahlén <andreas at dahlen.ws>).
 [jan] Remove the standard value for the language preference. The language to
       fall back to should be set Horde wide in lang.php instead.
 [jan] Add Korean translation (J.I Kim <aporie at netian.com>).
diff --git a/docs/CREDITS b/docs/CREDITS
index 898aa1d..db04958 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -6,20 +6,17 @@
 Core Developers
 ===============
 
-Max Kalika <max at horde.org>
-
-- initial implementation
-
-Michael Slusarz <slusarz at curecanti.org>
-
-- current maintainer
+- Michael Slusarz <slusarz at curecanti.org>
 
 
 Localization
 ============
 
 ======================  ===============================================
-Brazilian Portuguese    Fábio Gomes <flgoms at uol.com.br>
+Basque                  Euskal Herriko Unibertsitatea <xabier.arrieta at ehu.es>
+Brazilian Portuguese    Fábio Gomes <flgoms at uol.com.br>
+                        Luis Felipe Marzagao <duli at fedoraproject.org>
+                        Eduardo de Carli <carliedu at ig.com.br>
 Bulgarian               Miroslav Pendev <pendev at hotmail.com>
 Catalan                 Jordi Giralt <projecte.k2 at upcnet.es>
 Chinese (Traditional)   David Chang <david at tmv.gov.tw>
@@ -27,9 +24,10 @@ Czech                   Pavel Chytil <pchytil at asp.ogi.edu>
 Danish                  Brian Truelsen <horde+i18n at briantruelsen.dk>
 Dutch                   Jan Kuipers <jrkuipers at lauwerscollege.nl>
                         Peter Arien <peter.arien at cc.kuleuven.ac.be>
+Estonian                Alar Sing <alar.sing at err.ee>
 Finnish                 Leena Heino <leena.heino at uta.fi>
 French                  Remi Cohen-Scali <Remi at Cohen-Scali.com>
-                        Benoit St-André <ben at benoitst-andre.net>
+                        Benoit St-André <ben at benoitst-andre.net>
                         Pierre Lachance <pl at pierrelachance.net>
 German                  Jan Schneider <jan at horde.org>
 Hungarian               Laszlo L. Tornoci <torlasz at xenia.sote.hu>
@@ -40,11 +38,22 @@ Korean                  J.I Kim <aporie at netian.com>
 Latvian                 Janis Eisaks <jancs at dv.lv>
 Norwegian Nynorsk       Per-Stian Vatne <psv at orsta.org>
 Polish                  Krzysztof Kozlowski <kozik1 at o2.pl>
+                        Tadeusz Lesiecki <lesiecki at tmtsystem.pl>
+                        Piotr Tarnowski <drfugazi at drfugazi.eu.org>
 Romanian                Eugen Hoanca <eugenh at urban-grafx.ro>
-Slovenian               Duck <duck at obala.net>
-Spanish                 Raúl Alvarez Venegas <rav at tecoman.ucol.mx>
-                        Manuel Perez Ayala <mperaya at alcazaba.unex.es>
-Swedish                 Andreas Dahlén <andreas at dahlen.ws>
 Russian                 Anton Nekhoroshih <anton at valuehost.ru>
+Slovak                  Martin Matuška <martin at matuska.org>
                         Alexey Zakharov <baber at mosga.net>
+Slovenian               Duck <duck at obala.net>
+Spanish                 Raúl Alvarez Venegas <rav at tecoman.ucol.mx>
+                        Manuel Perez Ayala <mperaya at alcazaba.unex.es>
+Swedish                 Andreas Dahlén <andreas at dahlen.ws>
+Turkish                 Middle East Technical University <horde-tr at metu.edu.tr>
+Ukrainian               Andriy Kopystyansky <anri at polynet.lviv.ua>
 ======================  ===============================================
+
+
+Inactive Developers
+===================
+
+- Max Kalika <max at horde.org>
diff --git a/docs/INSTALL b/docs/INSTALL
index fc37e9e..a546b3a 100644
--- a/docs/INSTALL
+++ b/docs/INSTALL
@@ -2,8 +2,8 @@
  Installing Gollem 1.0
 =======================
 
-:Last update:   $Date: 2005/08/12 07:39:52 $
-:Revision:      $Revision: 1.14 $
+:Last update:   $Date: 2008/10/09 20:54:41 $
+:Revision:      $Revision: 1.14.2.1 $
 :Contact:       gollem at lists.horde.org
 
 .. contents:: Contents
@@ -87,6 +87,13 @@ To function properly, Gollem **REQUIRES** the following:
 3. If using a FTP backend, you **must** have at least one FTP server.
    If using a SQL backend, you **must** have at least one SQL server.
 
+4. If the ability to browse files using WebDAV is desired, the
+   HTTP_WebDAV_Server PEAR module is required.
+
+   To install, enter the following at the command prompt::
+
+       pear install HTTP_WebDAV_Server
+
 
 Installing Gollem
 =================
@@ -186,7 +193,7 @@ subscription information can be found at
 
   http://www.horde.org/mail/
 
-Lastly, Horde developers, contributors and users also make appearances on IRC,
+Lastly, Horde developers, contributors and users may also be found on IRC,
 on the channel #horde on the Freenode Network (irc.freenode.net).
 
 Please keep in mind that Gollem is free software written by volunteers.
diff --git a/docs/RELEASE_NOTES b/docs/RELEASE_NOTES
index 972d155..d154309 100644
--- a/docs/RELEASE_NOTES
+++ b/docs/RELEASE_NOTES
@@ -12,32 +12,37 @@
  * 8 - Minor security fixes
  * 9 - Major security fixes
  */
-$this->notes['fm']['focus'] = 6;
+$this->notes['fm']['focus'] = 5;
 
 /* Mailing list release notes. */
 $this->notes['ml']['changes'] = <<<ML
 The Horde Team is pleased to announce the final release of the Gollem File
-Manager version H3 (1.0.3).
+Manager version H3 (1.1).
 
 Gollem is a web-based file manager, providing the ability to fully manage a
 hierarchical file system stored in a variety of backends such as a SQL
-database, as part of a real filesystem, or on an FTP server.
+database, as part of a real filesystem, an FTP server, or an SSH2 server.
 
-The major changes compared to the Gollem H3 (1.0.2) version are:
-    * Don't show quota link in menu if quota support for current backend is
-      disabled.
-    * Added translations: Brazilian Portugese, Catalan, Slovanian.
-    * Updated translations: Finnish, German, Italian, Spanish, Traditional
-      Chinese.
+The major changes compared to Gollem version H3 (1.1-RC1) are:
+    * Use backend description instead of "Root" in the navigation links.
+    * Small bug fixes.
+
+Gollem version H3 (1.1) is a major upgrade in the 1.x release series,
+including these enhancements:
+    * Improved templating of output code to ease local customization.
+    * Javascript code now uses the prototype js library, resulting in more
+      robust code and more available functionality - for example, sortable
+      tables.
+    * Editing of text files in the browser.
+    * Browse API to allow browsing backends through WebDAV.
+    * And much more.
+
+Note that several of these new features require Horde 3.2+.
 ML;
 
 /* Freshmeat release notes. */
 $this->notes['fm']['changes'] = <<<FM
-Don't show quota link in menu if quota support for current backend is
-disabled.
-Brazilian Portugese, Catalan, and Slovanian translations have been added and
-Finnish, German, Italian, Spanish, Traditional Chinese translation have been
-updated.
+New in this release: Improved templating of output code to ease local customization. Javascript code uses prototype js library: more robust code and more available functionality including sortable tables. Editing of text files in the browser. Browse API to allow browsing backends through WebDAV.
 FM;
 
 $this->notes['name'] = 'Gollem';
diff --git a/docs/TODO b/docs/TODO
deleted file mode 100644
index 32cee00..0000000
--- a/docs/TODO
+++ /dev/null
@@ -1,17 +0,0 @@
-==============================
- Gollem Development TODO List
-==============================
-
-:Last update:   $Date: 2005/08/02 06:18:42 $
-:Revision:      $Revision: 1.5 $
-:Contact:       gollem at lists.horde.org
-
-- Manager: permissions
-
-- Manager: file typing
-
-- Manager: viewing/editing
-
-- Manager: cache directories
-
-- Manager: find files
diff --git a/edit.php b/edit.php
new file mode 100644
index 0000000..013926d
--- /dev/null
+++ b/edit.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * $Horde: gollem/edit.php,v 1.5.2.2 2009/01/06 15:23:53 jan Exp $
+ *
+ * Copyright 2006-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Jan Schneider <jan at horde.org>
+ */
+
+ at define('GOLLEM_BASE', dirname(__FILE__));
+require_once GOLLEM_BASE . '/lib/base.php';
+
+$actionID = Util::getFormData('actionID');
+$driver = Util::getFormData('driver');
+$filedir = Util::getFormData('dir');
+$filename = Util::getFormData('file');
+$type = Util::getFormData('type');
+
+if ($driver != $GLOBALS['gollem_be']['driver']) {
+    Util::closeWindowJS();
+    exit;
+}
+
+/* Run through action handlers. */
+switch ($actionID) {
+case 'save_file':
+    $data = Util::getFormData('content');
+    $result = $gollem_vfs->writeData($filedir, $filename, $data);
+    if (is_a($result, 'PEAR_Error')) {
+        $message = sprintf(_("Access denied to %s"), $filename);
+    } else {
+        $message = sprintf(_("%s successfully saved."), $filename);
+    }
+    Util::closeWindowJS('alert(\'' . addslashes($message) . '\');');
+    exit;
+
+case 'edit_file':
+    $data = $gollem_vfs->read($filedir, $filename);
+    if (is_a($data, 'PEAR_Error')) {
+        Util::closeWindowJS('alert(\'' . addslashes(sprintf(_("Access denied to %s"), $filename)) . '\');');
+        exit;
+    }
+    require_once 'Horde/MIME/Magic.php';
+    $mime_type = MIME_Magic::extToMIME($type);
+    if (strpos($mime_type, 'text/') !== 0) {
+        Util::closeWindowJS();
+    }
+    if ($mime_type == 'text/html') {
+        require_once 'Horde/Editor.php';
+        $editor = &Horde_Editor::singleton('xinha', array('id' => 'content'));
+    }
+    require GOLLEM_TEMPLATES . '/common-header.inc';
+    Gollem::status();
+    require GOLLEM_TEMPLATES . '/edit/edit.inc';
+    require $registry->get('templates', 'horde') . '/common-footer.inc';
+    exit;
+}
+
+Util::closeWindowJS();
diff --git a/index.php b/index.php
index 25f8b2e..980bd59 100644
--- a/index.php
+++ b/index.php
@@ -1,20 +1,22 @@
 <?php
 /**
- * $Horde: gollem/index.php,v 1.20.2.2 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/index.php,v 1.20.2.4 2009/01/06 15:23:53 jan Exp $
  *
- * Copyright 1999-2007 Charles J. Hagenbuch <chuck at horde.org>
- * Copyright 1999-2007 Max Kalika <max at horde.org>
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Max Kalika <max at horde.org>
+ * @author Chuck Hagenbuch <chuck at horde.org>
  */
 
-define('GOLLEM_BASE', dirname(__FILE__));
-$gollem_configured = (@is_readable(GOLLEM_BASE . '/config/backends.php') &&
-                      @is_readable(GOLLEM_BASE . '/config/conf.php') &&
-                      @is_readable(GOLLEM_BASE . '/config/credentials.php') &&
-                      @is_readable(GOLLEM_BASE . '/config/mime_drivers.php') &&
-                      @is_readable(GOLLEM_BASE . '/config/prefs.php'));
+ at define('GOLLEM_BASE', dirname(__FILE__));
+$gollem_configured = (is_readable(GOLLEM_BASE . '/config/backends.php') &&
+                      is_readable(GOLLEM_BASE . '/config/conf.php') &&
+                      is_readable(GOLLEM_BASE . '/config/credentials.php') &&
+                      is_readable(GOLLEM_BASE . '/config/mime_drivers.php') &&
+                      is_readable(GOLLEM_BASE . '/config/prefs.php'));
 
 if (!$gollem_configured) {
     require GOLLEM_BASE . '/../lib/Test.php';
diff --git a/js/columnselect.js b/js/columnselect.js
new file mode 100644
index 0000000..43d85c1
--- /dev/null
+++ b/js/columnselect.js
@@ -0,0 +1 @@
+var columns=[];function selectSource(){var F=document.prefs;var D="";while(F.unselected_columns.length>1){F.unselected_columns.options[F.unselected_columns.length-1]=null}while(F.selected_columns.length>1){F.selected_columns.options[F.selected_columns.length-1]=null}if(F.source.selectedIndex<1){return}var E=F.source.selectedIndex-1;var C=[];var B=[];for(var A=1;A<columns[E].length;A++){if(columns[E][A][2]){C[columns[E][A][3]]=[columns[E][A][1],columns[E][A][0]]}else{B[B.length]=[columns[E][A][1],columns[E][A][0]]}}for(A=0;A<C.length;A++){F.selected_columns.options[A+1]=new Option(C[A][0],C[A][1])}for(A=0;A<B.length;A++){F.unselected_columns.options[A+1]=new Option(B[A][0],B[A][1])}}function deselectHeaders(){document.prefs.unselected_columns[0].selected=false;document.prefs.selected_columns[0].selected=false}function resetHidden(){var C="";for(var B=0;B<columns.length;B++){if(B>0){C+="\n"}C+=columns[B][0];for(var A=1;A<columns[B].length;A++){if(columns[B][A][2]){C+="\t"+columns[B][A][0]}}}document.prefs.columns.value=C}function addColumn(){var C=document.prefs;var B=C.source.selectedIndex-1;for(i=1;i<C.unselected_columns.length;i++){if(C.unselected_columns[i].selected){for(var A=1;A<columns[B].length;A++){if(columns[B][A][0]==C.unselected_columns[i].value){columns[B][A][2]=true}}C.selected_columns[C.selected_columns.length]=new Option(C.unselected_columns[i].text,C.unselected_columns[i].value);C.unselected_columns[i]=null;i--}}resetHidden()}function removeColumn(){var C=document.prefs;var B=C.source.selectedIndex-1;for(i=1;i<C.selected_columns.length;i++){if(C.selected_columns[i].selected){for(var A=1;A<columns[B].length;A++){if(columns[B][A][0]==C.selected_columns[i].value){columns[B][A][2]=false}}C.unselected_columns[C.unselected_columns.length]=new Option(C.selected_columns[i].text,C.selected_columns[i].value);C.selected_columns[i]=null;i--}}resetHidden()}function moveColumnUp(){var D=document.prefs;var C=D.selected_columns.selectedIndex;var B=D.source.selectedIndex-1;if(C<=1||D.selected_columns.length<=2){return}D.selected_columns.selectedIndex=C;var A=D.selected_columns[C].value;tmp=[];for(i=1;i<D.selected_columns.length;i++){tmp[i-1]=new Option(D.selected_columns[i].text,D.selected_columns[i].value)}for(i=0;i<tmp.length;i++){if(i+1==C-1){D.selected_columns[i+1]=tmp[i+1]}else{if(i+1==C){D.selected_columns[i+1]=tmp[i-1]}else{D.selected_columns[i+1]=tmp[i]}}}D.selected_columns.selectedIndex=C-1;for(i=2;i<columns[B].length-1;i++){if(columns[B][i][0]==A){column=columns[B][i];columns[B][i]=columns[B][i-1];columns[B][i-1]=column}}resetHidden()}function moveColumnDown(){var C=document.prefs;var B=C.selected_columns.selectedIndex;var A=C.source.selectedIndex-1;if(B==-1||C.selected_columns.length<=2||B==C.selected_columns.length-1){return}C.selected_columns.selectedIndex=B;var D=C.selected_columns[B].value;tmp=[];for(i=1;i<C.selected_columns.length;i++){tmp[i-1]=new Option(C.selected_columns[i].text,C.selected_columns[i].value)}for(i=0;i<tmp.length;i++){if(i+1==B){C.selected_columns[i+1]=tmp[i+1]}else{if(i+1==B+1){C.selected_columns[i+1]=tmp[i-1]}else{C.selected_columns[i+1]=tmp[i]}}}C.selected_columns.selectedIndex=B+1;for(i=columns[A].length-2;i>0;i--){if(columns[A][i][0]==D||columns[A][i+1][0]==D){column=columns[A][i];columns[A][i]=columns[A][i+1];columns[A][i+1]=column}}resetHidden()};
\ No newline at end of file
diff --git a/js/login.js b/js/login.js
new file mode 100644
index 0000000..e523b32
--- /dev/null
+++ b/js/login.js
@@ -0,0 +1 @@
+function setFocus(){if(document.gollem_login.username){document.gollem_login.username.focus()}}function gollem_reload(){var A=reload_url+document.gollem_login.backend_key[document.gollem_login.backend_key.selectedIndex].value;if(document.gollem_login.url&&document.gollem_login.url.value){A+="&url="+document.gollem_login.url.value}window.location=A}function submit_login(){if(document.gollem_login.username&&document.gollem_login.username.value==""){alert(GollemText.login_username);document.gollem_login.username.focus();return false}else{if(document.gollem_login.password&&document.gollem_login.password.value==""){alert(GollemText.login_password);document.gollem_login.password.focus();return false}else{document.gollem_login.loginButton.disabled=true;if(ie_clientcaps){try{document.gollem_login.ie_version.value=objCCaps.getComponentVersion("{89820200-ECBD-11CF-8B85-00AA005B4383}","componentid")}catch(A){}}document.gollem_login.submit();return true}}}function selectLang(){var A="login.php?new_lang="+document.gollem_login.new_lang[document.gollem_login.new_lang.selectedIndex].value;if(lang_url!==null){A+="&url="+lang_url}self.location=A}function removeHash(A){if(A==null||A==undefined){return null}else{if(A.length&&A.charAt(0)=="#"){if(A.length==1){return""}else{return A.substring(1)}}}return A}Event.observe(window,"load",function(){if(gollem_auth&&parent.frames.horde_main){if(nomenu){parent.location=self.location}else{document.gollem_login.target="_parent"}}if(location.hash){$("anchor_string").value=removeHash(location.hash)}});
\ No newline at end of file
diff --git a/js/manager.js b/js/manager.js
new file mode 100644
index 0000000..76e8149
--- /dev/null
+++ b/js/manager.js
@@ -0,0 +1 @@
+var Gollem={toggleRow:function(){$$("table.striped tr").each(function(A){var B=A.select("TD");A.observe("mouseover",B.invoke.bind(B,"addClassName","selected"));A.observe("mouseout",B.invoke.bind(B,"removeClassName","selected"))})},getChecked:function(){return this.getElements().findAll(function(A){return A.checked})},getElements:function(){return $("manager").getInputs(null,"items[]")},getSelected:function(){return this.getChecked().pluck("value").join("\n")},getItemsArray:function(){var A=0,B=$("manager").getInputs(null,"itemTypes[]");return this.getElements().collect(function(C){return{c:C.checked,v:C.value,t:B[A++].value}})},getSelectedFoldersList:function(){return this.getItemsArray().collect(function(A){return(A.c&&A.t=="**dir")?A.v:null}).compact().join("\n")},chooseAction:function(A){var B=$F("action"+A);switch(B){case"paste_items":$("actionID").setValue("paste_items");$("manager").submit();break;default:if(!this.getChecked().size()){alert(GollemText.select_item);break}switch(B){case"rename_items":this.renameItems();break;case"delete_items":this.deleteItems();break;case"chmod_modify":$("attributes").show();break;case"cut_items":$("actionID").setValue("cut_items");$("manager").submit();break;case"copy_items":$("actionID").setValue("copy_items");$("manager").submit();break}break}},changeDirectory:function(A){this._prepPopup("changeDirectory",A.element());$("cdfrm_fname").focus();A.stop()},createFolder:function(A){this._prepPopup("createFolder",A.element());$("createfrm_fname").focus();A.stop()},_prepPopup:function(A,B){this.getChecked().each(function(C){C.checked=false});$(A).clonePosition(B,{setWidth:false,setHeight:false,offsetTop:B.getHeight()}).show()},renameItems:function(){var A=this.getChecked();if(A.size()){A[0].checked=false;$("rename").show();$("renamefrm_oldname").setValue(A[0].value);$("renamefrm_newname").setValue(A[0].value).focus()}},deleteItems:function(){var A=true,B;if(window.confirm(GollemText.delete_confirm_1+"\n"+this.getSelected()+"\n"+GollemText.delete_confirm_2)){if(warn_recursive){B=this.getSelectedFoldersList();if(!B.empty()&&!window.confirm(GollemText.delete_recurs_1+"\n"+B+"\n"+GollemText.delete_recurs_2)){A=false}}}else{A=false}if(A){$("actionID").setValue("delete_items");$("manager").submit()}},toggleSelection:function(){var B=this.getElements(),A=(this.getChecked().size()!=B.length);B.each(function(C){C.checked=A})},createFolderOK:function(){$("createFolder").hide();if($F("createfrm_fname")){$("new_folder").setValue($F("createfrm_fname"));$("actionID").setValue("create_folder");$("manager").submit()}},createFolderKeyCheck:function(A){switch(A.keyCode){case Event.KEY_ESC:this.createFolderCancel();return false;case EVENT.KEY_RETURN:this.createFolderOK();return false}return true},createFolderCancel:function(){$("createFolder").hide();$("createfrm").reset()},chmodCancel:function(){$("attributes").hide();$("chmodfrm").reset()},chmodSave:function(){var A=group=owner=0;$("chmodfrm").getElements().each(function(B){if(B.name=="owner[]"&&B.checked){owner|=B.value}else{if(B.name=="group[]"&&B.checked){group|=B.value}else{if(B.name=="all[]"&&B.checked){A|=B.value}}}});$("attributes").hide();$("chmod").setValue("0"+owner+""+group+""+A);$("actionID").setValue("chmod_modify");$("manager").submit()},renameOK:function(){var E=this.getChecked(),B=$F("renamefrm_newname"),D=$F("new_names"),C=$F("renamefrm_oldname"),A=$F("old_names");if(B&&B!=C){D+="|"+B;A+="|"+C}if(D.startsWith("|")){D=D.substring(1)}if(A.startsWith("|")){A=A.substring(1)}$("new_names").setValue(D);$("old_names").setValue(A);if(E.size()){E[0].checked=false;found=true;$("rename").show();$F(E[0]).focus()}else{$("actionID").setValue("rename_items");$("manager").submit()}return false},renameCancel:function(){$("new_names","old_names").invoke("setValue","");$("rename").hide()},renameKeyCheck:function(A){switch(A.keyCode){case Event.KEY_ESC:this.renameCancel();return false;case EVENT.KEY_RETURN:this.renameOK();return false}return true},changeDirectoryOK:function(){$("changeDirectory").hide();if($F("cdfrm_fname")){$("dir").setValue($F("cdfrm_fname"));$("manager").submit()}},changeDirectoryKeyCheck:function(A){switch(A.keyCode){case Event.KEY_ESC:this.changeDirectoryCancel();return false;case EVENT.KEY_RETURN:this.changeDirectoryOK();return false}return true},changeDirectoryCancel:function(){$("changeDirectory").hide();$("cdfrm").reset()},uploadFields:function(){return $("manager").getInputs("file").collect(function(A){return(A.name.substr(0,12)=="file_upload_")?A:null}).compact()},uploadFile:function(){if(this.uploadsExist()){$("actionID").setValue("upload_file");$("manager").submit()}},applyFilter:function(){$("manager").submit()},clearFilter:function(){$("filter").setValue("");this.applyFilter()},uploadsExist:function(){if(GollemVar.empty_input||this.uploadFields().find(function(A){return $F(A)})){return true}alert(GollemText.specify_upload);$("file_upload_1").focus();return false},uploadChanged:function(){if(GollemVar.empty_input){return}var B,D,A=this.uploadFields(),C=A.findAll(function(E){return $F(E).length}).length;if(C==A.length){D=$("upload_row_"+C);if(D){B=new Element("INPUT",{type:"file",name:"file_upload_"+(C+1),size:25});D.insert({after:new Element("DIV",{id:"upload_row_"+(C+1)}).insert(new Element("STRONG").insert(GollemText.file+" "+(C+1)+":")).insert(" ").insert(B)});B.observe("change",this.uploadChanged.bind(this))}}},doPrefsUpdate:function(B,A){try{new Ajax.Request(GollemVar.prefs_api,{parameters:{app:"gollem",pref:"sortby",value:B.substring(1)}});new Ajax.Request(GollemVar.prefs_api,{parameters:{app:"gollem",pref:"sortdir",value:A}})}catch(C){}}};function table_sortCallback(C,B,A){if(Gollem.prefs_update_timeout){window.clearTimeout(Gollem.prefs_update_timeout)}Gollem.prefs_update_timeout=Gollem.doPrefsUpdate.bind(this,B,A).delay(0.3)}document.observe("dom:loaded",function(){var A;Gollem.toggleRow();if(A=$("createfolder")){A.observe("click",Gollem.createFolder.bindAsEventListener(Gollem))}if(A=$("changefolder")){A.observe("click",Gollem.changeDirectory.bindAsEventListener(Gollem))}});
\ No newline at end of file
diff --git a/js/popup.js b/js/popup.js
new file mode 100644
index 0000000..6a3bceb
--- /dev/null
+++ b/js/popup.js
@@ -0,0 +1 @@
+function popup_gollem(F,G,B,E){if(!G){G=600}var A=screen.width;if(G>(A-75)){G=A-75}if(!B){B=500}var A=screen.width;if(G>(A-75)){G=A-75}var D=new Date();var C=D.getTime();if(F.indexOf("?")==-1){var H="?"}else{var H="&"}if(E!=""){F=F+H+unescape(E)+"&uniq="+C}else{F=F+H+"uniq="+C}param="toolbar=no,location=no,status=yes,scrollbars=yes,resizable=yes,width="+G+",height="+B+",left=0,top=0";win=window.open(F,C,param);if(!win){alert(GollemText.popup_block)}else{if(typeof win.name=="undefined"){win.name=C}if(typeof win.opener=="undefined"){win.opener=self}win.focus()}};
\ No newline at end of file
diff --git a/js/prototype.js b/js/prototype.js
new file mode 100644
index 0000000..3c2493f
--- /dev/null
+++ b/js/prototype.js
@@ -0,0 +1 @@
+var Prototype={Version:"1.6.0.3",Browser:{IE:!!(window.attachEvent&&navigator.userAgent.indexOf("Opera")===-1),Opera:navigator.userAgent.indexOf("Opera")>-1,WebKit:navigator.userAgent.indexOf("AppleWebKit/")>-1,Gecko:navigator.userAgent.indexOf("Gecko")>-1&&navigator.userAgent.indexOf("KHTML")===-1,MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)},BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:document.createElement("div")["__proto__"]&&document.createElement("div")["__proto__"]!==document.createElement("form")["__proto__"]},ScriptFragment:"<script[^>]*>([\\S\\s]*?)<\/script>",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(a){return a}};if(Prototype.Browser.MobileSafari){Prototype.BrowserFeatures.SpecificElementExtensions=false}var Class={create:function(){var e=null,d=$A(arguments);if(Object.isFunction(d[0])){e=d.shift()}function a(){this.initialize.apply(this,arguments)}Object.extend(a,Class.Methods);a.superclass=e;a.subclasses=[];if(e){var b=function(){};b.prototype=e.prototype;a.prototype=new b;e.subclasses.push(a)}for(var c=0;c<d.length;c++){a.addMethods(d[c])}if(!a.prototype.initialize){a.prototype.initialize=Prototype.emptyFunction}a.prototype.constructor=a;return a}};Class.Methods={addMethods:function(g){var c=this.superclass&&this.superclass.prototype;var b=Object.keys(g);if(!Object.keys({toString:true}).length){b.push("toString","valueOf")}for(var a=0,d=b.length;a<d;a++){var f=b[a],e=g[f];if(c&&Object.isFunction(e)&&e.argumentNames().first()=="$super"){var h=e;e=(function(i){return function(){return c[i].apply(this,arguments)}})(f).wrap(h);e.valueOf=h.valueOf.bind(h);e.toString=h.toString.bind(h)}this.prototype[f]=e}return this}};var Abstract={};Object.extend=function(a,c){for(var b in c){a[b]=c[b]}return a};Object.extend(Object,{inspect:function(a){try{if(Object.isUndefined(a)){return"undefined"}if(a===null){return"null"}return a.inspect?a.inspect():String(a)}catch(b){if(b instanceof RangeError){return"..."}throw b}},toJSON:function(a){var c=typeof a;switch(c){case"undefined":case"function":case"unknown":return;case"boolean":return a.toString()}if(a===null){return"null"}if(a.toJSON){return a.toJSON()}if(Object.isElement(a)){return}var b=[];for(var e in a){var d=Object.toJSON(a[e]);if(!Object.isUndefined(d)){b.push(e.toJSON()+": "+d)}}return"{"+b.join(", ")+"}"},toQueryString:function(a){return $H(a).toQueryString()},toHTML:function(a){return a&&a.toHTML?a.toHTML():String.interpret(a)},keys:function(a){var b=[];for(var c in a){b.push(c)}return b},values:function(b){var a=[];for(var c in b){a.push(b[c])}return a},clone:function(a){return Object.extend({},a)},isElement:function(a){return!!(a&&a.nodeType==1)},isArray:function(a){return a!=null&&typeof a=="object"&&"splice"in a&&"join"in a},isHash:function(a){return a instanceof Hash},isFunction:function(a){return typeof a=="function"},isString:function(a){return typeof a=="string"},isNumber:function(a){return typeof a=="number"},isUndefined:function(a){return typeof a=="undefined"}});Object.extend(Function.prototype,{argumentNames:function(){var a=this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1].replace(/\s+/g,"").split(",");return a.length==1&&!a[0]?[]:a},bind:function(){if(arguments.length<2&&Object.isUndefined(arguments[0])){return this}var a=this,c=$A(arguments),b=c.shift();return function(){return a.apply(b,c.concat($A(arguments)))}},bindAsEventListener:function(){var a=this,c=$A(arguments),b=c.shift();return function(d){return a.apply(b,[d||window.event].concat(c))}},curry:function(){if(!arguments.length){return this}var a=this,b=$A(arguments);return function(){return a.apply(this,b.concat($A(arguments)))}},delay:function(){var a=this,b=$A(arguments),c=b.shift()*1000;return window.setTimeout(function(){return a.apply(a,b)},c)},defer:function(){var a=[0.01].concat($A(arguments));return this.delay.apply(this,a)},wrap:function(b){var a=this;return function(){return b.apply(this,[a.bind(this)].concat($A(arguments)))}},methodize:function(){if(this._methodized){return this._methodized}var a=this;return this._methodized=function(){return a.apply(null,[this].concat($A(arguments)))}}});Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+"-"+(this.getUTCMonth()+1).toPaddedString(2)+"-"+this.getUTCDate().toPaddedString(2)+"T"+this.getUTCHours().toPaddedString(2)+":"+this.getUTCMinutes().toPaddedString(2)+":"+this.getUTCSeconds().toPaddedString(2)+'Z"'};var Try={these:function(){var c;for(var b=0,d=arguments.length;b<d;b++){var a=arguments[b];try{c=a();break}catch(f){}}return c}};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(a){return String(a).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")};var PeriodicalExecuter=Class.create({initialize:function(b,a){this.callback=b;this.frequency=a;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},execute:function(){this.callback(this)},stop:function(){if(!this.timer){return}clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute()}finally{this.currentlyExecuting=false}}}});Object.extend(String,{interpret:function(a){return a==null?"":String(a)},specialChar:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\\":"\\\\"}});Object.extend(String.prototype,{gsub:function(e,c){var a="",d=this,b;c=arguments.callee.prepareReplacement(c);while(d.length>0){if(b=d.match(e)){a+=d.slice(0,b.index);a+=String.interpret(c(b));d=d.slice(b.index+b[0].length)}else{a+=d,d=""}}return a},sub:function(c,a,b){a=this.gsub.prepareReplacement(a);b=Object.isUndefined(b)?1:b;return this.gsub(c,function(d){if(--b<0){return d[0]}return a(d)})},scan:function(b,a){this.gsub(b,a);return String(this)},truncate:function(b,a){b=b||30;a=Object.isUndefined(a)?"...":a;return this.length>b?this.slice(0,b-a.length)+a:String(this)},strip:function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,"")},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")},extractScripts:function(){var b=new RegExp(Prototype.ScriptFragment,"img");var a=new RegExp(Prototype.ScriptFragment,"im");return(this.match(b)||[]).map(function(c){return(c.match(a)||["",""])[1]})},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)})},escapeHTML:function(){var a=arguments.callee;a.text.data=this;return a.div.innerHTML},unescapeHTML:function(){var a=new Element("div");a.innerHTML=this.stripTags();return a.childNodes[0]?(a.childNodes.length>1?$A(a.childNodes).inject("",function(b,c){return b+c.nodeValue}):a.childNodes[0].nodeValue):""},toQueryParams:function(b){var a=this.strip().match(/([^?#]*)(#.*)?$/);if(!a){return{}}return a[1].split(b||"&").inject({},function(e,f){if((f=f.split("="))[0]){var c=decodeURIComponent(f.shift());var d=f.length>1?f.join("="):f[0];if(d!=undefined){d=decodeURIComponent(d)}if(c in e){if(!Object.isArray(e[c])){e[c]=[e[c]]}e[c].push(d)}else{e[c]=d}}return e})},toArray:function(){return this.split("")},succ:function(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)},times:function(a){return a<1?"":new Array(a+1).join(this)},camelize:function(){var d=this.split("-"),a=d.length;if(a==1){return d[0]}var c=this.charAt(0)=="-"?d[0].charAt(0).toUpperCase()+d[0].substring(1):d[0];for(var b=1;b<a;b++){c+=d[b].charAt(0).toUpperCase()+d[b].substring(1)}return c},capitalize:function(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()},underscore:function(){return this.gsub(/::/,"/").gsub(/([A-Z]+)([A-Z][a-z])/,"#{1}_#{2}").gsub(/([a-z\d])([A-Z])/,"#{1}_#{2}").gsub(/-/,"_").toLowerCase()},dasherize:function(){return this.gsub(/_/,"-")},inspect:function(b){var a=this.gsub(/[\x00-\x1f\\]/,function(c){var d=String.specialChar[c[0]];return d?d:"\\u00"+c[0].charCodeAt().toPaddedString(2,16)});if(b){return'"'+a.replace(/"/g,'\\"')+'"'}return"'"+a.replace(/'/g,"\\'")+"'"},toJSON:function(){return this.inspect(true)},unfilterJSON:function(a){return this.sub(a||Prototype.JSONFilter,"#{1}")},isJSON:function(){var a=this;if(a.blank()){return false}a=this.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,"");return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(a)},evalJSON:function(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON()){return eval("("+json+")")}}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())},include:function(a){return this.indexOf(a)>-1},startsWith:function(a){return this.indexOf(a)===0},endsWith:function(a){var b=this.length-a.length;return b>=0&&this.lastIndexOf(a)===b},empty:function(){return this==""},blank:function(){return/^\s*$/.test(this)},interpolate:function(a,b){return new Template(this,b).evaluate(a)}});if(Prototype.Browser.WebKit||Prototype.Browser.IE){Object.extend(String.prototype,{escapeHTML:function(){return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},unescapeHTML:function(){return this.stripTags().replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">")}})}String.prototype.gsub.prepareReplacement=function(b){if(Object.isFunction(b)){return b}var a=new Template(b);return function(c){return a.evaluate(c)}};String.prototype.parseQuery=String.prototype.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.createElement("div"),text:document.createTextNode("")});String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);var Template=Class.create({initialize:function(a,b){this.template=a.toString();this.pattern=b||Template.Pattern},evaluate:function(a){if(Object.isFunction(a.toTemplateReplacements)){a=a.toTemplateReplacements()}return this.template.gsub(this.pattern,function(d){if(a==null){return""}var f=d[1]||"";if(f=="\\"){return d[2]}var b=a,g=d[3];var e=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;d=e.exec(g);if(d==null){return f}while(d!=null){var c=d[1].startsWith("[")?d[2].gsub("\\\\]","]"):d[1];b=b[c];if(null==b||""==d[3]){break}g=g.substring("["==d[3]?d[1].length:d[0].length);d=e.exec(g)}return f+String.interpret(b)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable={each:function(c,b){var a=0;try{this._each(function(e){c.call(b,e,a++)})}catch(d){if(d!=$break){throw d}}return this},eachSlice:function(d,c,b){var a=-d,e=[],f=this.toArray();if(d<1){return f}while((a+=d)<f.length){e.push(f.slice(a,a+d))}return e.collect(c,b)},all:function(c,b){c=c||Prototype.K;var a=true;this.each(function(e,d){a=a&&!!c.call(b,e,d);if(!a){throw $break}});return a},any:function(c,b){c=c||Prototype.K;var a=false;this.each(function(e,d){if(a=!!c.call(b,e,d)){throw $break}});return a},collect:function(c,b){c=c||Prototype.K;var a=[];this.each(function(e,d){a.push(c.call(b,e,d))});return a},detect:function(c,b){var a;this.each(function(e,d){if(c.call(b,e,d)){a=e;throw $break}});return a},findAll:function(c,b){var a=[];this.each(function(e,d){if(c.call(b,e,d)){a.push(e)}});return a},grep:function(d,c,b){c=c||Prototype.K;var a=[];if(Object.isString(d)){d=new RegExp(d)}this.each(function(f,e){if(d.match(f)){a.push(c.call(b,f,e))}});return a},include:function(a){if(Object.isFunction(this.indexOf)){if(this.indexOf(a)!=-1){return true}}var b=false;this.each(function(c){if(c==a){b=true;throw $break}});return b},inGroupsOf:function(b,a){a=Object.isUndefined(a)?null:a;return this.eachSlice(b,function(c){while(c.length<b){c.push(a)}return c})},inject:function(a,c,b){this.each(function(e,d){a=c.call(b,a,e,d)});return a},invoke:function(b){var a=$A(arguments).slice(1);return this.map(function(c){return c[b].apply(c,a)})},max:function(c,b){c=c||Prototype.K;var a;this.each(function(e,d){e=c.call(b,e,d);if(a==null||e>=a){a=e}});return a},min:function(c,b){c=c||Prototype.K;var a;this.each(function(e,d){e=c.call(b,e,d);if(a==null||e<a){a=e}});return a},partition:function(d,b){d=d||Prototype.K;var c=[],a=[];this.each(function(f,e){(d.call(b,f,e)?c:a).push(f)});return[c,a]},pluck:function(b){var a=[];this.each(function(c){a.push(c[b])});return a},reject:function(c,b){var a=[];this.each(function(e,d){if(!c.call(b,e,d)){a.push(e)}});return a},sortBy:function(b,a){return this.map(function(d,c){return{value:d,criteria:b.call(a,d,c)}}).sort(function(f,e){var d=f.criteria,c=e.criteria;return d<c?-1:d>c?1:0}).pluck("value")},toArray:function(){return this.map()},zip:function(){var b=Prototype.K,a=$A(arguments);if(Object.isFunction(a.last())){b=a.pop()}var c=[this].concat(a).map($A);return this.map(function(e,d){return b(c.pluck(d))})},size:function(){return this.toArray().length},inspect:function(){return"#<Enumerable:"+this.toArray().inspect()+">"}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.all,some:Enumerable.any});function $A(c){if(!c){return[]}if(c.toArray){return c.toArray()}var b=c.length||0,a=new Array(b);while(b--){a[b]=c[b]}return a}if(Prototype.Browser.WebKit){$A=function(c){if(!c){return[]}if(!(typeof c==="function"&&typeof c.length==="number"&&typeof c.item==="function")&&c.toArray){return c.toArray()}var b=c.length||0,a=new Array(b);while(b--){a[b]=c[b]}return a}}Array.from=$A;Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse){Array.prototype._reverse=Array.prototype.reverse}Object.extend(Array.prototype,{_each:function(b){for(var a=0,c=this.length;a<c;a++){b(this[a])}},clear:function(){this.length=0;return this},first:function(){return this[0]},last:function(){return this[this.length-1]},compact:function(){return this.select(function(a){return a!=null})},flatten:function(){return this.inject([],function(b,a){return b.concat(Object.isArray(a)?a.flatten():[a])})},without:function(){var a=$A(arguments);return this.select(function(b){return!a.include(b)})},reverse:function(a){return(a!==false?this:this.toArray())._reverse()},reduce:function(){return this.length>1?this:this[0]},uniq:function(a){return this.inject([],function(d,c,b){if(0==b||(a?d.last()!=c:!d.include(c))){d.push(c)}return d})},intersect:function(a){return this.uniq().findAll(function(b){return a.detect(function(c){return b===c})})},clone:function(){return[].concat(this)},size:function(){return this.length},inspect:function(){return"["+this.map(Object.inspect).join(", ")+"]"},toJSON:function(){var a=[];this.each(function(b){var c=Object.toJSON(b);if(!Object.isUndefined(c)){a.push(c)}});return"["+a.join(", ")+"]"}});if(Object.isFunction(Array.prototype.forEach)){Array.prototype._each=Array.prototype.forEach}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(c,a){a||(a=0);var b=this.length;if(a<0){a=b+a}for(;a<b;a++){if(this[a]===c){return a}}return-1}}if(!Array.prototype.lastIndexOf){Array.prototype.lastIndexOf=function(b,a){a=isNaN(a)?this.length:(a<0?this.length+a:a)+1;var c=this.slice(0,a).reverse().indexOf(b);return(c<0)?c:a-c-1}}Array.prototype.toArray=Array.prototype.clone;function $w(a){if(!Object.isString(a)){return[]}a=a.strip();return a?a.split(/\s+/):[]}if(Prototype.Browser.Opera){Array.prototype.concat=function(){var e=[];for(var b=0,c=this.length;b<c;b++){e.push(this[b])}for(var b=0,c=arguments.length;b<c;b++){if(Object.isArray(arguments[b])){for(var a=0,d=arguments[b].length;a<d;a++){e.push(arguments[b][a])}}else{e.push(arguments[b])}}return e}}Object.extend(Number.prototype,{toColorPart:function(){return this.toPaddedString(2,16)},succ:function(){return this+1},times:function(b,a){$R(0,this,true).each(b,a);return this},toPaddedString:function(c,b){var a=this.toString(b||10);return"0".times(c-a.length)+a},toJSON:function(){return isFinite(this)?this.toString():"null"}});$w("abs round ceil floor").each(function(a){Number.prototype[a]=Math[a].methodize()});function $H(a){return new Hash(a)}var Hash=Class.create(Enumerable,(function(){function a(b,c){if(Object.isUndefined(c)){return b}return b+"="+encodeURIComponent(String.interpret(c))}return{initialize:function(b){this._object=Object.isHash(b)?b.toObject():Object.clone(b)},_each:function(c){for(var b in this._object){var d=this._object[b],e=[b,d];e.key=b;e.value=d;c(e)}},set:function(b,c){return this._object[b]=c},get:function(b){if(this._object[b]!==Object.prototype[b]){return this._object[b]}},unset:function(b){var c=this._object[b];delete this._object[b];return c},toObject:function(){return Object.clone(this._object)},keys:function(){return this.pluck("key")},values:function(){return this.pluck("value")},index:function(c){var b=this.detect(function(d){return d.value===c});return b&&b.key},merge:function(b){return this.clone().update(b)},update:function(b){return new Hash(b).inject(this,function(c,d){c.set(d.key,d.value);return c})},toQueryString:function(){return this.inject([],function(d,e){var c=encodeURIComponent(e.key),b=e.value;if(b&&typeof b=="object"){if(Object.isArray(b)){return d.concat(b.map(a.curry(c)))}}else{d.push(a(c,b))}return d}).join("&")},inspect:function(){return"#<Hash:{"+this.map(function(b){return b.map(Object.inspect).join(": ")}).join(", ")+"}>"},toJSON:function(){return Object.toJSON(this.toObject())},clone:function(){return new Hash(this)}}})());Hash.prototype.toTemplateReplacements=Hash.prototype.toObject;Hash.from=$H;var ObjectRange=Class.create(Enumerable,{initialize:function(c,a,b){this.start=c;this.end=a;this.exclusive=b},_each:function(a){var b=this.start;while(this.include(b)){a(b);b=b.succ()}},include:function(a){if(a<this.start){return false}if(this.exclusive){return a<this.end}return a<=this.end}});var $R=function(c,a,b){return new ObjectRange(c,a,b)};var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")})||false},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(a){this.responders._each(a)},register:function(a){if(!this.include(a)){this.responders.push(a)}},unregister:function(a){this.responders=this.responders.without(a)},dispatch:function(d,b,c,a){this.each(function(f){if(Object.isFunction(f[d])){try{f[d].apply(f,[b,c,a])}catch(g){}}})}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(a){this.options={method:"post",asynchronous:true,contentType:"application/x-www-form-urlencoded",encoding:"UTF-8",parameters:"",evalJSON:true,evalJS:true};Object.extend(this.options,a||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters)){this.options.parameters=this.options.parameters.toQueryParams()}else{if(Object.isHash(this.options.parameters)){this.options.parameters=this.options.parameters.toObject()}}}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,b,a){$super(a);this.transport=Ajax.getTransport();this.request(b)},request:function(b){this.url=b;this.method=this.options.method;var d=Object.clone(this.options.parameters);if(!["get","post"].include(this.method)){d._method=this.method;this.method="post"}this.parameters=d;if(d=Object.toQueryString(d)){if(this.method=="get"){this.url+=(this.url.include("?")?"&":"?")+d}else{if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){d+="&_="}}}try{var a=new Ajax.Response(this);if(this.options.onCreate){this.options.onCreate(a)}Ajax.Responders.dispatch("onCreate",this,a);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous){this.respondToReadyState.bind(this).defer(1)}this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=="post"?(this.options.postBody||d):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType){this.onStateChange()}}catch(c){this.dispatchException(c)}},onStateChange:function(){var a=this.transport.readyState;if(a>1&&!((a==4)&&this._complete)){this.respondToReadyState(this.transport.readyState)}},setRequestHeaders:function(){var e={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){e["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){e.Connection="close"}}if(typeof this.options.requestHeaders=="object"){var c=this.options.requestHeaders;if(Object.isFunction(c.push)){for(var b=0,d=c.length;b<d;b+=2){e[c[b]]=c[b+1]}}else{$H(c).each(function(f){e[f.key]=f.value})}}for(var a in e){this.transport.setRequestHeader(a,e[a])}},success:function(){var a=this.getStatus();return!a||(a>=200&&a<300)},getStatus:function(){try{return this.transport.status||0}catch(a){return 0}},respondToReadyState:function(a){var c=Ajax.Request.Events[a],b=new Ajax.Response(this);if(c=="Complete"){try{this._complete=true;(this.options["on"+b.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(b,b.headerJSON)}catch(d){this.dispatchException(d)}var f=b.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&f&&f.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+c]||Prototype.emptyFunction)(b,b.headerJSON);Ajax.Responders.dispatch("on"+c,this,b,b.headerJSON)}catch(d){this.dispatchException(d)}if(c=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var a=this.url.match(/^\s*https?:\/\/[^\/]*/);return!a||(a[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""}))},getHeader:function(a){try{return this.transport.getResponseHeader(a)||null}catch(b){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(a){(this.options.onException||Prototype.emptyFunction)(this,a);Ajax.Responders.dispatch("onException",this,a)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(c){this.request=c;var d=this.transport=c.transport,a=this.readyState=d.readyState;if((a>2&&!Prototype.Browser.IE)||a==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(d.responseText);this.headerJSON=this._getHeaderJSON()}if(a==4){var b=d.responseXML;this.responseXML=Object.isUndefined(b)?null:b;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(a){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(a){return null}},getResponseHeader:function(a){return this.transport.getResponseHeader(a)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var a=this.getHeader("X-JSON");if(!a){return null}a=decodeURIComponent(escape(a));try{return a.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}},_getResponseJSON:function(){var a=this.request.options;if(!a.evalJSON||(a.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json"))||this.responseText.blank()){return null}try{return this.responseText.evalJSON(a.sanitizeJSON||!this.request.isSameOrigin())}catch(b){this.request.dispatchException(b)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,a,c,b){this.container={success:(a.success||a),failure:(a.failure||(a.success?null:a))};b=Object.clone(b);var d=b.onComplete;b.onComplete=(function(e,f){this.updateContent(e.responseText);if(Object.isFunction(d)){d(e,f)}}).bind(this);$super(c,b)},updateContent:function(d){var c=this.container[this.success()?"success":"failure"],a=this.options;if(!a.evalScripts){d=d.stripScripts()}if(c=$(c)){if(a.insertion){if(Object.isString(a.insertion)){var b={};b[a.insertion]=d;c.insert(b)}else{a.insertion(c,d)}}else{c.update(d)}}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,a,c,b){$super(b);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=a;this.url=c;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(a){if(this.options.decay){this.decay=(a.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=a.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(b){if(arguments.length>1){for(var a=0,d=[],c=arguments.length;a<c;a++){d.push($(arguments[a]))}return d}if(Object.isString(b)){b=document.getElementById(b)}return Element.extend(b)}if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(f,a){var c=[];var e=document.evaluate(f,$(a)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var b=0,d=e.snapshotLength;b<d;b++){c.push(Element.extend(e.snapshotItem(b)))}return c}}if(!window.Node){var Node={}}if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12})}(function(){var a=this.Element;this.Element=function(d,c){c=c||{};d=d.toLowerCase();var b=Element.cache;if(Prototype.Browser.IE&&c.name){d="<"+d+' name="'+c.name+'">';delete c.name;return Element.writeAttribute(document.createElement(d),c)}if(!b[d]){b[d]=Element.extend(document.createElement(d))}return Element.writeAttribute(b[d].cloneNode(false),c)};Object.extend(this.Element,a||{});if(a){this.Element.prototype=a.prototype}}).call(window);Element.cache={};Element.Methods={visible:function(a){return $(a).style.display!="none"},toggle:function(a){a=$(a);Element[Element.visible(a)?"hide":"show"](a);return a},hide:function(a){a=$(a);a.style.display="none";return a},show:function(a){a=$(a);a.style.display="";return a},remove:function(a){a=$(a);a.parentNode.removeChild(a);return a},update:function(a,b){a=$(a);if(b&&b.toElement){b=b.toElement()}if(Object.isElement(b)){return a.update().insert(b)}b=Object.toHTML(b);a.innerHTML=b.stripScripts();b.evalScripts.bind(b).defer();return a},replace:function(b,c){b=$(b);if(c&&c.toElement){c=c.toElement()}else{if(!Object.isElement(c)){c=Object.toHTML(c);var a=b.ownerDocument.createRange();a.selectNode(b);c.evalScripts.bind(c).defer();c=a.createContextualFragment(c.stripScripts())}}b.parentNode.replaceChild(c,b);return b},insert:function(c,e){c=$(c);if(Object.isString(e)||Object.isNumber(e)||Object.isElement(e)||(e&&(e.toElement||e.toHTML))){e={bottom:e}}var d,f,b,g;for(var a in e){d=e[a];a=a.toLowerCase();f=Element._insertionTranslations[a];if(d&&d.toElement){d=d.toElement()}if(Object.isElement(d)){f(c,d);continue}d=Object.toHTML(d);b=((a=="before"||a=="after")?c.parentNode:c).tagName.toUpperCase();g=Element._getContentFromAnonymousElement(b,d.stripScripts());if(a=="top"||a=="after"){g.reverse()}g.each(f.curry(c));d.evalScripts.bind(d).defer()}return c},wrap:function(b,c,a){b=$(b);if(Object.isElement(c)){$(c).writeAttribute(a||{})}else{if(Object.isString(c)){c=new Element(c,a)}else{c=new Element("div",c)}}if(b.parentNode){b.parentNode.replaceChild(c,b)}c.appendChild(b);return c},inspect:function(b){b=$(b);var a="<"+b.tagName.toLowerCase();$H({id:"id",className:"class"}).each(function(f){var e=f.first(),c=f.last();var d=(b[e]||"").toString();if(d){a+=" "+c+"="+d.inspect(true)}});return a+">"},recursivelyCollect:function(a,c){a=$(a);var b=[];while(a=a[c]){if(a.nodeType==1){b.push(Element.extend(a))}}return b},ancestors:function(a){return $(a).recursivelyCollect("parentNode")},descendants:function(a){return $(a).select("*")},firstDescendant:function(a){a=$(a).firstChild;while(a&&a.nodeType!=1){a=a.nextSibling}return $(a)},immediateDescendants:function(a){if(!(a=$(a).firstChild)){return[]}while(a&&a.nodeType!=1){a=a.nextSibling}if(a){return[a].concat($(a).nextSiblings())}return[]},previousSiblings:function(a){return $(a).recursivelyCollect("previousSibling")},nextSiblings:function(a){return $(a).recursivelyCollect("nextSibling")},siblings:function(a){a=$(a);return a.previousSiblings().reverse().concat(a.nextSiblings())},match:function(b,a){if(Object.isString(a)){a=new Selector(a)}return a.match($(b))},up:function(b,d,a){b=$(b);if(arguments.length==1){return $(b.parentNode)}var c=b.ancestors();return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},down:function(b,c,a){b=$(b);if(arguments.length==1){return b.firstDescendant()}return Object.isNumber(c)?b.descendants()[c]:Element.select(b,c)[a||0]},previous:function(b,d,a){b=$(b);if(arguments.length==1){return $(Selector.handlers.previousElementSibling(b))}var c=b.previousSiblings();return Object.isNumber(d)?c[d]:Selector.findElement(c,d,a)},next:function(c,d,b){c=$(c);if(arguments.length==1){return $(Selector.handlers.nextElementSibling(c))}var a=c.nextSiblings();return Object.isNumber(d)?a[d]:Selector.findElement(a,d,b)},select:function(){var a=$A(arguments),b=$(a.shift());return Selector.findChildElements(b,a)},adjacent:function(){var a=$A(arguments),b=$(a.shift());return Selector.findChildElements(b.parentNode,a).without(b)},identify:function(b){b=$(b);var c=b.readAttribute("id"),a=arguments.callee;if(c){return c}do{c="anonymous_element_"+a.counter++}while($(c));b.writeAttribute("id",c);return c},readAttribute:function(c,a){c=$(c);if(Prototype.Browser.IE){var b=Element._attributeTranslations.read;if(b.values[a]){return b.values[a](c,a)}if(b.names[a]){a=b.names[a]}if(a.include(":")){return(!c.attributes||!c.attributes[a])?null:c.attributes[a].value}}return c.getAttribute(a)},writeAttribute:function(e,c,f){e=$(e);var b={},d=Element._attributeTranslations.write;if(typeof c=="object"){b=c}else{b[c]=Object.isUndefined(f)?true:f}for(var a in b){c=d.names[a]||a;f=b[a];if(d.values[a]){c=d.values[a](e,f)}if(f===false||f===null){e.removeAttribute(c)}else{if(f===true){e.setAttribute(c,c)}else{e.setAttribute(c,f)}}}return e},getHeight:function(a){return $(a).getDimensions().height},getWidth:function(a){return $(a).getDimensions().width},classNames:function(a){return new Element.ClassNames(a)},hasClassName:function(a,b){if(!(a=$(a))){return}var c=a.className;return(c.length>0&&(c==b||new RegExp("(^|\\s)"+b+"(\\s|$)").test(c)))},addClassName:function(a,b){if(!(a=$(a))){return}if(!a.hasClassName(b)){a.className+=(a.className?" ":"")+b}return a},removeClassName:function(a,b){if(!(a=$(a))){return}a.className=a.className.replace(new RegExp("(^|\\s+)"+b+"(\\s+|$)")," ").strip();return a},toggleClassName:function(a,b){if(!(a=$(a))){return}return a[a.hasClassName(b)?"removeClassName":"addClassName"](b)},cleanWhitespace:function(b){b=$(b);var c=b.firstChild;while(c){var a=c.nextSibling;if(c.nodeType==3&&!/\S/.test(c.nodeValue)){b.removeChild(c)}c=a}return b},empty:function(a){return $(a).innerHTML.blank()},descendantOf:function(b,a){b=$(b),a=$(a);if(b.compareDocumentPosition){return(b.compareDocumentPosition(a)&8)===8}if(a.contains){return a.contains(b)&&a!==b}while(b=b.parentNode){if(b==a){return true}}return false},scrollTo:function(a){a=$(a);var b=a.cumulativeOffset();window.scrollTo(b[0],b[1]);return a},getStyle:function(b,c){b=$(b);c=c=="float"?"cssFloat":c.camelize();var d=b.style[c];if(!d||d=="auto"){var a=document.defaultView.getComputedStyle(b,null);d=a?a[c]:null}if(c=="opacity"){return d?parseFloat(d):1}return d=="auto"?null:d},getOpacity:function(a){return $(a).getStyle("opacity")},setStyle:function(b,c){b=$(b);var e=b.style,a;if(Object.isString(c)){b.style.cssText+=";"+c;return c.include("opacity")?b.setOpacity(c.match(/opacity:\s*(\d?\.?\d*)/)[1]):b}for(var d in c){if(d=="opacity"){b.setOpacity(c[d])}else{e[(d=="float"||d=="cssFloat")?(Object.isUndefined(e.styleFloat)?"cssFloat":"styleFloat"):d]=c[d]}}return b},setOpacity:function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;return a},getDimensions:function(c){c=$(c);var g=c.getStyle("display");if(g!="none"&&g!=null){return{width:c.offsetWidth,height:c.offsetHeight}}var b=c.style;var f=b.visibility;var d=b.position;var a=b.display;b.visibility="hidden";b.position="absolute";b.display="block";var h=c.clientWidth;var e=c.clientHeight;b.display=a;b.position=d;b.visibility=f;return{width:h,height:e}},makePositioned:function(a){a=$(a);var b=Element.getStyle(a,"position");if(b=="static"||!b){a._madePositioned=true;a.style.position="relative";if(Prototype.Browser.Opera){a.style.top=0;a.style.left=0}}return a},undoPositioned:function(a){a=$(a);if(a._madePositioned){a._madePositioned=undefined;a.style.position=a.style.top=a.style.left=a.style.bottom=a.style.right=""}return a},makeClipping:function(a){a=$(a);if(a._overflow){return a}a._overflow=Element.getStyle(a,"overflow")||"auto";if(a._overflow!=="hidden"){a.style.overflow="hidden"}return a},undoClipping:function(a){a=$(a);if(!a._overflow){return a}a.style.overflow=a._overflow=="auto"?"":a._overflow;a._overflow=null;return a},cumulativeOffset:function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;b=b.offsetParent}while(b);return Element._returnOffset(c,a)},positionedOffset:function(b){var a=0,d=0;do{a+=b.offsetTop||0;d+=b.offsetLeft||0;b=b.offsetParent;if(b){if(b.tagName.toUpperCase()=="BODY"){break}var c=Element.getStyle(b,"position");if(c!=="static"){break}}}while(b);return Element._returnOffset(d,a)},absolutize:function(b){b=$(b);if(b.getStyle("position")=="absolute"){return b}var d=b.positionedOffset();var f=d[1];var e=d[0];var c=b.clientWidth;var a=b.clientHeight;b._originalLeft=e-parseFloat(b.style.left||0);b._originalTop=f-parseFloat(b.style.top||0);b._originalWidth=b.style.width;b._originalHeight=b.style.height;b.style.position="absolute";b.style.top=f+"px";b.style.left=e+"px";b.style.width=c+"px";b.style.height=a+"px";return b},relativize:function(a){a=$(a);if(a.getStyle("position")=="relative"){return a}a.style.position="relative";var c=parseFloat(a.style.top||0)-(a._originalTop||0);var b=parseFloat(a.style.left||0)-(a._originalLeft||0);a.style.top=c+"px";a.style.left=b+"px";a.style.height=a._originalHeight;a.style.width=a._originalWidth;return a},cumulativeScrollOffset:function(b){var a=0,c=0;do{a+=b.scrollTop||0;c+=b.scrollLeft||0;b=b.parentNode}while(b);return Element._returnOffset(c,a)},getOffsetParent:function(b){b=$(b);var d=b.offsetParent,a=document.body,c=document.documentElement;if(d&&d!==c){return $(d)}if(d===c||b===c||b===a){return $(a)}while((b=b.parentNode)&&b!==a){if(Element.getStyle(b,"position")!="static"){return $(b)}}return $(a)},viewportOffset:function(d){d=$(d);var b=d,a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0}while((b=b.getOffsetParent())!=document.body);b=d;do{if(!Prototype.Browser.Opera||(b.tagName&&(b.tagName.toUpperCase()=="BODY"))){a-=b.scrollTop||0;c-=b.scrollLeft||0}}while(b=b.parentNode);return Element._returnOffset(c,a)},clonePosition:function(b,d){var a=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});d=$(d);var e=d.viewportOffset();b=$(b);var f=[0,0];var c=null;if(Element.getStyle(b,"position")=="absolute"){c=b.getOffsetParent();f=c.viewportOffset()}if(c==document.body){f[0]-=document.body.offsetLeft;f[1]-=document.body.offsetTop}if(a.setLeft){b.style.left=(e[0]-f[0]+a.offsetLeft)+"px"}if(a.setTop){b.style.top=(e[1]-f[1]+a.offsetTop)+"px"}if(a.setWidth){b.style.width=d.offsetWidth+"px"}if(a.setHeight){b.style.height=d.offsetHeight+"px"}return b}};Element.Methods.identify.counter=1;Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:"class",htmlFor:"for"},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(d,b,c){switch(c){case"left":case"top":case"right":case"bottom":if(d(b,"position")==="static"){return null}case"height":case"width":if(!Element.visible(b)){return null}var e=parseInt(d(b,c),10);if(e!==b["offset"+c.capitalize()]){return e+"px"}var a;if(c==="height"){a=["border-top-width","padding-top","padding-bottom","border-bottom-width"]}else{a=["border-left-width","padding-left","padding-right","border-right-width"]}return a.inject(e,function(f,g){var h=d(b,g);return h===null?f:f-parseInt(h,10)})+"px";default:return d(b,c)}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(c,a,b){if(b==="title"){return a.title}return c(a,b)})}else{if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(c,b){b=$(b);try{b.offsetParent}catch(f){return $(document.body)}var a=b.getStyle("position");if(a!=="static"){return c(b)}b.setStyle({position:"relative"});var d=c(b);b.setStyle({position:a});return d});$w("positionedOffset viewportOffset").each(function(a){Element.Methods[a]=Element.Methods[a].wrap(function(f,c){c=$(c);try{c.offsetParent}catch(h){return Element._returnOffset(0,0)}var b=c.getStyle("position");if(b!=="static"){return f(c)}var d=c.getOffsetParent();if(d&&d.getStyle("position")==="fixed"){d.setStyle({zoom:1})}c.setStyle({position:"relative"});var g=f(c);c.setStyle({position:b});return g})});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(b,a){try{a.offsetParent}catch(c){return Element._returnOffset(0,0)}return b(a)});Element.Methods.getStyle=function(a,b){a=$(a);b=(b=="float"||b=="cssFloat")?"styleFloat":b.camelize();var c=a.style[b];if(!c&&a.currentStyle){c=a.currentStyle[b]}if(b=="opacity"){if(c=(a.getStyle("filter")||"").match(/alpha\(opacity=(.*)\)/)){if(c[1]){return parseFloat(c[1])/100}}return 1}if(c=="auto"){if((b=="width"||b=="height")&&(a.getStyle("display")!="none")){return a["offset"+b.capitalize()]+"px"}return null}return c};Element.Methods.setOpacity=function(b,e){function f(g){return g.replace(/alpha\([^\)]*\)/gi,"")}b=$(b);var a=b.currentStyle;if((a&&!a.hasLayout)||(!a&&b.style.zoom=="normal")){b.style.zoom=1}var d=b.getStyle("filter"),c=b.style;if(e==1||e===""){(d=f(d))?c.filter=d:c.removeAttribute("filter");return b}else{if(e<0.00001){e=0}}c.filter=f(d)+"alpha(opacity="+(e*100)+")";return b};Element._attributeTranslations={read:{names:{"class":"className","for":"htmlFor"},values:{_getAttr:function(a,b){return a.getAttribute(b,2)},_getAttrNode:function(a,c){var b=a.getAttributeNode(c);return b?b.value:""},_getEv:function(a,b){b=a.getAttribute(b);return b?b.toString().slice(23,-2):null},_flag:function(a,b){return $(a).hasAttribute(b)?b:null},style:function(a){return a.style.cssText.toLowerCase()},title:function(a){return a.title}}}};Element._attributeTranslations.write={names:Object.extend({cellpadding:"cellPadding",cellspacing:"cellSpacing"},Element._attributeTranslations.read.names),values:{checked:function(a,b){a.checked=!!b},style:function(a,b){a.style.cssText=b?b:""}}};Element._attributeTranslations.has={};$w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc frameBorder").each(function(a){Element._attributeTranslations.write.names[a.toLowerCase()]=a;Element._attributeTranslations.has[a.toLowerCase()]=a});(function(a){Object.extend(a,{href:a._getAttr,src:a._getAttr,type:a._getAttr,action:a._getAttrNode,disabled:a._flag,checked:a._flag,readonly:a._flag,multiple:a._flag,onload:a._getEv,onunload:a._getEv,onclick:a._getEv,ondblclick:a._getEv,onmousedown:a._getEv,onmouseup:a._getEv,onmouseover:a._getEv,onmousemove:a._getEv,onmouseout:a._getEv,onfocus:a._getEv,onblur:a._getEv,onkeypress:a._getEv,onkeydown:a._getEv,onkeyup:a._getEv,onsubmit:a._getEv,onreset:a._getEv,onselect:a._getEv,onchange:a._getEv})})(Element._attributeTranslations.read.values)}else{if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1)?0.999999:(b==="")?"":(b<0.00001)?0:b;return a}}else{if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1||b==="")?"":(b<0.00001)?0:b;if(b==1){if(a.tagName.toUpperCase()=="IMG"&&a.width){a.width++;a.width--}else{try{var d=document.createTextNode(" ");a.appendChild(d);a.removeChild(d)}catch(c){}}}return a};Element.Methods.cumulativeOffset=function(b){var a=0,c=0;do{a+=b.offsetTop||0;c+=b.offsetLeft||0;if(b.offsetParent==document.body){if(Element.getStyle(b,"position")=="absolute"){break}}b=b.offsetParent}while(b);return Element._returnOffset(c,a)}}}}}if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=function(b,c){b=$(b);if(c&&c.toElement){c=c.toElement()}if(Object.isElement(c)){return b.update().insert(c)}c=Object.toHTML(c);var a=b.tagName.toUpperCase();if(a in Element._insertionTranslations.tags){$A(b.childNodes).each(function(d){b.removeChild(d)});Element._getContentFromAnonymousElement(a,c.stripScripts()).each(function(d){b.appendChild(d)})}else{b.innerHTML=c.stripScripts()}c.evalScripts.bind(c).defer();return b}}if("outerHTML"in document.createElement("div")){Element.Methods.replace=function(c,e){c=$(c);if(e&&e.toElement){e=e.toElement()}if(Object.isElement(e)){c.parentNode.replaceChild(e,c);return c}e=Object.toHTML(e);var d=c.parentNode,b=d.tagName.toUpperCase();if(Element._insertionTranslations.tags[b]){var f=c.next();var a=Element._getContentFromAnonymousElement(b,e.stripScripts());d.removeChild(c);if(f){a.each(function(g){d.insertBefore(g,f)})}else{a.each(function(g){d.appendChild(g)})}}else{c.outerHTML=e.stripScripts()}e.evalScripts.bind(e).defer();return c}}Element._returnOffset=function(b,c){var a=[b,c];a.left=b;a.top=c;return a};Element._getContentFromAnonymousElement=function(c,b){var d=new Element("div"),a=Element._insertionTranslations.tags[c];if(a){d.innerHTML=a[0]+b+a[1];a[2].times(function(){d=d.firstChild})}else{d.innerHTML=b}return $A(d.childNodes)};Element._insertionTranslations={before:function(a,b){a.parentNode.insertBefore(b,a)},top:function(a,b){a.insertBefore(b,a.firstChild)},bottom:function(a,b){a.appendChild(b)},after:function(a,b){a.parentNode.insertBefore(b,a.nextSibling)},tags:{TABLE:["<table>","</table>",1],TBODY:["<table><tbody>","</tbody></table>",2],TR:["<table><tbody><tr>","</tr></tbody></table>",3],TD:["<table><tbody><tr><td>","</td></tr></tbody></table>",4],SELECT:["<select>","</select>",1]}};(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.tags.TBODY,TH:this.tags.TD})}).call(Element._insertionTranslations);Element.Methods.Simulated={hasAttribute:function(a,c){c=Element._attributeTranslations.has[c]||c;var b=$(a).getAttributeNode(c);return!!(b&&b.specified)}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement("div")["__proto__"]){window.HTMLElement={};window.HTMLElement.prototype=document.createElement("div")["__proto__"];Prototype.BrowserFeatures.ElementExtensions=true}Element.extend=(function(){if(Prototype.BrowserFeatures.SpecificElementExtensions){return Prototype.K}var a={},b=Element.Methods.ByTag;var c=Object.extend(function(f){if(!f||f._extendedByPrototype||f.nodeType!=1||f==window){return f}var d=Object.clone(a),e=f.tagName.toUpperCase(),h,g;if(b[e]){Object.extend(d,b[e])}for(h in d){g=d[h];if(Object.isFunction(g)&&!(h in f)){f[h]=g.methodize()}}f._extendedByPrototype=Prototype.emptyFunction;return f},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(a,Element.Methods);Object.extend(a,Element.Methods.Simulated)}}});c.refresh();return c})();Element.hasAttribute=function(a,b){if(a.hasAttribute){return a.hasAttribute(b)}return Element.Methods.Simulated.hasAttribute(a,b)};Element.addMethods=function(c){var h=Prototype.BrowserFeatures,d=Element.Methods.ByTag;if(!c){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods)})}if(arguments.length==2){var b=c;c=arguments[1]}if(!b){Object.extend(Element.Methods,c||{})}else{if(Object.isArray(b)){b.each(g)}else{g(b)}}function g(j){j=j.toUpperCase();if(!Element.Methods.ByTag[j]){Element.Methods.ByTag[j]={}}Object.extend(Element.Methods.ByTag[j],c)}function a(l,k,j){j=j||false;for(var n in l){var m=l[n];if(!Object.isFunction(m)){continue}if(!j||!(n in k)){k[n]=m.methodize()}}}function e(l){var j;var k={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(k[l]){j="HTML"+k[l]+"Element"}if(window[j]){return window[j]}j="HTML"+l+"Element";if(window[j]){return window[j]}j="HTML"+l.capitalize()+"Element";if(window[j]){return window[j]}window[j]={};window[j].prototype=document.createElement(l)["__proto__"];return window[j]}if(h.ElementExtensions){a(Element.Methods,HTMLElement.prototype);a(Element.Methods.Simulated,HTMLElement.prototype,true)}if(h.SpecificElementExtensions){for(var i in Element.Methods.ByTag){var f=e(i);if(Object.isUndefined(f)){continue}a(d[i],f.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh){Element.extend.refresh()}Element.cache={}};document.viewport={getDimensions:function(){var a={},b=Prototype.Browser;$w("width height").each(function(e){var c=e.capitalize();if(b.WebKit&&!document.evaluate){a[e]=self["inner"+c]}else{if(b.Opera&&parseFloat(window.opera.version())<9.5){a[e]=document.body["client"+c]}else{a[e]=document.documentElement["client"+c]}}});return a},getWidth:function(){return this.getDimensions().width},getHeight:function(){return this.getDimensions().height},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)}};var Selector=Class.create({initialize:function(a){this.expression=a.strip();if(this.shouldUseSelectorsAPI()){this.mode="selectorsAPI"}else{if(this.shouldUseXPath()){this.mode="xpath";this.compileXPathMatcher()}else{this.mode="normal";this.compileMatcher()}}},shouldUseXPath:function(){if(!Prototype.BrowserFeatures.XPath){return false}var a=this.expression;if(Prototype.Browser.WebKit&&(a.include("-of-type")||a.include(":empty"))){return false}if((/(\[[\w-]*?:|:checked)/).test(a)){return false}return true},shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI){return false}if(!Selector._div){Selector._div=new Element("div")}try{Selector._div.querySelector(this.expression)}catch(a){return false}return true},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m;if(Selector._cache[e]){this.matcher=Selector._cache[e];return}this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){this.matcher.push(Object.isFunction(c[i])?c[i](m):new Template(c[i]).evaluate(m));e=e.replace(m[0],"");break}}}this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join("\n"));Selector._cache[this.expression]=this.matcher},compileXPathMatcher:function(){var f=this.expression,g=Selector.patterns,b=Selector.xpath,d,a;if(Selector._cache[f]){this.xpath=Selector._cache[f];return}this.matcher=[".//*"];while(f&&d!=f&&(/\S/).test(f)){d=f;for(var c in g){if(a=f.match(g[c])){this.matcher.push(Object.isFunction(b[c])?b[c](a):new Template(b[c]).evaluate(a));f=f.replace(a[0],"");break}}}this.xpath=this.matcher.join("");Selector._cache[this.expression]=this.xpath},findElements:function(a){a=a||document;var c=this.expression,b;switch(this.mode){case"selectorsAPI":if(a!==document){var d=a.id,f=$(a).identify();c="#"+f+" "+c}b=$A(a.querySelectorAll(c)).map(Element.extend);a.id=d;return b;case"xpath":return document._getElementsByXPath(this.xpath,a);default:return this.matcher(a)}},match:function(j){this.tokens=[];var o=this.expression,a=Selector.patterns,f=Selector.assertions;var b,d,g;while(o&&b!==o&&(/\S/).test(o)){b=o;for(var k in a){d=a[k];if(g=o.match(d)){if(f[k]){this.tokens.push([k,Object.clone(g)]);o=o.replace(g[0],"")}else{return this.findElements(document).include(j)}}}}var n=true,c,l;for(var k=0,h;h=this.tokens[k];k++){c=h[0],l=h[1];if(!Selector.assertions[c](j,l)){n=false;break}}return n},toString:function(){return this.expression},inspect:function(){return"#<Selector:"+this.expression.inspect()+">"}});Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:"/following-sibling::*",tagName:function(a){if(a[1]=="*"){return""}return"[local-name()='"+a[1].toLowerCase()+"' or local-name()='"+a[1].toUpperCase()+"']"},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(a){a[1]=a[1].toLowerCase();return new Template("[@#{1}]").evaluate(a)},attr:function(a){a[1]=a[1].toLowerCase();a[3]=a[5]||a[6];return new Template(Selector.xpath.operators[a[2]]).evaluate(a)},pseudo:function(a){var b=Selector.xpath.pseudos[a[1]];if(!b){return""}if(Object.isFunction(b)){return b(a)}return new Template(Selector.xpath.pseudos[a[1]]).evaluate(a)},operators:{"=":"[@#{1}='#{3}']","!=":"[@#{1}!='#{3}']","^=":"[starts-with(@#{1}, '#{3}')]","$=":"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']","*=":"[contains(@#{1}, '#{3}')]","~=":"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]","|=":"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{"first-child":"[not(preceding-sibling::*)]","last-child":"[not(following-sibling::*)]","only-child":"[not(preceding-sibling::* or following-sibling::*)]",empty:"[count(*) = 0 and (count(text()) = 0)]",checked:"[@checked]",disabled:"[(@disabled) and (@type!='hidden')]",enabled:"[not(@disabled) and (@type!='hidden')]",not:function(b){var j=b[6],h=Selector.patterns,a=Selector.xpath,f,c;var g=[];while(j&&f!=j&&(/\S/).test(j)){f=j;for(var d in h){if(b=j.match(h[d])){c=Object.isFunction(a[d])?a[d](b):new Template(a[d]).evaluate(b);g.push("("+c.substring(1,c.length-1)+")");j=j.replace(b[0],"");break}}}return"[not("+g.join(" and ")+")]"},"nth-child":function(a){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",a)},"nth-last-child":function(a){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",a)},"nth-of-type":function(a){return Selector.xpath.pseudos.nth("position() ",a)},"nth-last-of-type":function(a){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",a)},"first-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-of-type"](a)},"last-of-type":function(a){a[6]="1";return Selector.xpath.pseudos["nth-last-of-type"](a)},"only-of-type":function(a){var b=Selector.xpath.pseudos;return b["first-of-type"](a)+b["last-of-type"](a)},nth:function(g,e){var h,i=e[6],d;if(i=="even"){i="2n+0"}if(i=="odd"){i="2n+1"}if(h=i.match(/^(\d+)$/)){return"["+g+"= "+h[1]+"]"}if(h=i.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(h[1]=="-"){h[1]=-1}var f=h[1]?Number(h[1]):1;var c=h[2]?Number(h[2]):0;d="[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(d).evaluate({fragment:g,a:f,b:c})}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c);      c = false;',className:'n = h.className(n, r, "#{1}", c);    c = false;',id:'n = h.id(n, r, "#{1}", c);           c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(a){a[3]=(a[5]||a[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(a)},pseudo:function(a){if(a[6]){a[6]=a[6].replace(/"/g,'\\"')}return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(a)},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adjacent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,attrPresence:/^\[((?:[\w]+:)?[\w]+)\]/,attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/},assertions:{tagName:function(a,b){return b[1].toUpperCase()==a.tagName.toUpperCase()},className:function(a,b){return Element.hasClassName(a,b[1])},id:function(a,b){return a.id===b[1]},attrPresence:function(a,b){return Element.hasAttribute(a,b[1])},attr:function(b,c){var a=Element.readAttribute(b,c[1]);return a&&Selector.operators[c[2]](a,c[5]||c[6])}},handlers:{concat:function(d,c){for(var e=0,f;f=c[e];e++){d.push(f)}return d},mark:function(a){var d=Prototype.emptyFunction;for(var b=0,c;c=a[b];b++){c._countedByPrototype=d}return a},unmark:function(a){for(var b=0,c;c=a[b];b++){c._countedByPrototype=undefined}return a},index:function(a,d,g){a._countedByPrototype=Prototype.emptyFunction;if(d){for(var b=a.childNodes,e=b.length-1,c=1;e>=0;e--){var f=b[e];if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}else{for(var e=0,c=1,b=a.childNodes;f=b[e];e++){if(f.nodeType==1&&(!g||f._countedByPrototype)){f.nodeIndex=c++}}}},unique:function(b){if(b.length==0){return b}var d=[],e;for(var c=0,a=b.length;c<a;c++){if(!(e=b[c])._countedByPrototype){e._countedByPrototype=Prototype.emptyFunction;d.push(Element.extend(e))}}return Selector.handlers.unmark(d)},descendant:function(a){var d=Selector.handlers;for(var c=0,b=[],e;e=a[c];c++){d.concat(b,e.getElementsByTagName("*"))}return b},child:function(a){var e=Selector.handlers;for(var d=0,c=[],f;f=a[d];d++){for(var b=0,g;g=f.childNodes[b];b++){if(g.nodeType==1&&g.tagName!="!"){c.push(g)}}}return c},adjacent:function(a){for(var c=0,b=[],e;e=a[c];c++){var d=this.nextElementSibling(e);if(d){b.push(d)}}return b},laterSibling:function(a){var d=Selector.handlers;for(var c=0,b=[],e;e=a[c];c++){d.concat(b,Element.nextSiblings(e))}return b},nextElementSibling:function(a){while(a=a.nextSibling){if(a.nodeType==1){return a}}return null},previousElementSibling:function(a){while(a=a.previousSibling){if(a.nodeType==1){return a}}return null},tagName:function(a,j,c,b){var k=c.toUpperCase();var e=[],g=Selector.handlers;if(a){if(b){if(b=="descendant"){for(var f=0,d;d=a[f];f++){g.concat(e,d.getElementsByTagName(c))}return e}else{a=this[b](a)}if(c=="*"){return a}}for(var f=0,d;d=a[f];f++){if(d.tagName.toUpperCase()===k){e.push(d)}}return e}else{return j.getElementsByTagName(c)}},id:function(b,a,j,f){var g=$(j),d=Selector.handlers;if(!g){return[]}if(!b&&a==document){return[g]}if(b){if(f){if(f=="child"){for(var c=0,e;e=b[c];c++){if(g.parentNode==e){return[g]}}}else{if(f=="descendant"){for(var c=0,e;e=b[c];c++){if(Element.descendantOf(g,e)){return[g]}}}else{if(f=="adjacent"){for(var c=0,e;e=b[c];c++){if(Selector.handlers.previousElementSibling(g)==e){return[g]}}}else{b=d[f](b)}}}}for(var c=0,e;e=b[c];c++){if(e==g){return[g]}}return[]}return(g&&Element.descendantOf(g,a))?[g]:[]},className:function(b,a,c,d){if(b&&d){b=this[d](b)}return Selector.handlers.byClassName(b,a,c)},byClassName:function(c,b,f){if(!c){c=Selector.handlers.descendant([b])}var h=" "+f+" ";for(var e=0,d=[],g,a;g=c[e];e++){a=g.className;if(a.length==0){continue}if(a==f||(" "+a+" ").include(h)){d.push(g)}}return d},attrPresence:function(c,b,a,g){if(!c){c=b.getElementsByTagName("*")}if(c&&g){c=this[g](c)}var e=[];for(var d=0,f;f=c[d];d++){if(Element.hasAttribute(f,a)){e.push(f)}}return e},attr:function(a,j,h,k,c,b){if(!a){a=j.getElementsByTagName("*")}if(a&&b){a=this[b](a)}var l=Selector.operators[c],f=[];for(var e=0,d;d=a[e];e++){var g=Element.readAttribute(d,h);if(g===null){continue}if(l(g,k)){f.push(d)}}return f},pseudo:function(b,c,e,a,d){if(b&&d){b=this[d](b)}if(!b){b=a.getElementsByTagName("*")}return Selector.pseudos[c](b,e,a)}},pseudos:{"first-child":function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(Selector.handlers.previousElementSibling(e)){continue}c.push(e)}return c},"last-child":function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(Selector.handlers.nextElementSibling(e)){continue}c.push(e)}return c},"only-child":function(b,g,a){var e=Selector.handlers;for(var d=0,c=[],f;f=b[d];d++){if(!e.previousElementSibling(f)&&!e.nextElementSibling(f)){c.push(f)}}return c},"nth-child":function(b,c,a){return Selector.pseudos.nth(b,c,a)},"nth-last-child":function(b,c,a){return Selector.pseudos.nth(b,c,a,true)},"nth-of-type":function(b,c,a){return Selector.pseudos.nth(b,c,a,false,true)},"nth-last-of-type":function(b,c,a){return Selector.pseudos.nth(b,c,a,true,true)},"first-of-type":function(b,c,a){return Selector.pseudos.nth(b,"1",a,false,true)},"last-of-type":function(b,c,a){return Selector.pseudos.nth(b,"1",a,true,true)},"only-of-type":function(b,d,a){var c=Selector.pseudos;return c["last-of-type"](c["first-of-type"](b,d,a),d,a)},getIndices:function(d,c,e){if(d==0){return c>0?[c]:[]}return $R(1,e).inject([],function(a,b){if(0==(b-c)%d&&(b-c)/d>=0){a.push(b)}return a})},nth:function(c,s,u,r,e){if(c.length==0){return[]}if(s=="even"){s="2n+0"}if(s=="odd"){s="2n+1"}var q=Selector.handlers,p=[],d=[],g;q.mark(c);for(var o=0,f;f=c[o];o++){if(!f.parentNode._countedByPrototype){q.index(f.parentNode,r,e);d.push(f.parentNode)}}if(s.match(/^\d+$/)){s=Number(s);for(var o=0,f;f=c[o];o++){if(f.nodeIndex==s){p.push(f)}}}else{if(g=s.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(g[1]=="-"){g[1]=-1}var v=g[1]?Number(g[1]):1;var t=g[2]?Number(g[2]):0;var w=Selector.pseudos.getIndices(v,t,c.length);for(var o=0,f,k=w.length;f=c[o];o++){for(var n=0;n<k;n++){if(f.nodeIndex==w[n]){p.push(f)}}}}}q.unmark(c);q.unmark(d);return p},empty:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.tagName=="!"||e.firstChild){continue}c.push(e)}return c},not:function(a,d,k){var g=Selector.handlers,l,c;var j=new Selector(d).findElements(k);g.mark(j);for(var f=0,e=[],b;b=a[f];f++){if(!b._countedByPrototype){e.push(b)}}g.unmark(j);return e},enabled:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(!e.disabled&&(!e.type||e.type!=="hidden")){c.push(e)}}return c},disabled:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.disabled){c.push(e)}}return c},checked:function(b,f,a){for(var d=0,c=[],e;e=b[d];d++){if(e.checked){c.push(e)}}return c}},operators:{"=":function(b,a){return b==a},"!=":function(b,a){return b!=a},"^=":function(b,a){return b==a||b&&b.startsWith(a)},"$=":function(b,a){return b==a||b&&b.endsWith(a)},"*=":function(b,a){return b==a||b&&b.include(a)},"$=":function(b,a){return b.endsWith(a)},"*=":function(b,a){return b.include(a)},"~=":function(b,a){return(" "+b+" ").include(" "+a+" ")},"|=":function(b,a){return("-"+(b||"").toUpperCase()+"-").include("-"+(a||"").toUpperCase()+"-")}},split:function(b){var a=[];b.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(c){a.push(c[1].strip())});return a},matchElements:function(f,g){var e=$$(g),d=Selector.handlers;d.mark(e);for(var c=0,b=[],a;a=f[c];c++){if(a._countedByPrototype){b.push(a)}}d.unmark(e);return b},findElement:function(b,c,a){if(Object.isNumber(c)){a=c;c=false}return Selector.matchElements(b,c||"*")[a||0]},findChildElements:function(e,g){g=Selector.split(g.join(","));var d=[],f=Selector.handlers;for(var c=0,b=g.length,a;c<b;c++){a=new Selector(g[c].strip());f.concat(d,a.findElements(e))}return(b>1)?f.unique(d):d}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(d,c){for(var e=0,f;f=c[e];e++){if(f.tagName!=="!"){d.push(f)}}return d},unmark:function(a){for(var b=0,c;c=a[b];b++){c.removeAttribute("_countedByPrototype")}return a}})}function $$(){return Selector.findChildElements(document,$A(arguments))}var Form={reset:function(a){$(a).reset();return a},serializeElements:function(g,b){if(typeof b!="object"){b={hash:!!b}}else{if(Object.isUndefined(b.hash)){b.hash=true}}var c,f,a=false,e=b.submit;var d=g.inject({},function(h,i){if(!i.disabled&&i.name){c=i.name;f=$(i).getValue();if(f!=null&&i.type!="file"&&(i.type!="submit"||(!a&&e!==false&&(!e||c==e)&&(a=true)))){if(c in h){if(!Object.isArray(h[c])){h[c]=[h[c]]}h[c].push(f)}else{h[c]=f}}}return h});return b.hash?d:Object.toQueryString(d)}};Form.Methods={serialize:function(b,a){return Form.serializeElements(Form.getElements(b),a)},getElements:function(a){return $A($(a).getElementsByTagName("*")).inject([],function(b,c){if(Form.Element.Serializers[c.tagName.toLowerCase()]){b.push(Element.extend(c))}return b})},getInputs:function(g,c,d){g=$(g);var a=g.getElementsByTagName("input");if(!c&&!d){return $A(a).map(Element.extend)}for(var e=0,h=[],f=a.length;e<f;e++){var b=a[e];if((c&&b.type!=c)||(d&&b.name!=d)){continue}h.push(Element.extend(b))}return h},disable:function(a){a=$(a);Form.getElements(a).invoke("disable");return a},enable:function(a){a=$(a);Form.getElements(a).invoke("enable");return a},findFirstElement:function(b){var c=$(b).getElements().findAll(function(d){return"hidden"!=d.type&&!d.disabled});var a=c.findAll(function(d){return d.hasAttribute("tabIndex")&&d.tabIndex>=0}).sortBy(function(d){return d.tabIndex}).first();return a?a:c.find(function(d){return["input","select","textarea"].include(d.tagName.toLowerCase())})},focusFirstElement:function(a){a=$(a);a.findFirstElement().activate();return a},request:function(b,a){b=$(b),a=Object.clone(a||{});var d=a.parameters,c=b.readAttribute("action")||"";if(c.blank()){c=window.location.href}a.parameters=b.serialize(true);if(d){if(Object.isString(d)){d=d.toQueryParams()}Object.extend(a.parameters,d)}if(b.hasAttribute("method")&&!a.method){a.method=b.method}return new Ajax.Request(c,a)}};Form.Element={focus:function(a){$(a).focus();return a},select:function(a){$(a).select();return a}};Form.Element.Methods={serialize:function(a){a=$(a);if(!a.disabled&&a.name){var b=a.getValue();if(b!=undefined){var c={};c[a.name]=b;return Object.toQueryString(c)}}return""},getValue:function(a){a=$(a);var b=a.tagName.toLowerCase();return Form.Element.Serializers[b](a)},setValue:function(a,b){a=$(a);var c=a.tagName.toLowerCase();Form.Element.Serializers[c](a,b);return a},clear:function(a){$(a).value="";return a},present:function(a){return $(a).value!=""},activate:function(a){a=$(a);try{a.focus();if(a.select&&(a.tagName.toLowerCase()!="input"||!["button","reset","submit"].include(a.type))){a.select()}}catch(b){}return a},disable:function(a){a=$(a);a.disabled=true;return a},enable:function(a){a=$(a);a.disabled=false;return a}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(a,b){switch(a.type.toLowerCase()){case"checkbox":case"radio":return Form.Element.Serializers.inputSelector(a,b);default:return Form.Element.Serializers.textarea(a,b)}},inputSelector:function(a,b){if(Object.isUndefined(b)){return a.checked?a.value:null}else{a.checked=!!b}},textarea:function(a,b){if(Object.isUndefined(b)){return a.value}else{a.value=b}},select:function(c,f){if(Object.isUndefined(f)){return this[c.type=="select-one"?"selectOne":"selectMany"](c)}else{var b,d,g=!Object.isArray(f);for(var a=0,e=c.length;a<e;a++){b=c.options[a];d=this.optionValue(b);if(g){if(d==f){b.selected=true;return}}else{b.selected=f.include(d)}}}},selectOne:function(b){var a=b.selectedIndex;return a>=0?this.optionValue(b.options[a]):null},selectMany:function(d){var a,e=d.length;if(!e){return null}for(var c=0,a=[];c<e;c++){var b=d.options[c];if(b.selected){a.push(this.optionValue(b))}}return a},optionValue:function(a){return Element.extend(a).hasAttribute("value")?a.value:a.text}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,a,b,c){$super(c,b);this.element=$(a);this.lastValue=this.getValue()},execute:function(){var a=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(a)?this.lastValue!=a:String(this.lastValue)!=String(a)){this.callback(this.element,a);this.lastValue=a}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(a,b){this.element=$(a);this.callback=b;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var a=this.getValue();if(this.lastValue!=a){this.callback(this.element,a);this.lastValue=a}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(a){if(a.type){switch(a.type.toLowerCase()){case"checkbox":case"radio":Event.observe(a,"click",this.onElementEvent.bind(this));break;default:Event.observe(a,"change",this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});if(!window.Event){var Event={}}Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{},relatedTarget:function(b){var a;switch(b.type){case"mouseover":a=b.fromElement;break;case"mouseout":a=b.toElement;break;default:return null}return Element.extend(a)}});Event.Methods=(function(){var a;if(Prototype.Browser.IE){var b={0:1,1:4,2:2};a=function(d,c){return d.button==b[c]}}else{if(Prototype.Browser.WebKit){a=function(d,c){switch(c){case 0:return d.which==1&&!d.metaKey;case 1:return d.which==1&&d.metaKey;default:return false}}}else{a=function(d,c){return d.which?(d.which===c+1):(d.button===c)}}}return{isLeftClick:function(c){return a(c,0)},isMiddleClick:function(c){return a(c,1)},isRightClick:function(c){return a(c,2)},element:function(e){e=Event.extend(e);var d=e.target,c=e.type,f=e.currentTarget;if(f&&f.tagName){if(c==="load"||c==="error"||(c==="click"&&f.tagName.toLowerCase()==="input"&&f.type==="radio")){d=f}}if(d.nodeType==Node.TEXT_NODE){d=d.parentNode}return Element.extend(d)},findElement:function(d,f){var c=Event.element(d);if(!f){return c}var e=[c].concat(c.ancestors());return Selector.findElement(e,f,0)},pointer:function(e){var d=document.documentElement,c=document.body||{scrollLeft:0,scrollTop:0};return{x:e.pageX||(e.clientX+(d.scrollLeft||c.scrollLeft)-(d.clientLeft||0)),y:e.pageY||(e.clientY+(d.scrollTop||c.scrollTop)-(d.clientTop||0))}},pointerX:function(c){return Event.pointer(c).x},pointerY:function(c){return Event.pointer(c).y},stop:function(c){Event.extend(c);c.preventDefault();c.stopPropagation();c.stopped=true}}})();Event.extend=(function(){var a=Object.keys(Event.Methods).inject({},function(b,c){b[c]=Event.Methods[c].methodize();return b});if(Prototype.Browser.IE){Object.extend(a,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});return function(b){if(!b){return false}if(b._extendedByPrototype){return b}b._extendedByPrototype=Prototype.emptyFunction;var c=Event.pointer(b);Object.extend(b,{target:b.srcElement,relatedTarget:Event.relatedTarget(b),pageX:c.x,pageY:c.y});return Object.extend(b,a)}}else{Event.prototype=Event.prototype||document.createEvent("HTMLEvents")["__proto__"];Object.extend(Event.prototype,a);return Prototype.K}})();Object.extend(Event,(function(){var b=Event.cache;function c(j){if(j._prototypeEventID){return j._prototypeEventID[0]}arguments.callee.id=arguments.callee.id||1;return j._prototypeEventID=[++arguments.callee.id]}function g(j){if(j&&j.include(":")){return"dataavailable"}return j}function a(j){return b[j]=b[j]||{}}function f(l,j){var k=a(l);return k[j]=k[j]||[]}function h(k,j,l){var o=c(k);var n=f(o,j);if(n.pluck("handler").include(l)){return false}var m=function(p){if(!Event||!Event.extend||(p.eventName&&p.eventName!=j)){return false}Event.extend(p);l.call(k,p)};m.handler=l;n.push(m);return m}function i(m,j,k){var l=f(m,j);return l.find(function(n){return n.handler==k})}function d(m,j,k){var l=a(m);if(!l[j]){return false}l[j]=l[j].without(i(m,j,k))}function e(){for(var k in b){for(var j in b[k]){b[k][j]=null}}}if(window.attachEvent){window.attachEvent("onunload",e)}if(Prototype.Browser.WebKit){window.addEventListener("unload",Prototype.emptyFunction,false)}return{observe:function(l,j,m){l=$(l);var k=g(j);var n=h(l,j,m);if(!n){return l}if(l.addEventListener){l.addEventListener(k,n,false)}else{l.attachEvent("on"+k,n)}return l},stopObserving:function(l,j,m){l=$(l);var o=c(l),k=g(j);if(!m&&j){f(o,j).each(function(p){l.stopObserving(j,p.handler)});return l}else{if(!j){Object.keys(a(o)).each(function(p){l.stopObserving(p)});return l}}var n=i(o,j,m);if(!n){return l}if(l.removeEventListener){l.removeEventListener(k,n,false)}else{l.detachEvent("on"+k,n)}d(o,j,m);return l},fire:function(l,k,j){l=$(l);if(l==document&&document.createEvent&&!l.dispatchEvent){l=document.documentElement}var m;if(document.createEvent){m=document.createEvent("HTMLEvents");m.initEvent("dataavailable",true,true)}else{m=document.createEventObject();m.eventType="ondataavailable"}m.eventName=k;m.memo=j||{};if(document.createEvent){l.dispatchEvent(m)}else{l.fireEvent(m.eventType,m)}return Event.extend(m)}}})());Object.extend(Event,Event.Methods);Element.addMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stopObserving});Object.extend(document,{fire:Element.Methods.fire.methodize(),observe:Element.Methods.observe.methodize(),stopObserving:Element.Methods.stopObserving.methodize(),loaded:false});(function(){var b;function a(){if(document.loaded){return}if(b){window.clearInterval(b)}document.fire("dom:loaded");document.loaded=true}if(document.addEventListener){if(Prototype.Browser.WebKit){b=window.setInterval(function(){if(/loaded|complete/.test(document.readyState)){a()}},0);Event.observe(window,"load",a)}else{document.addEventListener("DOMContentLoaded",a,false)}}else{document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");$("__onDOMContentLoaded").onreadystatechange=function(){if(this.readyState=="complete"){this.onreadystatechange=null;a()}}}})();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(a,b){return Element.insert(a,{before:b})},Top:function(a,b){return Element.insert(a,{top:b})},Bottom:function(a,b){return Element.insert(a,{bottom:b})},After:function(a,b){return Element.insert(a,{after:b})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(b,a,c){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(b,a,c)}this.xcomp=a;this.ycomp=c;this.offset=Element.cumulativeOffset(b);return(c>=this.offset[1]&&c<this.offset[1]+b.offsetHeight&&a>=this.offset[0]&&a<this.offset[0]+b.offsetWidth)},withinIncludingScrolloffsets:function(b,a,d){var c=Element.cumulativeScrollOffset(b);this.xcomp=a+c[0]-this.deltaX;this.ycomp=d+c[1]-this.deltaY;this.offset=Element.cumulativeOffset(b);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+b.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+b.offsetWidth)},overlap:function(b,a){if(!b){return 0}if(b=="vertical"){return((this.offset[1]+a.offsetHeight)-this.ycomp)/a.offsetHeight}if(b=="horizontal"){return((this.offset[0]+a.offsetWidth)-this.xcomp)/a.offsetWidth}},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(a){Position.prepare();return Element.absolutize(a)},relativize:function(a){Position.prepare();return Element.relativize(a)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(b,c,a){a=a||{};return Element.clonePosition(c,b,a)}};if(!document.getElementsByClassName){document.getElementsByClassName=function(b){function a(c){return c.blank()?null:"[contains(concat(' ', @class, ' '), ' "+c+" ')]"}b.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(c,e){e=e.toString().strip();var d=/\s/.test(e)?$w(e).map(a).join(""):a(e);return d?document._getElementsByXPath(".//*"+d,c):[]}:function(e,f){f=f.toString().strip();var g=[],h=(/\s/.test(f)?$w(f):null);if(!h&&!f){return g}var c=$(e).getElementsByTagName("*");f=" "+f+" ";for(var d=0,k,j;k=c[d];d++){if(k.className&&(j=" "+k.className+" ")&&(j.include(f)||(h&&h.all(function(i){return!i.toString().blank()&&j.include(" "+i+" ")})))){g.push(Element.extend(k))}}return g};return function(d,c){return $(c||document.body).getElementsByClassName(d)}}(Element.Methods)}Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(a){this.element=$(a)},_each:function(a){this.element.className.split(/\s+/).select(function(b){return b.length>0})._each(a)},set:function(a){this.element.className=a},add:function(a){if(this.include(a)){return}this.set($A(this).concat(a).join(" "))},remove:function(a){if(!this.include(a)){return}this.set($A(this).without(a).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);Element.addMethods();
\ No newline at end of file
diff --git a/js/selectlist.js b/js/selectlist.js
new file mode 100644
index 0000000..39f29be
--- /dev/null
+++ b/js/selectlist.js
@@ -0,0 +1 @@
+function returnID(){var A=parent.opener.document[formid].selectlist_selectid,B=parent.opener.document[formid].actionID;if(parent.opener.closed||!A||!B){alert(GollemText.opener_window);window.close();return}A.value=cacheid;B.value="selectlist_process";parent.opener.document[formid].submit();window.close()};
\ No newline at end of file
diff --git a/templates/prefs/columnselect.js b/js/src/columnselect.js
similarity index 89%
rename from templates/prefs/columnselect.js
rename to js/src/columnselect.js
index 7de61b6..c110aa1 100644
--- a/templates/prefs/columnselect.js
+++ b/js/src/columnselect.js
@@ -1,7 +1,13 @@
-<script type="text/javascript">
-<!--
-var columns = new Array();
-<?php echo $js_columns; ?>
+/**
+ * Provides the javascript for the gollem column select preferences page.
+ *
+ * $Horde: gollem/js/src/columnselect.js,v 1.2.2.1 2008/10/09 20:54:41 jan Exp $
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ */
+
+var columns = [];
 
 function selectSource()
 {
@@ -20,13 +26,13 @@ function selectSource()
     }
     var source = f.source.selectedIndex - 1;
 
-    var selected = new Array();
-    var unselected = new Array();
+    var selected = [];
+    var unselected = [];
     for (var i = 1; i < columns[source].length; i++) {
         if (columns[source][i][2]) {
-            selected[columns[source][i][3]] = new Array(columns[source][i][1], columns[source][i][0]);
+            selected[columns[source][i][3]] = [columns[source][i][1], columns[source][i][0]];
         } else {
-            unselected[unselected.length] = new Array(columns[source][i][1], columns[source][i][0]);
+            unselected[unselected.length] = [columns[source][i][1], columns[source][i][0]];
         }
     }
     for (i = 0; i < selected.length; i++) {
@@ -114,8 +120,7 @@ function moveColumnUp()
     f.selected_columns.selectedIndex = sel;
     var up = f.selected_columns[sel].value;
 
-    tmp = new Array();
-
+    tmp = [];
     for (i = 1; i < f.selected_columns.length; i++) {
         tmp[i - 1] = new Option(f.selected_columns[i].text, f.selected_columns[i].value)
     }
@@ -155,8 +160,7 @@ function moveColumnDown()
     f.selected_columns.selectedIndex = sel;
     var down = f.selected_columns[sel].value;
 
-    tmp = new Array();
-
+    tmp = [];
     for (i = 1; i < f.selected_columns.length; i++) {
         tmp[i - 1] = new Option(f.selected_columns[i].text, f.selected_columns[i].value)
     }
@@ -183,6 +187,3 @@ function moveColumnDown()
 
     resetHidden();
 }
-
-// -->
-</script>
diff --git a/js/src/login.js b/js/src/login.js
new file mode 100644
index 0000000..85ad0d2
--- /dev/null
+++ b/js/src/login.js
@@ -0,0 +1,89 @@
+/**
+ * Provides the javascript for the login.php script.
+ *
+ * $Horde: gollem/js/src/login.js,v 1.3.2.1 2008/10/09 20:54:41 jan Exp $
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ */
+
+function setFocus()
+{
+    if (document.gollem_login.username) {
+        document.gollem_login.username.focus();
+    }
+}
+
+function gollem_reload()
+{
+    var url = reload_url + document.gollem_login.backend_key[document.gollem_login.backend_key.selectedIndex].value;
+    if (document.gollem_login.url &&
+        document.gollem_login.url.value) {
+        url += '&url=' + document.gollem_login.url.value;
+    }
+    window.location = url;
+}
+
+function submit_login()
+{
+    if (document.gollem_login.username &&
+        document.gollem_login.username.value == "") {
+        alert(GollemText.login_username);
+        document.gollem_login.username.focus();
+        return false;
+    } else if (document.gollem_login.password &&
+               document.gollem_login.password.value == "") {
+        alert(GollemText.login_password);
+        document.gollem_login.password.focus();
+        return false;
+    } else {
+        document.gollem_login.loginButton.disabled = true;
+        if (ie_clientcaps) {
+            try {
+                document.gollem_login.ie_version.value = objCCaps.getComponentVersion("{89820200-ECBD-11CF-8B85-00AA005B4383}","componentid");
+            } catch (e) { }
+        }
+        document.gollem_login.submit();
+        return true;
+    }
+}
+
+function selectLang()
+{
+    // We need to reload the login page here, but only if the user hasn't
+    // already entered a username and password.
+    var lang_page = 'login.php?new_lang=' + document.gollem_login.new_lang[document.gollem_login.new_lang.selectedIndex].value;
+    if (lang_url !== null) {
+        lang_page += '&url=' + lang_url;
+    }
+    self.location = lang_page;
+}
+
+/* Removes any leading hash that might be on a location string. */
+function removeHash(h) {
+    if (h == null || h == undefined) {
+        return null;
+    } else if (h.length && h.charAt(0) == '#') {
+        if (h.length == 1) {
+            return "";
+        } else {
+            return h.substring(1);
+        }
+    }
+    return h;
+}
+
+Event.observe(window, 'load', function() {
+    if (gollem_auth && parent.frames.horde_main) {
+        if (nomenu) {
+            parent.location = self.location;
+        } else {
+            document.gollem_login.target = '_parent';
+        }
+    }
+
+    // Need to capture hash information if it exists in URL
+    if (location.hash) {
+        $('anchor_string').value = removeHash(location.hash);
+    }
+});
diff --git a/js/src/manager.js b/js/src/manager.js
new file mode 100644
index 0000000..6bcb2f7
--- /dev/null
+++ b/js/src/manager.js
@@ -0,0 +1,390 @@
+/**
+ * Provides the javascript for the manager.php script.
+ *
+ * $Horde: gollem/js/src/manager.js,v 1.11.2.1 2008/10/09 20:54:41 jan Exp $
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ */
+
+var Gollem = {
+    toggleRow: function()
+    {
+        $$('table.striped tr').each(function(tr) {
+            var td = tr.select('TD');
+            tr.observe('mouseover', td.invoke.bind(td, 'addClassName', 'selected'));
+            tr.observe('mouseout', td.invoke.bind(td, 'removeClassName', 'selected'));
+        });
+    },
+
+    getChecked: function()
+    {
+        return this.getElements().findAll(function(e) {
+            return e.checked;
+        });
+    },
+
+    getElements: function()
+    {
+        return $('manager').getInputs(null, 'items[]');
+    },
+
+    getSelected: function()
+    {
+        return this.getChecked().pluck('value').join("\n");
+    },
+
+    getItemsArray: function()
+    {
+        var i = 0,
+            it = $('manager').getInputs(null, 'itemTypes[]');
+
+        return this.getElements().collect(function(m) {
+            return { c: m.checked, v: m.value, t: it[i++].value };
+        });
+    },
+
+    getSelectedFoldersList: function()
+    {
+        return this.getItemsArray().collect(function(i) {
+            return (i.c && i.t == '**dir') ? i.v : null;
+        }).compact().join("\n");
+    },
+
+    chooseAction: function(i)
+    {
+        var action = $F('action' + i);
+
+        switch (action) {
+        case 'paste_items':
+            $('actionID').setValue('paste_items');
+            $('manager').submit();
+            break;
+
+        default:
+            if (!this.getChecked().size()) {
+                alert(GollemText.select_item);
+                break;
+            }
+            switch (action) {
+            case 'rename_items':
+                this.renameItems();
+                break;
+
+            case 'delete_items':
+                this.deleteItems();
+                break;
+
+            case 'chmod_modify':
+                $('attributes').show();
+                break;
+
+            case 'cut_items':
+                $('actionID').setValue('cut_items');
+                $('manager').submit();
+                break;
+
+            case 'copy_items':
+                $('actionID').setValue('copy_items');
+                $('manager').submit();
+                break;
+            }
+            break;
+        }
+    },
+
+    changeDirectory: function(e)
+    {
+        this._prepPopup('changeDirectory', e.element());
+        $('cdfrm_fname').focus();
+        e.stop();
+    },
+
+    createFolder: function(e)
+    {
+        this._prepPopup('createFolder', e.element());
+        $('createfrm_fname').focus();
+        e.stop();
+    },
+
+    _prepPopup: function(elt, elt2)
+    {
+        this.getChecked().each(function(e) {
+            e.checked = false;
+        });
+
+        $(elt).clonePosition(elt2, { setWidth: false, setHeight: false, offsetTop: elt2.getHeight() }).show();
+    },
+
+    renameItems: function()
+    {
+        var c = this.getChecked();
+        if (c.size()) {
+            c[0].checked = false;
+            $('rename').show();
+            $('renamefrm_oldname').setValue(c[0].value);
+            $('renamefrm_newname').setValue(c[0].value).focus();
+        }
+    },
+
+    deleteItems: function()
+    {
+        var cont = true, sf;
+
+        if (window.confirm(GollemText.delete_confirm_1 + '\n' + this.getSelected() + '\n' + GollemText.delete_confirm_2)) {
+            if (warn_recursive) {
+                sf = this.getSelectedFoldersList();
+                if (!sf.empty() &&
+                    !window.confirm(GollemText.delete_recurs_1 + '\n' + sf + '\n' + GollemText.delete_recurs_2)) {
+                    cont = false;
+                }
+            }
+        } else {
+            cont = false;
+        }
+
+        if (cont) {
+            $('actionID').setValue('delete_items');
+            $('manager').submit();
+        }
+    },
+
+    toggleSelection: function()
+    {
+        var e = this.getElements(),
+            checked = (this.getChecked().size() != e.length);
+        e.each(function(f) {
+            f.checked = checked;
+        });
+    },
+
+    createFolderOK: function()
+    {
+        $('createFolder').hide();
+        if ($F('createfrm_fname')) {
+            $('new_folder').setValue($F('createfrm_fname'));
+            $('actionID').setValue('create_folder');
+            $('manager').submit();
+        }
+    },
+
+    createFolderKeyCheck: function(e)
+    {
+        switch (e.keyCode) {
+        case Event.KEY_ESC:
+            this.createFolderCancel();
+            return false;
+
+        case EVENT.KEY_RETURN:
+            this.createFolderOK();
+            return false;
+        }
+        return true;
+    },
+
+    createFolderCancel: function()
+    {
+        $('createFolder').hide();
+        $('createfrm').reset();
+    },
+
+    chmodCancel: function()
+    {
+        $('attributes').hide();
+        $('chmodfrm').reset();
+    },
+
+    chmodSave: function()
+    {
+        var all = group = owner = 0;
+
+        $('chmodfrm').getElements().each(function(e) {
+            if (e.name == "owner[]" && e.checked) {
+                owner |= e.value;
+            } else if (e.name == "group[]" && e.checked) {
+                group |= e.value;
+            } else if (e.name == "all[]" && e.checked) {
+                all |= e.value;
+            }
+        });
+
+        $('attributes').hide();
+
+        $('chmod').setValue("0" + owner + "" + group + "" + all);
+        $('actionID').setValue('chmod_modify');
+        $('manager').submit();
+    },
+
+    renameOK: function()
+    {
+        var c = this.getChecked(),
+            newname = $F('renamefrm_newname'),
+            newNames = $F('new_names'),
+            oldname = $F('renamefrm_oldname'),
+            oldNames = $F('old_names');
+
+        if (newname && newname != oldname) {
+            newNames += "|" + newname;
+            oldNames += "|" + oldname;
+        }
+
+        if (newNames.startsWith("|")) {
+            newNames = newNames.substring(1);
+        }
+        if (oldNames.startsWith("|")) {
+            oldNames = oldNames.substring(1);
+        }
+
+        $('new_names').setValue(newNames);
+        $('old_names').setValue(oldNames);
+
+        if (c.size()) {
+            c[0].checked = false;
+            found = true;
+            $('rename').show();
+            $F(c[0]).focus();
+        } else {
+            $('actionID').setValue('rename_items');
+            $('manager').submit();
+        }
+
+        return false;
+    },
+
+    renameCancel: function()
+    {
+        $('new_names', 'old_names').invoke('setValue', '');
+        $('rename').hide();
+    },
+
+    renameKeyCheck: function(e)
+    {
+        switch (e.keyCode) {
+        case Event.KEY_ESC:
+            this.renameCancel();
+            return false;
+
+        case EVENT.KEY_RETURN:
+            this.renameOK();
+            return false;
+        }
+        return true;
+    },
+
+    changeDirectoryOK: function()
+    {
+        $('changeDirectory').hide();
+        if ($F('cdfrm_fname')) {
+            $('dir').setValue($F('cdfrm_fname'));
+            $('manager').submit();
+        }
+    },
+
+    changeDirectoryKeyCheck: function(e)
+    {
+        switch (e.keyCode) {
+        case Event.KEY_ESC:
+            this.changeDirectoryCancel();
+            return false;
+
+        case EVENT.KEY_RETURN:
+            this.changeDirectoryOK();
+            return false;
+        }
+        return true;
+    },
+
+    changeDirectoryCancel: function()
+    {
+        $('changeDirectory').hide();
+        $('cdfrm').reset();
+    },
+
+    uploadFields: function()
+    {
+        return $('manager').getInputs('file').collect(function(m) {
+            return (m.name.substr(0, 12) == 'file_upload_') ? m : null;
+        }).compact();
+    },
+
+    uploadFile: function()
+    {
+        if (this.uploadsExist()) {
+            $('actionID').setValue('upload_file');
+            $('manager').submit();
+        }
+    },
+
+    applyFilter: function()
+    {
+        $('manager').submit();
+    },
+
+    clearFilter: function()
+    {
+        $('filter').setValue('');
+        this.applyFilter();
+    },
+
+    uploadsExist: function()
+    {
+        if (GollemVar.empty_input ||
+            this.uploadFields().find(function(f) { return $F(f); })) {
+            return true;
+        }
+        alert(GollemText.specify_upload);
+        $('file_upload_1').focus();
+        return false;
+    },
+
+    uploadChanged: function()
+    {
+        if (GollemVar.empty_input) {
+            return;
+        }
+
+        var file, lastRow,
+            fields = this.uploadFields(),
+            usedFields = fields.findAll(function(f) { return $F(f).length; }).length;
+
+        if (usedFields == fields.length) {
+            lastRow = $('upload_row_' + usedFields);
+            if (lastRow) {
+                file = new Element('INPUT', { type: 'file', name: 'file_upload_' + (usedFields + 1), size: 25 });
+                lastRow.insert({ after:
+                    new Element('DIV', { id: 'upload_row_' + (usedFields + 1) }).insert(
+                        new Element('STRONG').insert(GollemText.file + ' ' + (usedFields + 1) + ':')
+                    ).insert(' ').insert(file)
+                });
+                file.observe('change', this.uploadChanged.bind(this));
+            }
+        }
+    },
+
+    doPrefsUpdate: function(column, sortDown)
+    {
+        try {
+            new Ajax.Request(GollemVar.prefs_api, { parameters: { app: 'gollem', pref: 'sortby', value: column.substring(1) } });
+            new Ajax.Request(GollemVar.prefs_api, { parameters: { app: 'gollem', pref: 'sortdir', value: sortDown } });
+        } catch (e) {}
+    }
+};
+
+function table_sortCallback(tableId, column, sortDown)
+{
+    if (Gollem.prefs_update_timeout) {
+        window.clearTimeout(Gollem.prefs_update_timeout);
+    }
+    Gollem.prefs_update_timeout = Gollem.doPrefsUpdate.bind(this, column, sortDown).delay(0.3);
+}
+
+document.observe('dom:loaded', function() {
+    var tmp;
+    Gollem.toggleRow()
+    if (tmp = $('createfolder')) {
+        tmp.observe('click', Gollem.createFolder.bindAsEventListener(Gollem));
+    }
+    if (tmp = $('changefolder')) {
+        tmp.observe('click', Gollem.changeDirectory.bindAsEventListener(Gollem));
+    }
+});
diff --git a/js/src/popup.js b/js/src/popup.js
new file mode 100644
index 0000000..3877c6f
--- /dev/null
+++ b/js/src/popup.js
@@ -0,0 +1,68 @@
+/**
+ * Gollem Popup JavaScript.
+ *
+ * Provides the javascript to open popup windows.
+ * This file should be included via Horde::addScriptFile().
+ *
+ * $Horde: gollem/js/src/popup.js,v 1.1.2.1 2008/10/09 20:54:41 jan Exp $
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ */
+
+/**
+ * Open a popup window.
+ *
+ * @param string $url      The URL to open in the popup window.
+ * @param integer $width   The width of the popup window. (Default: 600 px)
+ * @param integer $height  The height of the popup window. (Default: 500 px)
+ * @param string $args     Any additional args to pass to the script.
+ *                         (Default: no args)
+ */
+function popup_gollem(url, width, height, args)
+{
+    if (!width) {
+        width = 600;
+    }
+    var screen_width = screen.width;
+    if (width > (screen_width - 75)) {
+        width = screen_width - 75;
+    }
+
+    if (!height) {
+        height = 500;
+    }
+    var screen_width = screen.width;
+    if (width > (screen_width - 75)) {
+        width = screen_width - 75;
+    }
+
+    var now = new Date();
+    var name = now.getTime();
+
+    if (url.indexOf('?') == -1) {
+        var glue = '?';
+    } else {
+        var glue = '&';
+    }
+
+    if (args != '') {
+        url = url + glue + unescape(args) + '&uniq=' + name;
+    } else {
+        url = url + glue + 'uniq=' + name;
+    }
+
+    param = 'toolbar=no,location=no,status=yes,scrollbars=yes,resizable=yes,width=' + width + ',height=' + height + ',left=0,top=0';
+    win = window.open(url, name, param);
+    if (!win) {
+        alert(GollemText.popup_block);
+    } else {
+        if (typeof win.name == 'undefined') {
+            win.name = name;
+        }
+        if (typeof win.opener == 'undefined') {
+            win.opener = self;
+        }
+        win.focus();
+    }
+}
diff --git a/js/src/prototype.js b/js/src/prototype.js
new file mode 100644
index 0000000..a7fd383
--- /dev/null
+++ b/js/src/prototype.js
@@ -0,0 +1,4320 @@
+/*  Prototype JavaScript framework, version 1.6.0.3
+ *  (c) 2005-2008 Sam Stephenson
+ *
+ *  Prototype is freely distributable under the terms of an MIT-style license.
+ *  For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+  Version: '1.6.0.3',
+
+  Browser: {
+    IE:     !!(window.attachEvent &&
+      navigator.userAgent.indexOf('Opera') === -1),
+    Opera:  navigator.userAgent.indexOf('Opera') > -1,
+    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 &&
+      navigator.userAgent.indexOf('KHTML') === -1,
+    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+  },
+
+  BrowserFeatures: {
+    XPath: !!document.evaluate,
+    SelectorsAPI: !!document.querySelector,
+    ElementExtensions: !!window.HTMLElement,
+    SpecificElementExtensions:
+      document.createElement('div')['__proto__'] &&
+      document.createElement('div')['__proto__'] !==
+        document.createElement('form')['__proto__']
+  },
+
+  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+  emptyFunction: function() { },
+  K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+  Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+  create: function() {
+    var parent = null, properties = $A(arguments);
+    if (Object.isFunction(properties[0]))
+      parent = properties.shift();
+
+    function klass() {
+      this.initialize.apply(this, arguments);
+    }
+
+    Object.extend(klass, Class.Methods);
+    klass.superclass = parent;
+    klass.subclasses = [];
+
+    if (parent) {
+      var subclass = function() { };
+      subclass.prototype = parent.prototype;
+      klass.prototype = new subclass;
+      parent.subclasses.push(klass);
+    }
+
+    for (var i = 0; i < properties.length; i++)
+      klass.addMethods(properties[i]);
+
+    if (!klass.prototype.initialize)
+      klass.prototype.initialize = Prototype.emptyFunction;
+
+    klass.prototype.constructor = klass;
+
+    return klass;
+  }
+};
+
+Class.Methods = {
+  addMethods: function(source) {
+    var ancestor   = this.superclass && this.superclass.prototype;
+    var properties = Object.keys(source);
+
+    if (!Object.keys({ toString: true }).length)
+      properties.push("toString", "valueOf");
+
+    for (var i = 0, length = properties.length; i < length; i++) {
+      var property = properties[i], value = source[property];
+      if (ancestor && Object.isFunction(value) &&
+          value.argumentNames().first() == "$super") {
+        var method = value;
+        value = (function(m) {
+          return function() { return ancestor[m].apply(this, arguments) };
+        })(property).wrap(method);
+
+        value.valueOf = method.valueOf.bind(method);
+        value.toString = method.toString.bind(method);
+      }
+      this.prototype[property] = value;
+    }
+
+    return this;
+  }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+  for (var property in source)
+    destination[property] = source[property];
+  return destination;
+};
+
+Object.extend(Object, {
+  inspect: function(object) {
+    try {
+      if (Object.isUndefined(object)) return 'undefined';
+      if (object === null) return 'null';
+      return object.inspect ? object.inspect() : String(object);
+    } catch (e) {
+      if (e instanceof RangeError) return '...';
+      throw e;
+    }
+  },
+
+  toJSON: function(object) {
+    var type = typeof object;
+    switch (type) {
+      case 'undefined':
+      case 'function':
+      case 'unknown': return;
+      case 'boolean': return object.toString();
+    }
+
+    if (object === null) return 'null';
+    if (object.toJSON) return object.toJSON();
+    if (Object.isElement(object)) return;
+
+    var results = [];
+    for (var property in object) {
+      var value = Object.toJSON(object[property]);
+      if (!Object.isUndefined(value))
+        results.push(property.toJSON() + ': ' + value);
+    }
+
+    return '{' + results.join(', ') + '}';
+  },
+
+  toQueryString: function(object) {
+    return $H(object).toQueryString();
+  },
+
+  toHTML: function(object) {
+    return object && object.toHTML ? object.toHTML() : String.interpret(object);
+  },
+
+  keys: function(object) {
+    var keys = [];
+    for (var property in object)
+      keys.push(property);
+    return keys;
+  },
+
+  values: function(object) {
+    var values = [];
+    for (var property in object)
+      values.push(object[property]);
+    return values;
+  },
+
+  clone: function(object) {
+    return Object.extend({ }, object);
+  },
+
+  isElement: function(object) {
+    return !!(object && object.nodeType == 1);
+  },
+
+  isArray: function(object) {
+    return object != null && typeof object == "object" &&
+      'splice' in object && 'join' in object;
+  },
+
+  isHash: function(object) {
+    return object instanceof Hash;
+  },
+
+  isFunction: function(object) {
+    return typeof object == "function";
+  },
+
+  isString: function(object) {
+    return typeof object == "string";
+  },
+
+  isNumber: function(object) {
+    return typeof object == "number";
+  },
+
+  isUndefined: function(object) {
+    return typeof object == "undefined";
+  }
+});
+
+Object.extend(Function.prototype, {
+  argumentNames: function() {
+    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
+      .replace(/\s+/g, '').split(',');
+    return names.length == 1 && !names[0] ? [] : names;
+  },
+
+  bind: function() {
+    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+    var __method = this, args = $A(arguments), object = args.shift();
+    return function() {
+      return __method.apply(object, args.concat($A(arguments)));
+    }
+  },
+
+  bindAsEventListener: function() {
+    var __method = this, args = $A(arguments), object = args.shift();
+    return function(event) {
+      return __method.apply(object, [event || window.event].concat(args));
+    }
+  },
+
+  curry: function() {
+    if (!arguments.length) return this;
+    var __method = this, args = $A(arguments);
+    return function() {
+      return __method.apply(this, args.concat($A(arguments)));
+    }
+  },
+
+  delay: function() {
+    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+    return window.setTimeout(function() {
+      return __method.apply(__method, args);
+    }, timeout);
+  },
+
+  defer: function() {
+    var args = [0.01].concat($A(arguments));
+    return this.delay.apply(this, args);
+  },
+
+  wrap: function(wrapper) {
+    var __method = this;
+    return function() {
+      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+    }
+  },
+
+  methodize: function() {
+    if (this._methodized) return this._methodized;
+    var __method = this;
+    return this._methodized = function() {
+      return __method.apply(null, [this].concat($A(arguments)));
+    };
+  }
+});
+
+Date.prototype.toJSON = function() {
+  return '"' + this.getUTCFullYear() + '-' +
+    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+    this.getUTCDate().toPaddedString(2) + 'T' +
+    this.getUTCHours().toPaddedString(2) + ':' +
+    this.getUTCMinutes().toPaddedString(2) + ':' +
+    this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+var Try = {
+  these: function() {
+    var returnValue;
+
+    for (var i = 0, length = arguments.length; i < length; i++) {
+      var lambda = arguments[i];
+      try {
+        returnValue = lambda();
+        break;
+      } catch (e) { }
+    }
+
+    return returnValue;
+  }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+  initialize: function(callback, frequency) {
+    this.callback = callback;
+    this.frequency = frequency;
+    this.currentlyExecuting = false;
+
+    this.registerCallback();
+  },
+
+  registerCallback: function() {
+    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+  },
+
+  execute: function() {
+    this.callback(this);
+  },
+
+  stop: function() {
+    if (!this.timer) return;
+    clearInterval(this.timer);
+    this.timer = null;
+  },
+
+  onTimerEvent: function() {
+    if (!this.currentlyExecuting) {
+      try {
+        this.currentlyExecuting = true;
+        this.execute();
+      } finally {
+        this.currentlyExecuting = false;
+      }
+    }
+  }
+});
+Object.extend(String, {
+  interpret: function(value) {
+    return value == null ? '' : String(value);
+  },
+  specialChar: {
+    '\b': '\\b',
+    '\t': '\\t',
+    '\n': '\\n',
+    '\f': '\\f',
+    '\r': '\\r',
+    '\\': '\\\\'
+  }
+});
+
+Object.extend(String.prototype, {
+  gsub: function(pattern, replacement) {
+    var result = '', source = this, match;
+    replacement = arguments.callee.prepareReplacement(replacement);
+
+    while (source.length > 0) {
+      if (match = source.match(pattern)) {
+        result += source.slice(0, match.index);
+        result += String.interpret(replacement(match));
+        source  = source.slice(match.index + match[0].length);
+      } else {
+        result += source, source = '';
+      }
+    }
+    return result;
+  },
+
+  sub: function(pattern, replacement, count) {
+    replacement = this.gsub.prepareReplacement(replacement);
+    count = Object.isUndefined(count) ? 1 : count;
+
+    return this.gsub(pattern, function(match) {
+      if (--count < 0) return match[0];
+      return replacement(match);
+    });
+  },
+
+  scan: function(pattern, iterator) {
+    this.gsub(pattern, iterator);
+    return String(this);
+  },
+
+  truncate: function(length, truncation) {
+    length = length || 30;
+    truncation = Object.isUndefined(truncation) ? '...' : truncation;
+    return this.length > length ?
+      this.slice(0, length - truncation.length) + truncation : String(this);
+  },
+
+  strip: function() {
+    return this.replace(/^\s+/, '').replace(/\s+$/, '');
+  },
+
+  stripTags: function() {
+    return this.replace(/<\/?[^>]+>/gi, '');
+  },
+
+  stripScripts: function() {
+    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+  },
+
+  extractScripts: function() {
+    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+    return (this.match(matchAll) || []).map(function(scriptTag) {
+      return (scriptTag.match(matchOne) || ['', ''])[1];
+    });
+  },
+
+  evalScripts: function() {
+    return this.extractScripts().map(function(script) { return eval(script) });
+  },
+
+  escapeHTML: function() {
+    var self = arguments.callee;
+    self.text.data = this;
+    return self.div.innerHTML;
+  },
+
+  unescapeHTML: function() {
+    var div = new Element('div');
+    div.innerHTML = this.stripTags();
+    return div.childNodes[0] ? (div.childNodes.length > 1 ?
+      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+      div.childNodes[0].nodeValue) : '';
+  },
+
+  toQueryParams: function(separator) {
+    var match = this.strip().match(/([^?#]*)(#.*)?$/);
+    if (!match) return { };
+
+    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+      if ((pair = pair.split('='))[0]) {
+        var key = decodeURIComponent(pair.shift());
+        var value = pair.length > 1 ? pair.join('=') : pair[0];
+        if (value != undefined) value = decodeURIComponent(value);
+
+        if (key in hash) {
+          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+          hash[key].push(value);
+        }
+        else hash[key] = value;
+      }
+      return hash;
+    });
+  },
+
+  toArray: function() {
+    return this.split('');
+  },
+
+  succ: function() {
+    return this.slice(0, this.length - 1) +
+      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+  },
+
+  times: function(count) {
+    return count < 1 ? '' : new Array(count + 1).join(this);
+  },
+
+  camelize: function() {
+    var parts = this.split('-'), len = parts.length;
+    if (len == 1) return parts[0];
+
+    var camelized = this.charAt(0) == '-'
+      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+      : parts[0];
+
+    for (var i = 1; i < len; i++)
+      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+    return camelized;
+  },
+
+  capitalize: function() {
+    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+  },
+
+  underscore: function() {
+    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+  },
+
+  dasherize: function() {
+    return this.gsub(/_/,'-');
+  },
+
+  inspect: function(useDoubleQuotes) {
+    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+      var character = String.specialChar[match[0]];
+      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+    });
+    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+  },
+
+  toJSON: function() {
+    return this.inspect(true);
+  },
+
+  unfilterJSON: function(filter) {
+    return this.sub(filter || Prototype.JSONFilter, '#{1}');
+  },
+
+  isJSON: function() {
+    var str = this;
+    if (str.blank()) return false;
+    str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+  },
+
+  evalJSON: function(sanitize) {
+    var json = this.unfilterJSON();
+    try {
+      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+    } catch (e) { }
+    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+  },
+
+  include: function(pattern) {
+    return this.indexOf(pattern) > -1;
+  },
+
+  startsWith: function(pattern) {
+    return this.indexOf(pattern) === 0;
+  },
+
+  endsWith: function(pattern) {
+    var d = this.length - pattern.length;
+    return d >= 0 && this.lastIndexOf(pattern) === d;
+  },
+
+  empty: function() {
+    return this == '';
+  },
+
+  blank: function() {
+    return /^\s*$/.test(this);
+  },
+
+  interpolate: function(object, pattern) {
+    return new Template(this, pattern).evaluate(object);
+  }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+  escapeHTML: function() {
+    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+  },
+  unescapeHTML: function() {
+    return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+  }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+  if (Object.isFunction(replacement)) return replacement;
+  var template = new Template(replacement);
+  return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+  div:  document.createElement('div'),
+  text: document.createTextNode('')
+});
+
+String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
+
+var Template = Class.create({
+  initialize: function(template, pattern) {
+    this.template = template.toString();
+    this.pattern = pattern || Template.Pattern;
+  },
+
+  evaluate: function(object) {
+    if (Object.isFunction(object.toTemplateReplacements))
+      object = object.toTemplateReplacements();
+
+    return this.template.gsub(this.pattern, function(match) {
+      if (object == null) return '';
+
+      var before = match[1] || '';
+      if (before == '\\') return match[2];
+
+      var ctx = object, expr = match[3];
+      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+      match = pattern.exec(expr);
+      if (match == null) return before;
+
+      while (match != null) {
+        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+        ctx = ctx[comp];
+        if (null == ctx || '' == match[3]) break;
+        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+        match = pattern.exec(expr);
+      }
+
+      return before + String.interpret(ctx);
+    });
+  }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+  each: function(iterator, context) {
+    var index = 0;
+    try {
+      this._each(function(value) {
+        iterator.call(context, value, index++);
+      });
+    } catch (e) {
+      if (e != $break) throw e;
+    }
+    return this;
+  },
+
+  eachSlice: function(number, iterator, context) {
+    var index = -number, slices = [], array = this.toArray();
+    if (number < 1) return array;
+    while ((index += number) < array.length)
+      slices.push(array.slice(index, index+number));
+    return slices.collect(iterator, context);
+  },
+
+  all: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result = true;
+    this.each(function(value, index) {
+      result = result && !!iterator.call(context, value, index);
+      if (!result) throw $break;
+    });
+    return result;
+  },
+
+  any: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result = false;
+    this.each(function(value, index) {
+      if (result = !!iterator.call(context, value, index))
+        throw $break;
+    });
+    return result;
+  },
+
+  collect: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var results = [];
+    this.each(function(value, index) {
+      results.push(iterator.call(context, value, index));
+    });
+    return results;
+  },
+
+  detect: function(iterator, context) {
+    var result;
+    this.each(function(value, index) {
+      if (iterator.call(context, value, index)) {
+        result = value;
+        throw $break;
+      }
+    });
+    return result;
+  },
+
+  findAll: function(iterator, context) {
+    var results = [];
+    this.each(function(value, index) {
+      if (iterator.call(context, value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  grep: function(filter, iterator, context) {
+    iterator = iterator || Prototype.K;
+    var results = [];
+
+    if (Object.isString(filter))
+      filter = new RegExp(filter);
+
+    this.each(function(value, index) {
+      if (filter.match(value))
+        results.push(iterator.call(context, value, index));
+    });
+    return results;
+  },
+
+  include: function(object) {
+    if (Object.isFunction(this.indexOf))
+      if (this.indexOf(object) != -1) return true;
+
+    var found = false;
+    this.each(function(value) {
+      if (value == object) {
+        found = true;
+        throw $break;
+      }
+    });
+    return found;
+  },
+
+  inGroupsOf: function(number, fillWith) {
+    fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+    return this.eachSlice(number, function(slice) {
+      while(slice.length < number) slice.push(fillWith);
+      return slice;
+    });
+  },
+
+  inject: function(memo, iterator, context) {
+    this.each(function(value, index) {
+      memo = iterator.call(context, memo, value, index);
+    });
+    return memo;
+  },
+
+  invoke: function(method) {
+    var args = $A(arguments).slice(1);
+    return this.map(function(value) {
+      return value[method].apply(value, args);
+    });
+  },
+
+  max: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result;
+    this.each(function(value, index) {
+      value = iterator.call(context, value, index);
+      if (result == null || value >= result)
+        result = value;
+    });
+    return result;
+  },
+
+  min: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result;
+    this.each(function(value, index) {
+      value = iterator.call(context, value, index);
+      if (result == null || value < result)
+        result = value;
+    });
+    return result;
+  },
+
+  partition: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var trues = [], falses = [];
+    this.each(function(value, index) {
+      (iterator.call(context, value, index) ?
+        trues : falses).push(value);
+    });
+    return [trues, falses];
+  },
+
+  pluck: function(property) {
+    var results = [];
+    this.each(function(value) {
+      results.push(value[property]);
+    });
+    return results;
+  },
+
+  reject: function(iterator, context) {
+    var results = [];
+    this.each(function(value, index) {
+      if (!iterator.call(context, value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  sortBy: function(iterator, context) {
+    return this.map(function(value, index) {
+      return {
+        value: value,
+        criteria: iterator.call(context, value, index)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria, b = right.criteria;
+      return a < b ? -1 : a > b ? 1 : 0;
+    }).pluck('value');
+  },
+
+  toArray: function() {
+    return this.map();
+  },
+
+  zip: function() {
+    var iterator = Prototype.K, args = $A(arguments);
+    if (Object.isFunction(args.last()))
+      iterator = args.pop();
+
+    var collections = [this].concat(args).map($A);
+    return this.map(function(value, index) {
+      return iterator(collections.pluck(index));
+    });
+  },
+
+  size: function() {
+    return this.toArray().length;
+  },
+
+  inspect: function() {
+    return '#<Enumerable:' + this.toArray().inspect() + '>';
+  }
+};
+
+Object.extend(Enumerable, {
+  map:     Enumerable.collect,
+  find:    Enumerable.detect,
+  select:  Enumerable.findAll,
+  filter:  Enumerable.findAll,
+  member:  Enumerable.include,
+  entries: Enumerable.toArray,
+  every:   Enumerable.all,
+  some:    Enumerable.any
+});
+function $A(iterable) {
+  if (!iterable) return [];
+  if (iterable.toArray) return iterable.toArray();
+  var length = iterable.length || 0, results = new Array(length);
+  while (length--) results[length] = iterable[length];
+  return results;
+}
+
+if (Prototype.Browser.WebKit) {
+  $A = function(iterable) {
+    if (!iterable) return [];
+    // In Safari, only use the `toArray` method if it's not a NodeList.
+    // A NodeList is a function, has an function `item` property, and a numeric
+    // `length` property. Adapted from Google Doctype.
+    if (!(typeof iterable === 'function' && typeof iterable.length ===
+        'number' && typeof iterable.item === 'function') && iterable.toArray)
+      return iterable.toArray();
+    var length = iterable.length || 0, results = new Array(length);
+    while (length--) results[length] = iterable[length];
+    return results;
+  };
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+  _each: function(iterator) {
+    for (var i = 0, length = this.length; i < length; i++)
+      iterator(this[i]);
+  },
+
+  clear: function() {
+    this.length = 0;
+    return this;
+  },
+
+  first: function() {
+    return this[0];
+  },
+
+  last: function() {
+    return this[this.length - 1];
+  },
+
+  compact: function() {
+    return this.select(function(value) {
+      return value != null;
+    });
+  },
+
+  flatten: function() {
+    return this.inject([], function(array, value) {
+      return array.concat(Object.isArray(value) ?
+        value.flatten() : [value]);
+    });
+  },
+
+  without: function() {
+    var values = $A(arguments);
+    return this.select(function(value) {
+      return !values.include(value);
+    });
+  },
+
+  reverse: function(inline) {
+    return (inline !== false ? this : this.toArray())._reverse();
+  },
+
+  reduce: function() {
+    return this.length > 1 ? this : this[0];
+  },
+
+  uniq: function(sorted) {
+    return this.inject([], function(array, value, index) {
+      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+        array.push(value);
+      return array;
+    });
+  },
+
+  intersect: function(array) {
+    return this.uniq().findAll(function(item) {
+      return array.detect(function(value) { return item === value });
+    });
+  },
+
+  clone: function() {
+    return [].concat(this);
+  },
+
+  size: function() {
+    return this.length;
+  },
+
+  inspect: function() {
+    return '[' + this.map(Object.inspect).join(', ') + ']';
+  },
+
+  toJSON: function() {
+    var results = [];
+    this.each(function(object) {
+      var value = Object.toJSON(object);
+      if (!Object.isUndefined(value)) results.push(value);
+    });
+    return '[' + results.join(', ') + ']';
+  }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+  Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+  i || (i = 0);
+  var length = this.length;
+  if (i < 0) i = length + i;
+  for (; i < length; i++)
+    if (this[i] === item) return i;
+  return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+  var n = this.slice(0, i).reverse().indexOf(item);
+  return (n < 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+  if (!Object.isString(string)) return [];
+  string = string.strip();
+  return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+  Array.prototype.concat = function() {
+    var array = [];
+    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+    for (var i = 0, length = arguments.length; i < length; i++) {
+      if (Object.isArray(arguments[i])) {
+        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+          array.push(arguments[i][j]);
+      } else {
+        array.push(arguments[i]);
+      }
+    }
+    return array;
+  };
+}
+Object.extend(Number.prototype, {
+  toColorPart: function() {
+    return this.toPaddedString(2, 16);
+  },
+
+  succ: function() {
+    return this + 1;
+  },
+
+  times: function(iterator, context) {
+    $R(0, this, true).each(iterator, context);
+    return this;
+  },
+
+  toPaddedString: function(length, radix) {
+    var string = this.toString(radix || 10);
+    return '0'.times(length - string.length) + string;
+  },
+
+  toJSON: function() {
+    return isFinite(this) ? this.toString() : 'null';
+  }
+});
+
+$w('abs round ceil floor').each(function(method){
+  Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+  return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+
+  function toQueryPair(key, value) {
+    if (Object.isUndefined(value)) return key;
+    return key + '=' + encodeURIComponent(String.interpret(value));
+  }
+
+  return {
+    initialize: function(object) {
+      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+    },
+
+    _each: function(iterator) {
+      for (var key in this._object) {
+        var value = this._object[key], pair = [key, value];
+        pair.key = key;
+        pair.value = value;
+        iterator(pair);
+      }
+    },
+
+    set: function(key, value) {
+      return this._object[key] = value;
+    },
+
+    get: function(key) {
+      // simulating poorly supported hasOwnProperty
+      if (this._object[key] !== Object.prototype[key])
+        return this._object[key];
+    },
+
+    unset: function(key) {
+      var value = this._object[key];
+      delete this._object[key];
+      return value;
+    },
+
+    toObject: function() {
+      return Object.clone(this._object);
+    },
+
+    keys: function() {
+      return this.pluck('key');
+    },
+
+    values: function() {
+      return this.pluck('value');
+    },
+
+    index: function(value) {
+      var match = this.detect(function(pair) {
+        return pair.value === value;
+      });
+      return match && match.key;
+    },
+
+    merge: function(object) {
+      return this.clone().update(object);
+    },
+
+    update: function(object) {
+      return new Hash(object).inject(this, function(result, pair) {
+        result.set(pair.key, pair.value);
+        return result;
+      });
+    },
+
+    toQueryString: function() {
+      return this.inject([], function(results, pair) {
+        var key = encodeURIComponent(pair.key), values = pair.value;
+
+        if (values && typeof values == 'object') {
+          if (Object.isArray(values))
+            return results.concat(values.map(toQueryPair.curry(key)));
+        } else results.push(toQueryPair(key, values));
+        return results;
+      }).join('&');
+    },
+
+    inspect: function() {
+      return '#<Hash:{' + this.map(function(pair) {
+        return pair.map(Object.inspect).join(': ');
+      }).join(', ') + '}>';
+    },
+
+    toJSON: function() {
+      return Object.toJSON(this.toObject());
+    },
+
+    clone: function() {
+      return new Hash(this);
+    }
+  }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+  initialize: function(start, end, exclusive) {
+    this.start = start;
+    this.end = end;
+    this.exclusive = exclusive;
+  },
+
+  _each: function(iterator) {
+    var value = this.start;
+    while (this.include(value)) {
+      iterator(value);
+      value = value.succ();
+    }
+  },
+
+  include: function(value) {
+    if (value < this.start)
+      return false;
+    if (this.exclusive)
+      return value < this.end;
+    return value <= this.end;
+  }
+});
+
+var $R = function(start, end, exclusive) {
+  return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+  getTransport: function() {
+    return Try.these(
+      function() {return new XMLHttpRequest()},
+      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+    ) || false;
+  },
+
+  activeRequestCount: 0
+};
+
+Ajax.Responders = {
+  responders: [],
+
+  _each: function(iterator) {
+    this.responders._each(iterator);
+  },
+
+  register: function(responder) {
+    if (!this.include(responder))
+      this.responders.push(responder);
+  },
+
+  unregister: function(responder) {
+    this.responders = this.responders.without(responder);
+  },
+
+  dispatch: function(callback, request, transport, json) {
+    this.each(function(responder) {
+      if (Object.isFunction(responder[callback])) {
+        try {
+          responder[callback].apply(responder, [request, transport, json]);
+        } catch (e) { }
+      }
+    });
+  }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+  onCreate:   function() { Ajax.activeRequestCount++ },
+  onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+  initialize: function(options) {
+    this.options = {
+      method:       'post',
+      asynchronous: true,
+      contentType:  'application/x-www-form-urlencoded',
+      encoding:     'UTF-8',
+      parameters:   '',
+      evalJSON:     true,
+      evalJS:       true
+    };
+    Object.extend(this.options, options || { });
+
+    this.options.method = this.options.method.toLowerCase();
+
+    if (Object.isString(this.options.parameters))
+      this.options.parameters = this.options.parameters.toQueryParams();
+    else if (Object.isHash(this.options.parameters))
+      this.options.parameters = this.options.parameters.toObject();
+  }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+  _complete: false,
+
+  initialize: function($super, url, options) {
+    $super(options);
+    this.transport = Ajax.getTransport();
+    this.request(url);
+  },
+
+  request: function(url) {
+    this.url = url;
+    this.method = this.options.method;
+    var params = Object.clone(this.options.parameters);
+
+    if (!['get', 'post'].include(this.method)) {
+      // simulate other verbs over post
+      params['_method'] = this.method;
+      this.method = 'post';
+    }
+
+    this.parameters = params;
+
+    if (params = Object.toQueryString(params)) {
+      // when GET, append parameters to URL
+      if (this.method == 'get')
+        this.url += (this.url.include('?') ? '&' : '?') + params;
+      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+        params += '&_=';
+    }
+
+    try {
+      var response = new Ajax.Response(this);
+      if (this.options.onCreate) this.options.onCreate(response);
+      Ajax.Responders.dispatch('onCreate', this, response);
+
+      this.transport.open(this.method.toUpperCase(), this.url,
+        this.options.asynchronous);
+
+      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+      this.transport.onreadystatechange = this.onStateChange.bind(this);
+      this.setRequestHeaders();
+
+      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+      this.transport.send(this.body);
+
+      /* Force Firefox to handle ready state 4 for synchronous requests */
+      if (!this.options.asynchronous && this.transport.overrideMimeType)
+        this.onStateChange();
+
+    }
+    catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  onStateChange: function() {
+    var readyState = this.transport.readyState;
+    if (readyState > 1 && !((readyState == 4) && this._complete))
+      this.respondToReadyState(this.transport.readyState);
+  },
+
+  setRequestHeaders: function() {
+    var headers = {
+      'X-Requested-With': 'XMLHttpRequest',
+      'X-Prototype-Version': Prototype.Version,
+      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+    };
+
+    if (this.method == 'post') {
+      headers['Content-type'] = this.options.contentType +
+        (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+      /* Force "Connection: close" for older Mozilla browsers to work
+       * around a bug where XMLHttpRequest sends an incorrect
+       * Content-length header. See Mozilla Bugzilla #246651.
+       */
+      if (this.transport.overrideMimeType &&
+          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+            headers['Connection'] = 'close';
+    }
+
+    // user-defined headers
+    if (typeof this.options.requestHeaders == 'object') {
+      var extras = this.options.requestHeaders;
+
+      if (Object.isFunction(extras.push))
+        for (var i = 0, length = extras.length; i < length; i += 2)
+          headers[extras[i]] = extras[i+1];
+      else
+        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+    }
+
+    for (var name in headers)
+      this.transport.setRequestHeader(name, headers[name]);
+  },
+
+  success: function() {
+    var status = this.getStatus();
+    return !status || (status >= 200 && status < 300);
+  },
+
+  getStatus: function() {
+    try {
+      return this.transport.status || 0;
+    } catch (e) { return 0 }
+  },
+
+  respondToReadyState: function(readyState) {
+    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+    if (state == 'Complete') {
+      try {
+        this._complete = true;
+        (this.options['on' + response.status]
+         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+         || Prototype.emptyFunction)(response, response.headerJSON);
+      } catch (e) {
+        this.dispatchException(e);
+      }
+
+      var contentType = response.getHeader('Content-type');
+      if (this.options.evalJS == 'force'
+          || (this.options.evalJS && this.isSameOrigin() && contentType
+          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+        this.evalResponse();
+    }
+
+    try {
+      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+    } catch (e) {
+      this.dispatchException(e);
+    }
+
+    if (state == 'Complete') {
+      // avoid memory leak in MSIE: clean up
+      this.transport.onreadystatechange = Prototype.emptyFunction;
+    }
+  },
+
+  isSameOrigin: function() {
+    var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+    return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+      protocol: location.protocol,
+      domain: document.domain,
+      port: location.port ? ':' + location.port : ''
+    }));
+  },
+
+  getHeader: function(name) {
+    try {
+      return this.transport.getResponseHeader(name) || null;
+    } catch (e) { return null }
+  },
+
+  evalResponse: function() {
+    try {
+      return eval((this.transport.responseText || '').unfilterJSON());
+    } catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  dispatchException: function(exception) {
+    (this.options.onException || Prototype.emptyFunction)(this, exception);
+    Ajax.Responders.dispatch('onException', this, exception);
+  }
+});
+
+Ajax.Request.Events =
+  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+  initialize: function(request){
+    this.request = request;
+    var transport  = this.transport  = request.transport,
+        readyState = this.readyState = transport.readyState;
+
+    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+      this.status       = this.getStatus();
+      this.statusText   = this.getStatusText();
+      this.responseText = String.interpret(transport.responseText);
+      this.headerJSON   = this._getHeaderJSON();
+    }
+
+    if(readyState == 4) {
+      var xml = transport.responseXML;
+      this.responseXML  = Object.isUndefined(xml) ? null : xml;
+      this.responseJSON = this._getResponseJSON();
+    }
+  },
+
+  status:      0,
+  statusText: '',
+
+  getStatus: Ajax.Request.prototype.getStatus,
+
+  getStatusText: function() {
+    try {
+      return this.transport.statusText || '';
+    } catch (e) { return '' }
+  },
+
+  getHeader: Ajax.Request.prototype.getHeader,
+
+  getAllHeaders: function() {
+    try {
+      return this.getAllResponseHeaders();
+    } catch (e) { return null }
+  },
+
+  getResponseHeader: function(name) {
+    return this.transport.getResponseHeader(name);
+  },
+
+  getAllResponseHeaders: function() {
+    return this.transport.getAllResponseHeaders();
+  },
+
+  _getHeaderJSON: function() {
+    var json = this.getHeader('X-JSON');
+    if (!json) return null;
+    json = decodeURIComponent(escape(json));
+    try {
+      return json.evalJSON(this.request.options.sanitizeJSON ||
+        !this.request.isSameOrigin());
+    } catch (e) {
+      this.request.dispatchException(e);
+    }
+  },
+
+  _getResponseJSON: function() {
+    var options = this.request.options;
+    if (!options.evalJSON || (options.evalJSON != 'force' &&
+      !(this.getHeader('Content-type') || '').include('application/json')) ||
+        this.responseText.blank())
+          return null;
+    try {
+      return this.responseText.evalJSON(options.sanitizeJSON ||
+        !this.request.isSameOrigin());
+    } catch (e) {
+      this.request.dispatchException(e);
+    }
+  }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+  initialize: function($super, container, url, options) {
+    this.container = {
+      success: (container.success || container),
+      failure: (container.failure || (container.success ? null : container))
+    };
+
+    options = Object.clone(options);
+    var onComplete = options.onComplete;
+    options.onComplete = (function(response, json) {
+      this.updateContent(response.responseText);
+      if (Object.isFunction(onComplete)) onComplete(response, json);
+    }).bind(this);
+
+    $super(url, options);
+  },
+
+  updateContent: function(responseText) {
+    var receiver = this.container[this.success() ? 'success' : 'failure'],
+        options = this.options;
+
+    if (!options.evalScripts) responseText = responseText.stripScripts();
+
+    if (receiver = $(receiver)) {
+      if (options.insertion) {
+        if (Object.isString(options.insertion)) {
+          var insertion = { }; insertion[options.insertion] = responseText;
+          receiver.insert(insertion);
+        }
+        else options.insertion(receiver, responseText);
+      }
+      else receiver.update(responseText);
+    }
+  }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+  initialize: function($super, container, url, options) {
+    $super(options);
+    this.onComplete = this.options.onComplete;
+
+    this.frequency = (this.options.frequency || 2);
+    this.decay = (this.options.decay || 1);
+
+    this.updater = { };
+    this.container = container;
+    this.url = url;
+
+    this.start();
+  },
+
+  start: function() {
+    this.options.onComplete = this.updateComplete.bind(this);
+    this.onTimerEvent();
+  },
+
+  stop: function() {
+    this.updater.options.onComplete = undefined;
+    clearTimeout(this.timer);
+    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+  },
+
+  updateComplete: function(response) {
+    if (this.options.decay) {
+      this.decay = (response.responseText == this.lastText ?
+        this.decay * this.options.decay : 1);
+
+      this.lastText = response.responseText;
+    }
+    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+  },
+
+  onTimerEvent: function() {
+    this.updater = new Ajax.Updater(this.container, this.url, this.options);
+  }
+});
+function $(element) {
+  if (arguments.length > 1) {
+    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+      elements.push($(arguments[i]));
+    return elements;
+  }
+  if (Object.isString(element))
+    element = document.getElementById(element);
+  return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+  document._getElementsByXPath = function(expression, parentElement) {
+    var results = [];
+    var query = document.evaluate(expression, $(parentElement) || document,
+      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+    for (var i = 0, length = query.snapshotLength; i < length; i++)
+      results.push(Element.extend(query.snapshotItem(i)));
+    return results;
+  };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+  // DOM level 2 ECMAScript Language Binding
+  Object.extend(Node, {
+    ELEMENT_NODE: 1,
+    ATTRIBUTE_NODE: 2,
+    TEXT_NODE: 3,
+    CDATA_SECTION_NODE: 4,
+    ENTITY_REFERENCE_NODE: 5,
+    ENTITY_NODE: 6,
+    PROCESSING_INSTRUCTION_NODE: 7,
+    COMMENT_NODE: 8,
+    DOCUMENT_NODE: 9,
+    DOCUMENT_TYPE_NODE: 10,
+    DOCUMENT_FRAGMENT_NODE: 11,
+    NOTATION_NODE: 12
+  });
+}
+
+(function() {
+  var element = this.Element;
+  this.Element = function(tagName, attributes) {
+    attributes = attributes || { };
+    tagName = tagName.toLowerCase();
+    var cache = Element.cache;
+    if (Prototype.Browser.IE && attributes.name) {
+      tagName = '<' + tagName + ' name="' + attributes.name + '">';
+      delete attributes.name;
+      return Element.writeAttribute(document.createElement(tagName), attributes);
+    }
+    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+  };
+  Object.extend(this.Element, element || { });
+  if (element) this.Element.prototype = element.prototype;
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+  visible: function(element) {
+    return $(element).style.display != 'none';
+  },
+
+  toggle: function(element) {
+    element = $(element);
+    Element[Element.visible(element) ? 'hide' : 'show'](element);
+    return element;
+  },
+
+  hide: function(element) {
+    element = $(element);
+    element.style.display = 'none';
+    return element;
+  },
+
+  show: function(element) {
+    element = $(element);
+    element.style.display = '';
+    return element;
+  },
+
+  remove: function(element) {
+    element = $(element);
+    element.parentNode.removeChild(element);
+    return element;
+  },
+
+  update: function(element, content) {
+    element = $(element);
+    if (content && content.toElement) content = content.toElement();
+    if (Object.isElement(content)) return element.update().insert(content);
+    content = Object.toHTML(content);
+    element.innerHTML = content.stripScripts();
+    content.evalScripts.bind(content).defer();
+    return element;
+  },
+
+  replace: function(element, content) {
+    element = $(element);
+    if (content && content.toElement) content = content.toElement();
+    else if (!Object.isElement(content)) {
+      content = Object.toHTML(content);
+      var range = element.ownerDocument.createRange();
+      range.selectNode(element);
+      content.evalScripts.bind(content).defer();
+      content = range.createContextualFragment(content.stripScripts());
+    }
+    element.parentNode.replaceChild(content, element);
+    return element;
+  },
+
+  insert: function(element, insertions) {
+    element = $(element);
+
+    if (Object.isString(insertions) || Object.isNumber(insertions) ||
+        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+          insertions = {bottom:insertions};
+
+    var content, insert, tagName, childNodes;
+
+    for (var position in insertions) {
+      content  = insertions[position];
+      position = position.toLowerCase();
+      insert = Element._insertionTranslations[position];
+
+      if (content && content.toElement) content = content.toElement();
+      if (Object.isElement(content)) {
+        insert(element, content);
+        continue;
+      }
+
+      content = Object.toHTML(content);
+
+      tagName = ((position == 'before' || position == 'after')
+        ? element.parentNode : element).tagName.toUpperCase();
+
+      childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+      if (position == 'top' || position == 'after') childNodes.reverse();
+      childNodes.each(insert.curry(element));
+
+      content.evalScripts.bind(content).defer();
+    }
+
+    return element;
+  },
+
+  wrap: function(element, wrapper, attributes) {
+    element = $(element);
+    if (Object.isElement(wrapper))
+      $(wrapper).writeAttribute(attributes || { });
+    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+    else wrapper = new Element('div', wrapper);
+    if (element.parentNode)
+      element.parentNode.replaceChild(wrapper, element);
+    wrapper.appendChild(element);
+    return wrapper;
+  },
+
+  inspect: function(element) {
+    element = $(element);
+    var result = '<' + element.tagName.toLowerCase();
+    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+      var property = pair.first(), attribute = pair.last();
+      var value = (element[property] || '').toString();
+      if (value) result += ' ' + attribute + '=' + value.inspect(true);
+    });
+    return result + '>';
+  },
+
+  recursivelyCollect: function(element, property) {
+    element = $(element);
+    var elements = [];
+    while (element = element[property])
+      if (element.nodeType == 1)
+        elements.push(Element.extend(element));
+    return elements;
+  },
+
+  ancestors: function(element) {
+    return $(element).recursivelyCollect('parentNode');
+  },
+
+  descendants: function(element) {
+    return $(element).select("*");
+  },
+
+  firstDescendant: function(element) {
+    element = $(element).firstChild;
+    while (element && element.nodeType != 1) element = element.nextSibling;
+    return $(element);
+  },
+
+  immediateDescendants: function(element) {
+    if (!(element = $(element).firstChild)) return [];
+    while (element && element.nodeType != 1) element = element.nextSibling;
+    if (element) return [element].concat($(element).nextSiblings());
+    return [];
+  },
+
+  previousSiblings: function(element) {
+    return $(element).recursivelyCollect('previousSibling');
+  },
+
+  nextSiblings: function(element) {
+    return $(element).recursivelyCollect('nextSibling');
+  },
+
+  siblings: function(element) {
+    element = $(element);
+    return element.previousSiblings().reverse().concat(element.nextSiblings());
+  },
+
+  match: function(element, selector) {
+    if (Object.isString(selector))
+      selector = new Selector(selector);
+    return selector.match($(element));
+  },
+
+  up: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(element.parentNode);
+    var ancestors = element.ancestors();
+    return Object.isNumber(expression) ? ancestors[expression] :
+      Selector.findElement(ancestors, expression, index);
+  },
+
+  down: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return element.firstDescendant();
+    return Object.isNumber(expression) ? element.descendants()[expression] :
+      Element.select(element, expression)[index || 0];
+  },
+
+  previous: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+    var previousSiblings = element.previousSiblings();
+    return Object.isNumber(expression) ? previousSiblings[expression] :
+      Selector.findElement(previousSiblings, expression, index);
+  },
+
+  next: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+    var nextSiblings = element.nextSiblings();
+    return Object.isNumber(expression) ? nextSiblings[expression] :
+      Selector.findElement(nextSiblings, expression, index);
+  },
+
+  select: function() {
+    var args = $A(arguments), element = $(args.shift());
+    return Selector.findChildElements(element, args);
+  },
+
+  adjacent: function() {
+    var args = $A(arguments), element = $(args.shift());
+    return Selector.findChildElements(element.parentNode, args).without(element);
+  },
+
+  identify: function(element) {
+    element = $(element);
+    var id = element.readAttribute('id'), self = arguments.callee;
+    if (id) return id;
+    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+    element.writeAttribute('id', id);
+    return id;
+  },
+
+  readAttribute: function(element, name) {
+    element = $(element);
+    if (Prototype.Browser.IE) {
+      var t = Element._attributeTranslations.read;
+      if (t.values[name]) return t.values[name](element, name);
+      if (t.names[name]) name = t.names[name];
+      if (name.include(':')) {
+        return (!element.attributes || !element.attributes[name]) ? null :
+         element.attributes[name].value;
+      }
+    }
+    return element.getAttribute(name);
+  },
+
+  writeAttribute: function(element, name, value) {
+    element = $(element);
+    var attributes = { }, t = Element._attributeTranslations.write;
+
+    if (typeof name == 'object') attributes = name;
+    else attributes[name] = Object.isUndefined(value) ? true : value;
+
+    for (var attr in attributes) {
+      name = t.names[attr] || attr;
+      value = attributes[attr];
+      if (t.values[attr]) name = t.values[attr](element, value);
+      if (value === false || value === null)
+        element.removeAttribute(name);
+      else if (value === true)
+        element.setAttribute(name, name);
+      else element.setAttribute(name, value);
+    }
+    return element;
+  },
+
+  getHeight: function(element) {
+    return $(element).getDimensions().height;
+  },
+
+  getWidth: function(element) {
+    return $(element).getDimensions().width;
+  },
+
+  classNames: function(element) {
+    return new Element.ClassNames(element);
+  },
+
+  hasClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    var elementClassName = element.className;
+    return (elementClassName.length > 0 && (elementClassName == className ||
+      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+  },
+
+  addClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    if (!element.hasClassName(className))
+      element.className += (element.className ? ' ' : '') + className;
+    return element;
+  },
+
+  removeClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    element.className = element.className.replace(
+      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+    return element;
+  },
+
+  toggleClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    return element[element.hasClassName(className) ?
+      'removeClassName' : 'addClassName'](className);
+  },
+
+  // removes whitespace-only text node children
+  cleanWhitespace: function(element) {
+    element = $(element);
+    var node = element.firstChild;
+    while (node) {
+      var nextNode = node.nextSibling;
+      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+        element.removeChild(node);
+      node = nextNode;
+    }
+    return element;
+  },
+
+  empty: function(element) {
+    return $(element).innerHTML.blank();
+  },
+
+  descendantOf: function(element, ancestor) {
+    element = $(element), ancestor = $(ancestor);
+
+    if (element.compareDocumentPosition)
+      return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+    if (ancestor.contains)
+      return ancestor.contains(element) && ancestor !== element;
+
+    while (element = element.parentNode)
+      if (element == ancestor) return true;
+
+    return false;
+  },
+
+  scrollTo: function(element) {
+    element = $(element);
+    var pos = element.cumulativeOffset();
+    window.scrollTo(pos[0], pos[1]);
+    return element;
+  },
+
+  getStyle: function(element, style) {
+    element = $(element);
+    style = style == 'float' ? 'cssFloat' : style.camelize();
+    var value = element.style[style];
+    if (!value || value == 'auto') {
+      var css = document.defaultView.getComputedStyle(element, null);
+      value = css ? css[style] : null;
+    }
+    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+    return value == 'auto' ? null : value;
+  },
+
+  getOpacity: function(element) {
+    return $(element).getStyle('opacity');
+  },
+
+  setStyle: function(element, styles) {
+    element = $(element);
+    var elementStyle = element.style, match;
+    if (Object.isString(styles)) {
+      element.style.cssText += ';' + styles;
+      return styles.include('opacity') ?
+        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+    }
+    for (var property in styles)
+      if (property == 'opacity') element.setOpacity(styles[property]);
+      else
+        elementStyle[(property == 'float' || property == 'cssFloat') ?
+          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+            property] = styles[property];
+
+    return element;
+  },
+
+  setOpacity: function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1 || value === '') ? '' :
+      (value < 0.00001) ? 0 : value;
+    return element;
+  },
+
+  getDimensions: function(element) {
+    element = $(element);
+    var display = element.getStyle('display');
+    if (display != 'none' && display != null) // Safari bug
+      return {width: element.offsetWidth, height: element.offsetHeight};
+
+    // All *Width and *Height properties give 0 on elements with display none,
+    // so enable the element temporarily
+    var els = element.style;
+    var originalVisibility = els.visibility;
+    var originalPosition = els.position;
+    var originalDisplay = els.display;
+    els.visibility = 'hidden';
+    els.position = 'absolute';
+    els.display = 'block';
+    var originalWidth = element.clientWidth;
+    var originalHeight = element.clientHeight;
+    els.display = originalDisplay;
+    els.position = originalPosition;
+    els.visibility = originalVisibility;
+    return {width: originalWidth, height: originalHeight};
+  },
+
+  makePositioned: function(element) {
+    element = $(element);
+    var pos = Element.getStyle(element, 'position');
+    if (pos == 'static' || !pos) {
+      element._madePositioned = true;
+      element.style.position = 'relative';
+      // Opera returns the offset relative to the positioning context, when an
+      // element is position relative but top and left have not been defined
+      if (Prototype.Browser.Opera) {
+        element.style.top = 0;
+        element.style.left = 0;
+      }
+    }
+    return element;
+  },
+
+  undoPositioned: function(element) {
+    element = $(element);
+    if (element._madePositioned) {
+      element._madePositioned = undefined;
+      element.style.position =
+        element.style.top =
+        element.style.left =
+        element.style.bottom =
+        element.style.right = '';
+    }
+    return element;
+  },
+
+  makeClipping: function(element) {
+    element = $(element);
+    if (element._overflow) return element;
+    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+    if (element._overflow !== 'hidden')
+      element.style.overflow = 'hidden';
+    return element;
+  },
+
+  undoClipping: function(element) {
+    element = $(element);
+    if (!element._overflow) return element;
+    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+    element._overflow = null;
+    return element;
+  },
+
+  cumulativeOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  positionedOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        if (element.tagName.toUpperCase() == 'BODY') break;
+        var p = Element.getStyle(element, 'position');
+        if (p !== 'static') break;
+      }
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  absolutize: function(element) {
+    element = $(element);
+    if (element.getStyle('position') == 'absolute') return element;
+    // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+    var offsets = element.positionedOffset();
+    var top     = offsets[1];
+    var left    = offsets[0];
+    var width   = element.clientWidth;
+    var height  = element.clientHeight;
+
+    element._originalLeft   = left - parseFloat(element.style.left  || 0);
+    element._originalTop    = top  - parseFloat(element.style.top || 0);
+    element._originalWidth  = element.style.width;
+    element._originalHeight = element.style.height;
+
+    element.style.position = 'absolute';
+    element.style.top    = top + 'px';
+    element.style.left   = left + 'px';
+    element.style.width  = width + 'px';
+    element.style.height = height + 'px';
+    return element;
+  },
+
+  relativize: function(element) {
+    element = $(element);
+    if (element.getStyle('position') == 'relative') return element;
+    // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+    element.style.position = 'relative';
+    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
+    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+    element.style.top    = top + 'px';
+    element.style.left   = left + 'px';
+    element.style.height = element._originalHeight;
+    element.style.width  = element._originalWidth;
+    return element;
+  },
+
+  cumulativeScrollOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.scrollTop  || 0;
+      valueL += element.scrollLeft || 0;
+      element = element.parentNode;
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  getOffsetParent: function(element) {
+    element = $(element);
+    var op = element.offsetParent, body = document.body, docEl = document.documentElement;
+
+    /* IE with strict doctype may try to return documentElement as offsetParent
+       on relatively positioned elements, we will return body instead */
+    if (op && op !== docEl) return $(op);
+    if (op === docEl || element === docEl || element === body) return $(body);
+
+    while ((element = element.parentNode) && element !== body)
+      if (Element.getStyle(element, 'position') != 'static')
+        return $(element);
+
+    return $(body);
+  },
+
+  viewportOffset: function(forElement) {
+    forElement = $(forElement);
+
+    var element = forElement, valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+    } while ((element = element.getOffsetParent()) != document.body);
+
+    element = forElement;
+    do {
+      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
+        valueT -= element.scrollTop  || 0;
+        valueL -= element.scrollLeft || 0;
+      }
+    } while (element = element.parentNode);
+
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  clonePosition: function(element, source) {
+    var options = Object.extend({
+      setLeft:    true,
+      setTop:     true,
+      setWidth:   true,
+      setHeight:  true,
+      offsetTop:  0,
+      offsetLeft: 0
+    }, arguments[2] || { });
+
+    // find page position of source
+    source = $(source);
+    var p = source.viewportOffset();
+
+    // find coordinate system to use
+    element = $(element);
+    var delta = [0, 0];
+    var parent = null;
+    // delta [0,0] will do fine with position: fixed elements,
+    // position:absolute needs offsetParent deltas
+    if (Element.getStyle(element, 'position') == 'absolute') {
+      parent = element.getOffsetParent();
+      delta = parent.viewportOffset();
+    }
+
+    // correct by body offsets (fixes Safari)
+    if (parent == document.body) {
+      delta[0] -= document.body.offsetLeft;
+      delta[1] -= document.body.offsetTop;
+    }
+
+    // set position
+    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
+    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
+    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
+    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+    return element;
+  }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+  getElementsBySelector: Element.Methods.select,
+  childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+  write: {
+    names: {
+      className: 'class',
+      htmlFor:   'for'
+    },
+    values: { }
+  }
+};
+
+if (Prototype.Browser.Opera) {
+  Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+    function(proceed, element, style) {
+      switch (style) {
+        case 'left': case 'top': case 'right': case 'bottom':
+          if (proceed(element, 'position') === 'static') return null;
+        case 'height': case 'width':
+          // returns '0px' for hidden elements; we want it to return null
+          if (!Element.visible(element)) return null;
+
+          // returns the border-box dimensions rather than the content-box
+          // dimensions, so we subtract padding and borders from the value
+          var dim = parseInt(proceed(element, style), 10);
+
+          if (dim !== element['offset' + style.capitalize()])
+            return dim + 'px';
+
+          var properties;
+          if (style === 'height') {
+            properties = ['border-top-width', 'padding-top',
+             'padding-bottom', 'border-bottom-width'];
+          }
+          else {
+            properties = ['border-left-width', 'padding-left',
+             'padding-right', 'border-right-width'];
+          }
+          return properties.inject(dim, function(memo, property) {
+            var val = proceed(element, property);
+            return val === null ? memo : memo - parseInt(val, 10);
+          }) + 'px';
+        default: return proceed(element, style);
+      }
+    }
+  );
+
+  Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+    function(proceed, element, attribute) {
+      if (attribute === 'title') return element.title;
+      return proceed(element, attribute);
+    }
+  );
+}
+
+else if (Prototype.Browser.IE) {
+  // IE doesn't report offsets correctly for static elements, so we change them
+  // to "relative" to get the values, then change them back.
+  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+    function(proceed, element) {
+      element = $(element);
+      // IE throws an error if element is not in document
+      try { element.offsetParent }
+      catch(e) { return $(document.body) }
+      var position = element.getStyle('position');
+      if (position !== 'static') return proceed(element);
+      element.setStyle({ position: 'relative' });
+      var value = proceed(element);
+      element.setStyle({ position: position });
+      return value;
+    }
+  );
+
+  $w('positionedOffset viewportOffset').each(function(method) {
+    Element.Methods[method] = Element.Methods[method].wrap(
+      function(proceed, element) {
+        element = $(element);
+        try { element.offsetParent }
+        catch(e) { return Element._returnOffset(0,0) }
+        var position = element.getStyle('position');
+        if (position !== 'static') return proceed(element);
+        // Trigger hasLayout on the offset parent so that IE6 reports
+        // accurate offsetTop and offsetLeft values for position: fixed.
+        var offsetParent = element.getOffsetParent();
+        if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+          offsetParent.setStyle({ zoom: 1 });
+        element.setStyle({ position: 'relative' });
+        var value = proceed(element);
+        element.setStyle({ position: position });
+        return value;
+      }
+    );
+  });
+
+  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+    function(proceed, element) {
+      try { element.offsetParent }
+      catch(e) { return Element._returnOffset(0,0) }
+      return proceed(element);
+    }
+  );
+
+  Element.Methods.getStyle = function(element, style) {
+    element = $(element);
+    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+    var value = element.style[style];
+    if (!value && element.currentStyle) value = element.currentStyle[style];
+
+    if (style == 'opacity') {
+      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+        if (value[1]) return parseFloat(value[1]) / 100;
+      return 1.0;
+    }
+
+    if (value == 'auto') {
+      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+        return element['offset' + style.capitalize()] + 'px';
+      return null;
+    }
+    return value;
+  };
+
+  Element.Methods.setOpacity = function(element, value) {
+    function stripAlpha(filter){
+      return filter.replace(/alpha\([^\)]*\)/gi,'');
+    }
+    element = $(element);
+    var currentStyle = element.currentStyle;
+    if ((currentStyle && !currentStyle.hasLayout) ||
+      (!currentStyle && element.style.zoom == 'normal'))
+        element.style.zoom = 1;
+
+    var filter = element.getStyle('filter'), style = element.style;
+    if (value == 1 || value === '') {
+      (filter = stripAlpha(filter)) ?
+        style.filter = filter : style.removeAttribute('filter');
+      return element;
+    } else if (value < 0.00001) value = 0;
+    style.filter = stripAlpha(filter) +
+      'alpha(opacity=' + (value * 100) + ')';
+    return element;
+  };
+
+  Element._attributeTranslations = {
+    read: {
+      names: {
+        'class': 'className',
+        'for':   'htmlFor'
+      },
+      values: {
+        _getAttr: function(element, attribute) {
+          return element.getAttribute(attribute, 2);
+        },
+        _getAttrNode: function(element, attribute) {
+          var node = element.getAttributeNode(attribute);
+          return node ? node.value : "";
+        },
+        _getEv: function(element, attribute) {
+          attribute = element.getAttribute(attribute);
+          return attribute ? attribute.toString().slice(23, -2) : null;
+        },
+        _flag: function(element, attribute) {
+          return $(element).hasAttribute(attribute) ? attribute : null;
+        },
+        style: function(element) {
+          return element.style.cssText.toLowerCase();
+        },
+        title: function(element) {
+          return element.title;
+        }
+      }
+    }
+  };
+
+  Element._attributeTranslations.write = {
+    names: Object.extend({
+      cellpadding: 'cellPadding',
+      cellspacing: 'cellSpacing'
+    }, Element._attributeTranslations.read.names),
+    values: {
+      checked: function(element, value) {
+        element.checked = !!value;
+      },
+
+      style: function(element, value) {
+        element.style.cssText = value ? value : '';
+      }
+    }
+  };
+
+  Element._attributeTranslations.has = {};
+
+  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+      'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+  });
+
+  (function(v) {
+    Object.extend(v, {
+      href:        v._getAttr,
+      src:         v._getAttr,
+      type:        v._getAttr,
+      action:      v._getAttrNode,
+      disabled:    v._flag,
+      checked:     v._flag,
+      readonly:    v._flag,
+      multiple:    v._flag,
+      onload:      v._getEv,
+      onunload:    v._getEv,
+      onclick:     v._getEv,
+      ondblclick:  v._getEv,
+      onmousedown: v._getEv,
+      onmouseup:   v._getEv,
+      onmouseover: v._getEv,
+      onmousemove: v._getEv,
+      onmouseout:  v._getEv,
+      onfocus:     v._getEv,
+      onblur:      v._getEv,
+      onkeypress:  v._getEv,
+      onkeydown:   v._getEv,
+      onkeyup:     v._getEv,
+      onsubmit:    v._getEv,
+      onreset:     v._getEv,
+      onselect:    v._getEv,
+      onchange:    v._getEv
+    });
+  })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+  Element.Methods.setOpacity = function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1) ? 0.999999 :
+      (value === '') ? '' : (value < 0.00001) ? 0 : value;
+    return element;
+  };
+}
+
+else if (Prototype.Browser.WebKit) {
+  Element.Methods.setOpacity = function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1 || value === '') ? '' :
+      (value < 0.00001) ? 0 : value;
+
+    if (value == 1)
+      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+        element.width++; element.width--;
+      } else try {
+        var n = document.createTextNode(' ');
+        element.appendChild(n);
+        element.removeChild(n);
+      } catch (e) { }
+
+    return element;
+  };
+
+  // Safari returns margins on body which is incorrect if the child is absolutely
+  // positioned.  For performance reasons, redefine Element#cumulativeOffset for
+  // KHTML/WebKit only.
+  Element.Methods.cumulativeOffset = function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      if (element.offsetParent == document.body)
+        if (Element.getStyle(element, 'position') == 'absolute') break;
+
+      element = element.offsetParent;
+    } while (element);
+
+    return Element._returnOffset(valueL, valueT);
+  };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+  Element.Methods.update = function(element, content) {
+    element = $(element);
+
+    if (content && content.toElement) content = content.toElement();
+    if (Object.isElement(content)) return element.update().insert(content);
+
+    content = Object.toHTML(content);
+    var tagName = element.tagName.toUpperCase();
+
+    if (tagName in Element._insertionTranslations.tags) {
+      $A(element.childNodes).each(function(node) { element.removeChild(node) });
+      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+        .each(function(node) { element.appendChild(node) });
+    }
+    else element.innerHTML = content.stripScripts();
+
+    content.evalScripts.bind(content).defer();
+    return element;
+  };
+}
+
+if ('outerHTML' in document.createElement('div')) {
+  Element.Methods.replace = function(element, content) {
+    element = $(element);
+
+    if (content && content.toElement) content = content.toElement();
+    if (Object.isElement(content)) {
+      element.parentNode.replaceChild(content, element);
+      return element;
+    }
+
+    content = Object.toHTML(content);
+    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+    if (Element._insertionTranslations.tags[tagName]) {
+      var nextSibling = element.next();
+      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+      parent.removeChild(element);
+      if (nextSibling)
+        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+      else
+        fragments.each(function(node) { parent.appendChild(node) });
+    }
+    else element.outerHTML = content.stripScripts();
+
+    content.evalScripts.bind(content).defer();
+    return element;
+  };
+}
+
+Element._returnOffset = function(l, t) {
+  var result = [l, t];
+  result.left = l;
+  result.top = t;
+  return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+  if (t) {
+    div.innerHTML = t[0] + html + t[1];
+    t[2].times(function() { div = div.firstChild });
+  } else div.innerHTML = html;
+  return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+  before: function(element, node) {
+    element.parentNode.insertBefore(node, element);
+  },
+  top: function(element, node) {
+    element.insertBefore(node, element.firstChild);
+  },
+  bottom: function(element, node) {
+    element.appendChild(node);
+  },
+  after: function(element, node) {
+    element.parentNode.insertBefore(node, element.nextSibling);
+  },
+  tags: {
+    TABLE:  ['<table>',                '</table>',                   1],
+    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
+    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
+    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+    SELECT: ['<select>',               '</select>',                  1]
+  }
+};
+
+(function() {
+  Object.extend(this.tags, {
+    THEAD: this.tags.TBODY,
+    TFOOT: this.tags.TBODY,
+    TH:    this.tags.TD
+  });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+  hasAttribute: function(element, attribute) {
+    attribute = Element._attributeTranslations.has[attribute] || attribute;
+    var node = $(element).getAttributeNode(attribute);
+    return !!(node && node.specified);
+  }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &&
+    document.createElement('div')['__proto__']) {
+  window.HTMLElement = { };
+  window.HTMLElement.prototype = document.createElement('div')['__proto__'];
+  Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+  if (Prototype.BrowserFeatures.SpecificElementExtensions)
+    return Prototype.K;
+
+  var Methods = { }, ByTag = Element.Methods.ByTag;
+
+  var extend = Object.extend(function(element) {
+    if (!element || element._extendedByPrototype ||
+        element.nodeType != 1 || element == window) return element;
+
+    var methods = Object.clone(Methods),
+      tagName = element.tagName.toUpperCase(), property, value;
+
+    // extend methods for specific tags
+    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+    for (property in methods) {
+      value = methods[property];
+      if (Object.isFunction(value) && !(property in element))
+        element[property] = value.methodize();
+    }
+
+    element._extendedByPrototype = Prototype.emptyFunction;
+    return element;
+
+  }, {
+    refresh: function() {
+      // extend methods for all tags (Safari doesn't need this)
+      if (!Prototype.BrowserFeatures.ElementExtensions) {
+        Object.extend(Methods, Element.Methods);
+        Object.extend(Methods, Element.Methods.Simulated);
+      }
+    }
+  });
+
+  extend.refresh();
+  return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+  if (element.hasAttribute) return element.hasAttribute(attribute);
+  return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+  if (!methods) {
+    Object.extend(Form, Form.Methods);
+    Object.extend(Form.Element, Form.Element.Methods);
+    Object.extend(Element.Methods.ByTag, {
+      "FORM":     Object.clone(Form.Methods),
+      "INPUT":    Object.clone(Form.Element.Methods),
+      "SELECT":   Object.clone(Form.Element.Methods),
+      "TEXTAREA": Object.clone(Form.Element.Methods)
+    });
+  }
+
+  if (arguments.length == 2) {
+    var tagName = methods;
+    methods = arguments[1];
+  }
+
+  if (!tagName) Object.extend(Element.Methods, methods || { });
+  else {
+    if (Object.isArray(tagName)) tagName.each(extend);
+    else extend(tagName);
+  }
+
+  function extend(tagName) {
+    tagName = tagName.toUpperCase();
+    if (!Element.Methods.ByTag[tagName])
+      Element.Methods.ByTag[tagName] = { };
+    Object.extend(Element.Methods.ByTag[tagName], methods);
+  }
+
+  function copy(methods, destination, onlyIfAbsent) {
+    onlyIfAbsent = onlyIfAbsent || false;
+    for (var property in methods) {
+      var value = methods[property];
+      if (!Object.isFunction(value)) continue;
+      if (!onlyIfAbsent || !(property in destination))
+        destination[property] = value.methodize();
+    }
+  }
+
+  function findDOMClass(tagName) {
+    var klass;
+    var trans = {
+      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+      "FrameSet", "IFRAME": "IFrame"
+    };
+    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+    if (window[klass]) return window[klass];
+    klass = 'HTML' + tagName + 'Element';
+    if (window[klass]) return window[klass];
+    klass = 'HTML' + tagName.capitalize() + 'Element';
+    if (window[klass]) return window[klass];
+
+    window[klass] = { };
+    window[klass].prototype = document.createElement(tagName)['__proto__'];
+    return window[klass];
+  }
+
+  if (F.ElementExtensions) {
+    copy(Element.Methods, HTMLElement.prototype);
+    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+  }
+
+  if (F.SpecificElementExtensions) {
+    for (var tag in Element.Methods.ByTag) {
+      var klass = findDOMClass(tag);
+      if (Object.isUndefined(klass)) continue;
+      copy(T[tag], klass.prototype);
+    }
+  }
+
+  Object.extend(Element, Element.Methods);
+  delete Element.ByTag;
+
+  if (Element.extend.refresh) Element.extend.refresh();
+  Element.cache = { };
+};
+
+document.viewport = {
+  getDimensions: function() {
+    var dimensions = { }, B = Prototype.Browser;
+    $w('width height').each(function(d) {
+      var D = d.capitalize();
+      if (B.WebKit && !document.evaluate) {
+        // Safari <3.0 needs self.innerWidth/Height
+        dimensions[d] = self['inner' + D];
+      } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
+        // Opera <9.5 needs document.body.clientWidth/Height
+        dimensions[d] = document.body['client' + D]
+      } else {
+        dimensions[d] = document.documentElement['client' + D];
+      }
+    });
+    return dimensions;
+  },
+
+  getWidth: function() {
+    return this.getDimensions().width;
+  },
+
+  getHeight: function() {
+    return this.getDimensions().height;
+  },
+
+  getScrollOffsets: function() {
+    return Element._returnOffset(
+      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+  }
+};
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license.  Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+  initialize: function(expression) {
+    this.expression = expression.strip();
+
+    if (this.shouldUseSelectorsAPI()) {
+      this.mode = 'selectorsAPI';
+    } else if (this.shouldUseXPath()) {
+      this.mode = 'xpath';
+      this.compileXPathMatcher();
+    } else {
+      this.mode = "normal";
+      this.compileMatcher();
+    }
+
+  },
+
+  shouldUseXPath: function() {
+    if (!Prototype.BrowserFeatures.XPath) return false;
+
+    var e = this.expression;
+
+    // Safari 3 chokes on :*-of-type and :empty
+    if (Prototype.Browser.WebKit &&
+     (e.include("-of-type") || e.include(":empty")))
+      return false;
+
+    // XPath can't do namespaced attributes, nor can it read
+    // the "checked" property from DOM nodes
+    if ((/(\[[\w-]*?:|:checked)/).test(e))
+      return false;
+
+    return true;
+  },
+
+  shouldUseSelectorsAPI: function() {
+    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+    if (!Selector._div) Selector._div = new Element('div');
+
+    // Make sure the browser treats the selector as valid. Test on an
+    // isolated element to minimize cost of this check.
+    try {
+      Selector._div.querySelector(this.expression);
+    } catch(e) {
+      return false;
+    }
+
+    return true;
+  },
+
+  compileMatcher: function() {
+    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+        c = Selector.criteria, le, p, m;
+
+    if (Selector._cache[e]) {
+      this.matcher = Selector._cache[e];
+      return;
+    }
+
+    this.matcher = ["this.matcher = function(root) {",
+                    "var r = root, h = Selector.handlers, c = false, n;"];
+
+    while (e && le != e && (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        p = ps[i];
+        if (m = e.match(p)) {
+          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+            new Template(c[i]).evaluate(m));
+          e = e.replace(m[0], '');
+          break;
+        }
+      }
+    }
+
+    this.matcher.push("return h.unique(n);\n}");
+    eval(this.matcher.join('\n'));
+    Selector._cache[this.expression] = this.matcher;
+  },
+
+  compileXPathMatcher: function() {
+    var e = this.expression, ps = Selector.patterns,
+        x = Selector.xpath, le, m;
+
+    if (Selector._cache[e]) {
+      this.xpath = Selector._cache[e]; return;
+    }
+
+    this.matcher = ['.//*'];
+    while (e && le != e && (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        if (m = e.match(ps[i])) {
+          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+            new Template(x[i]).evaluate(m));
+          e = e.replace(m[0], '');
+          break;
+        }
+      }
+    }
+
+    this.xpath = this.matcher.join('');
+    Selector._cache[this.expression] = this.xpath;
+  },
+
+  findElements: function(root) {
+    root = root || document;
+    var e = this.expression, results;
+
+    switch (this.mode) {
+      case 'selectorsAPI':
+        // querySelectorAll queries document-wide, then filters to descendants
+        // of the context element. That's not what we want.
+        // Add an explicit context to the selector if necessary.
+        if (root !== document) {
+          var oldId = root.id, id = $(root).identify();
+          e = "#" + id + " " + e;
+        }
+
+        results = $A(root.querySelectorAll(e)).map(Element.extend);
+        root.id = oldId;
+
+        return results;
+      case 'xpath':
+        return document._getElementsByXPath(this.xpath, root);
+      default:
+       return this.matcher(root);
+    }
+  },
+
+  match: function(element) {
+    this.tokens = [];
+
+    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+    var le, p, m;
+
+    while (e && le !== e && (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        p = ps[i];
+        if (m = e.match(p)) {
+          // use the Selector.assertions methods unless the selector
+          // is too complex.
+          if (as[i]) {
+            this.tokens.push([i, Object.clone(m)]);
+            e = e.replace(m[0], '');
+          } else {
+            // reluctantly do a document-wide search
+            // and look for a match in the array
+            return this.findElements(document).include(element);
+          }
+        }
+      }
+    }
+
+    var match = true, name, matches;
+    for (var i = 0, token; token = this.tokens[i]; i++) {
+      name = token[0], matches = token[1];
+      if (!Selector.assertions[name](element, matches)) {
+        match = false; break;
+      }
+    }
+
+    return match;
+  },
+
+  toString: function() {
+    return this.expression;
+  },
+
+  inspect: function() {
+    return "#<Selector:" + this.expression.inspect() + ">";
+  }
+});
+
+Object.extend(Selector, {
+  _cache: { },
+
+  xpath: {
+    descendant:   "//*",
+    child:        "/*",
+    adjacent:     "/following-sibling::*[1]",
+    laterSibling: '/following-sibling::*',
+    tagName:      function(m) {
+      if (m[1] == '*') return '';
+      return "[local-name()='" + m[1].toLowerCase() +
+             "' or local-name()='" + m[1].toUpperCase() + "']";
+    },
+    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+    id:           "[@id='#{1}']",
+    attrPresence: function(m) {
+      m[1] = m[1].toLowerCase();
+      return new Template("[@#{1}]").evaluate(m);
+    },
+    attr: function(m) {
+      m[1] = m[1].toLowerCase();
+      m[3] = m[5] || m[6];
+      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+    },
+    pseudo: function(m) {
+      var h = Selector.xpath.pseudos[m[1]];
+      if (!h) return '';
+      if (Object.isFunction(h)) return h(m);
+      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+    },
+    operators: {
+      '=':  "[@#{1}='#{3}']",
+      '!=': "[@#{1}!='#{3}']",
+      '^=': "[starts-with(@#{1}, '#{3}')]",
+      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+      '*=': "[contains(@#{1}, '#{3}')]",
+      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+    },
+    pseudos: {
+      'first-child': '[not(preceding-sibling::*)]',
+      'last-child':  '[not(following-sibling::*)]',
+      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
+      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
+      'checked':     "[@checked]",
+      'disabled':    "[(@disabled) and (@type!='hidden')]",
+      'enabled':     "[not(@disabled) and (@type!='hidden')]",
+      'not': function(m) {
+        var e = m[6], p = Selector.patterns,
+            x = Selector.xpath, le, v;
+
+        var exclusion = [];
+        while (e && le != e && (/\S/).test(e)) {
+          le = e;
+          for (var i in p) {
+            if (m = e.match(p[i])) {
+              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+              e = e.replace(m[0], '');
+              break;
+            }
+          }
+        }
+        return "[not(" + exclusion.join(" and ") + ")]";
+      },
+      'nth-child':      function(m) {
+        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+      },
+      'nth-last-child': function(m) {
+        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+      },
+      'nth-of-type':    function(m) {
+        return Selector.xpath.pseudos.nth("position() ", m);
+      },
+      'nth-last-of-type': function(m) {
+        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+      },
+      'first-of-type':  function(m) {
+        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+      },
+      'last-of-type':   function(m) {
+        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+      },
+      'only-of-type':   function(m) {
+        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+      },
+      nth: function(fragment, m) {
+        var mm, formula = m[6], predicate;
+        if (formula == 'even') formula = '2n+0';
+        if (formula == 'odd')  formula = '2n+1';
+        if (mm = formula.match(/^(\d+)$/)) // digit only
+          return '[' + fragment + "= " + mm[1] + ']';
+        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+          if (mm[1] == "-") mm[1] = -1;
+          var a = mm[1] ? Number(mm[1]) : 1;
+          var b = mm[2] ? Number(mm[2]) : 0;
+          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+          "((#{fragment} - #{b}) div #{a} >= 0)]";
+          return new Template(predicate).evaluate({
+            fragment: fragment, a: a, b: b });
+        }
+      }
+    }
+  },
+
+  criteria: {
+    tagName:      'n = h.tagName(n, r, "#{1}", c);      c = false;',
+    className:    'n = h.className(n, r, "#{1}", c);    c = false;',
+    id:           'n = h.id(n, r, "#{1}", c);           c = false;',
+    attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+    attr: function(m) {
+      m[3] = (m[5] || m[6]);
+      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+    },
+    pseudo: function(m) {
+      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+    },
+    descendant:   'c = "descendant";',
+    child:        'c = "child";',
+    adjacent:     'c = "adjacent";',
+    laterSibling: 'c = "laterSibling";'
+  },
+
+  patterns: {
+    // combinators must be listed first
+    // (and descendant needs to be last combinator)
+    laterSibling: /^\s*~\s*/,
+    child:        /^\s*>\s*/,
+    adjacent:     /^\s*\+\s*/,
+    descendant:   /^\s/,
+
+    // selectors follow
+    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
+    id:           /^#([\w\-\*]+)(\b|$)/,
+    className:    /^\.([\w\-\*]+)(\b|$)/,
+    pseudo:
+/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
+    attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
+    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+  },
+
+  // for Selector.match and Element#match
+  assertions: {
+    tagName: function(element, matches) {
+      return matches[1].toUpperCase() == element.tagName.toUpperCase();
+    },
+
+    className: function(element, matches) {
+      return Element.hasClassName(element, matches[1]);
+    },
+
+    id: function(element, matches) {
+      return element.id === matches[1];
+    },
+
+    attrPresence: function(element, matches) {
+      return Element.hasAttribute(element, matches[1]);
+    },
+
+    attr: function(element, matches) {
+      var nodeValue = Element.readAttribute(element, matches[1]);
+      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+    }
+  },
+
+  handlers: {
+    // UTILITY FUNCTIONS
+    // joins two collections
+    concat: function(a, b) {
+      for (var i = 0, node; node = b[i]; i++)
+        a.push(node);
+      return a;
+    },
+
+    // marks an array of nodes for counting
+    mark: function(nodes) {
+      var _true = Prototype.emptyFunction;
+      for (var i = 0, node; node = nodes[i]; i++)
+        node._countedByPrototype = _true;
+      return nodes;
+    },
+
+    unmark: function(nodes) {
+      for (var i = 0, node; node = nodes[i]; i++)
+        node._countedByPrototype = undefined;
+      return nodes;
+    },
+
+    // mark each child node with its position (for nth calls)
+    // "ofType" flag indicates whether we're indexing for nth-of-type
+    // rather than nth-child
+    index: function(parentNode, reverse, ofType) {
+      parentNode._countedByPrototype = Prototype.emptyFunction;
+      if (reverse) {
+        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+          var node = nodes[i];
+          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+        }
+      } else {
+        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+      }
+    },
+
+    // filters out duplicates and extends all nodes
+    unique: function(nodes) {
+      if (nodes.length == 0) return nodes;
+      var results = [], n;
+      for (var i = 0, l = nodes.length; i < l; i++)
+        if (!(n = nodes[i])._countedByPrototype) {
+          n._countedByPrototype = Prototype.emptyFunction;
+          results.push(Element.extend(n));
+        }
+      return Selector.handlers.unmark(results);
+    },
+
+    // COMBINATOR FUNCTIONS
+    descendant: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        h.concat(results, node.getElementsByTagName('*'));
+      return results;
+    },
+
+    child: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        for (var j = 0, child; child = node.childNodes[j]; j++)
+          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+      }
+      return results;
+    },
+
+    adjacent: function(nodes) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        var next = this.nextElementSibling(node);
+        if (next) results.push(next);
+      }
+      return results;
+    },
+
+    laterSibling: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        h.concat(results, Element.nextSiblings(node));
+      return results;
+    },
+
+    nextElementSibling: function(node) {
+      while (node = node.nextSibling)
+        if (node.nodeType == 1) return node;
+      return null;
+    },
+
+    previousElementSibling: function(node) {
+      while (node = node.previousSibling)
+        if (node.nodeType == 1) return node;
+      return null;
+    },
+
+    // TOKEN FUNCTIONS
+    tagName: function(nodes, root, tagName, combinator) {
+      var uTagName = tagName.toUpperCase();
+      var results = [], h = Selector.handlers;
+      if (nodes) {
+        if (combinator) {
+          // fastlane for ordinary descendant combinators
+          if (combinator == "descendant") {
+            for (var i = 0, node; node = nodes[i]; i++)
+              h.concat(results, node.getElementsByTagName(tagName));
+            return results;
+          } else nodes = this[combinator](nodes);
+          if (tagName == "*") return nodes;
+        }
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.tagName.toUpperCase() === uTagName) results.push(node);
+        return results;
+      } else return root.getElementsByTagName(tagName);
+    },
+
+    id: function(nodes, root, id, combinator) {
+      var targetNode = $(id), h = Selector.handlers;
+      if (!targetNode) return [];
+      if (!nodes && root == document) return [targetNode];
+      if (nodes) {
+        if (combinator) {
+          if (combinator == 'child') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (targetNode.parentNode == node) return [targetNode];
+          } else if (combinator == 'descendant') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (Element.descendantOf(targetNode, node)) return [targetNode];
+          } else if (combinator == 'adjacent') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (Selector.handlers.previousElementSibling(targetNode) == node)
+                return [targetNode];
+          } else nodes = h[combinator](nodes);
+        }
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node == targetNode) return [targetNode];
+        return [];
+      }
+      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+    },
+
+    className: function(nodes, root, className, combinator) {
+      if (nodes && combinator) nodes = this[combinator](nodes);
+      return Selector.handlers.byClassName(nodes, root, className);
+    },
+
+    byClassName: function(nodes, root, className) {
+      if (!nodes) nodes = Selector.handlers.descendant([root]);
+      var needle = ' ' + className + ' ';
+      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+        nodeClassName = node.className;
+        if (nodeClassName.length == 0) continue;
+        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+          results.push(node);
+      }
+      return results;
+    },
+
+    attrPresence: function(nodes, root, attr, combinator) {
+      if (!nodes) nodes = root.getElementsByTagName("*");
+      if (nodes && combinator) nodes = this[combinator](nodes);
+      var results = [];
+      for (var i = 0, node; node = nodes[i]; i++)
+        if (Element.hasAttribute(node, attr)) results.push(node);
+      return results;
+    },
+
+    attr: function(nodes, root, attr, value, operator, combinator) {
+      if (!nodes) nodes = root.getElementsByTagName("*");
+      if (nodes && combinator) nodes = this[combinator](nodes);
+      var handler = Selector.operators[operator], results = [];
+      for (var i = 0, node; node = nodes[i]; i++) {
+        var nodeValue = Element.readAttribute(node, attr);
+        if (nodeValue === null) continue;
+        if (handler(nodeValue, value)) results.push(node);
+      }
+      return results;
+    },
+
+    pseudo: function(nodes, name, value, root, combinator) {
+      if (nodes && combinator) nodes = this[combinator](nodes);
+      if (!nodes) nodes = root.getElementsByTagName("*");
+      return Selector.pseudos[name](nodes, value, root);
+    }
+  },
+
+  pseudos: {
+    'first-child': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        if (Selector.handlers.previousElementSibling(node)) continue;
+          results.push(node);
+      }
+      return results;
+    },
+    'last-child': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        if (Selector.handlers.nextElementSibling(node)) continue;
+          results.push(node);
+      }
+      return results;
+    },
+    'only-child': function(nodes, value, root) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+          results.push(node);
+      return results;
+    },
+    'nth-child':        function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root);
+    },
+    'nth-last-child':   function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, true);
+    },
+    'nth-of-type':      function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, false, true);
+    },
+    'nth-last-of-type': function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, true, true);
+    },
+    'first-of-type':    function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, "1", root, false, true);
+    },
+    'last-of-type':     function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, "1", root, true, true);
+    },
+    'only-of-type':     function(nodes, formula, root) {
+      var p = Selector.pseudos;
+      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+    },
+
+    // handles the an+b logic
+    getIndices: function(a, b, total) {
+      if (a == 0) return b > 0 ? [b] : [];
+      return $R(1, total).inject([], function(memo, i) {
+        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+        return memo;
+      });
+    },
+
+    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+    nth: function(nodes, formula, root, reverse, ofType) {
+      if (nodes.length == 0) return [];
+      if (formula == 'even') formula = '2n+0';
+      if (formula == 'odd')  formula = '2n+1';
+      var h = Selector.handlers, results = [], indexed = [], m;
+      h.mark(nodes);
+      for (var i = 0, node; node = nodes[i]; i++) {
+        if (!node.parentNode._countedByPrototype) {
+          h.index(node.parentNode, reverse, ofType);
+          indexed.push(node.parentNode);
+        }
+      }
+      if (formula.match(/^\d+$/)) { // just a number
+        formula = Number(formula);
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.nodeIndex == formula) results.push(node);
+      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+        if (m[1] == "-") m[1] = -1;
+        var a = m[1] ? Number(m[1]) : 1;
+        var b = m[2] ? Number(m[2]) : 0;
+        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+          for (var j = 0; j < l; j++)
+            if (node.nodeIndex == indices[j]) results.push(node);
+        }
+      }
+      h.unmark(nodes);
+      h.unmark(indexed);
+      return results;
+    },
+
+    'empty': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        // IE treats comments as element nodes
+        if (node.tagName == '!' || node.firstChild) continue;
+        results.push(node);
+      }
+      return results;
+    },
+
+    'not': function(nodes, selector, root) {
+      var h = Selector.handlers, selectorType, m;
+      var exclusions = new Selector(selector).findElements(root);
+      h.mark(exclusions);
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!node._countedByPrototype) results.push(node);
+      h.unmark(exclusions);
+      return results;
+    },
+
+    'enabled': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!node.disabled && (!node.type || node.type !== 'hidden'))
+          results.push(node);
+      return results;
+    },
+
+    'disabled': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (node.disabled) results.push(node);
+      return results;
+    },
+
+    'checked': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (node.checked) results.push(node);
+      return results;
+    }
+  },
+
+  operators: {
+    '=':  function(nv, v) { return nv == v; },
+    '!=': function(nv, v) { return nv != v; },
+    '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+    '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+    '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
+    '$=': function(nv, v) { return nv.endsWith(v); },
+    '*=': function(nv, v) { return nv.include(v); },
+    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+     '-').include('-' + (v || "").toUpperCase() + '-'); }
+  },
+
+  split: function(expression) {
+    var expressions = [];
+    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+      expressions.push(m[1].strip());
+    });
+    return expressions;
+  },
+
+  matchElements: function(elements, expression) {
+    var matches = $$(expression), h = Selector.handlers;
+    h.mark(matches);
+    for (var i = 0, results = [], element; element = elements[i]; i++)
+      if (element._countedByPrototype) results.push(element);
+    h.unmark(matches);
+    return results;
+  },
+
+  findElement: function(elements, expression, index) {
+    if (Object.isNumber(expression)) {
+      index = expression; expression = false;
+    }
+    return Selector.matchElements(elements, expression || '*')[index || 0];
+  },
+
+  findChildElements: function(element, expressions) {
+    expressions = Selector.split(expressions.join(','));
+    var results = [], h = Selector.handlers;
+    for (var i = 0, l = expressions.length, selector; i < l; i++) {
+      selector = new Selector(expressions[i].strip());
+      h.concat(results, selector.findElements(element));
+    }
+    return (l > 1) ? h.unique(results) : results;
+  }
+});
+
+if (Prototype.Browser.IE) {
+  Object.extend(Selector.handlers, {
+    // IE returns comment nodes on getElementsByTagName("*").
+    // Filter them out.
+    concat: function(a, b) {
+      for (var i = 0, node; node = b[i]; i++)
+        if (node.tagName !== "!") a.push(node);
+      return a;
+    },
+
+    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
+    unmark: function(nodes) {
+      for (var i = 0, node; node = nodes[i]; i++)
+        node.removeAttribute('_countedByPrototype');
+      return nodes;
+    }
+  });
+}
+
+function $$() {
+  return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+  reset: function(form) {
+    $(form).reset();
+    return form;
+  },
+
+  serializeElements: function(elements, options) {
+    if (typeof options != 'object') options = { hash: !!options };
+    else if (Object.isUndefined(options.hash)) options.hash = true;
+    var key, value, submitted = false, submit = options.submit;
+
+    var data = elements.inject({ }, function(result, element) {
+      if (!element.disabled && element.name) {
+        key = element.name; value = $(element).getValue();
+        if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+            submit !== false && (!submit || key == submit) && (submitted = true)))) {
+          if (key in result) {
+            // a key is already present; construct an array of values
+            if (!Object.isArray(result[key])) result[key] = [result[key]];
+            result[key].push(value);
+          }
+          else result[key] = value;
+        }
+      }
+      return result;
+    });
+
+    return options.hash ? data : Object.toQueryString(data);
+  }
+};
+
+Form.Methods = {
+  serialize: function(form, options) {
+    return Form.serializeElements(Form.getElements(form), options);
+  },
+
+  getElements: function(form) {
+    return $A($(form).getElementsByTagName('*')).inject([],
+      function(elements, child) {
+        if (Form.Element.Serializers[child.tagName.toLowerCase()])
+          elements.push(Element.extend(child));
+        return elements;
+      }
+    );
+  },
+
+  getInputs: function(form, typeName, name) {
+    form = $(form);
+    var inputs = form.getElementsByTagName('input');
+
+    if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+      var input = inputs[i];
+      if ((typeName && input.type != typeName) || (name && input.name != name))
+        continue;
+      matchingInputs.push(Element.extend(input));
+    }
+
+    return matchingInputs;
+  },
+
+  disable: function(form) {
+    form = $(form);
+    Form.getElements(form).invoke('disable');
+    return form;
+  },
+
+  enable: function(form) {
+    form = $(form);
+    Form.getElements(form).invoke('enable');
+    return form;
+  },
+
+  findFirstElement: function(form) {
+    var elements = $(form).getElements().findAll(function(element) {
+      return 'hidden' != element.type && !element.disabled;
+    });
+    var firstByIndex = elements.findAll(function(element) {
+      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+    }).sortBy(function(element) { return element.tabIndex }).first();
+
+    return firstByIndex ? firstByIndex : elements.find(function(element) {
+      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+    });
+  },
+
+  focusFirstElement: function(form) {
+    form = $(form);
+    form.findFirstElement().activate();
+    return form;
+  },
+
+  request: function(form, options) {
+    form = $(form), options = Object.clone(options || { });
+
+    var params = options.parameters, action = form.readAttribute('action') || '';
+    if (action.blank()) action = window.location.href;
+    options.parameters = form.serialize(true);
+
+    if (params) {
+      if (Object.isString(params)) params = params.toQueryParams();
+      Object.extend(options.parameters, params);
+    }
+
+    if (form.hasAttribute('method') && !options.method)
+      options.method = form.method;
+
+    return new Ajax.Request(action, options);
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+  focus: function(element) {
+    $(element).focus();
+    return element;
+  },
+
+  select: function(element) {
+    $(element).select();
+    return element;
+  }
+};
+
+Form.Element.Methods = {
+  serialize: function(element) {
+    element = $(element);
+    if (!element.disabled && element.name) {
+      var value = element.getValue();
+      if (value != undefined) {
+        var pair = { };
+        pair[element.name] = value;
+        return Object.toQueryString(pair);
+      }
+    }
+    return '';
+  },
+
+  getValue: function(element) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    return Form.Element.Serializers[method](element);
+  },
+
+  setValue: function(element, value) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    Form.Element.Serializers[method](element, value);
+    return element;
+  },
+
+  clear: function(element) {
+    $(element).value = '';
+    return element;
+  },
+
+  present: function(element) {
+    return $(element).value != '';
+  },
+
+  activate: function(element) {
+    element = $(element);
+    try {
+      element.focus();
+      if (element.select && (element.tagName.toLowerCase() != 'input' ||
+          !['button', 'reset', 'submit'].include(element.type)))
+        element.select();
+    } catch (e) { }
+    return element;
+  },
+
+  disable: function(element) {
+    element = $(element);
+    element.disabled = true;
+    return element;
+  },
+
+  enable: function(element) {
+    element = $(element);
+    element.disabled = false;
+    return element;
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+  input: function(element, value) {
+    switch (element.type.toLowerCase()) {
+      case 'checkbox':
+      case 'radio':
+        return Form.Element.Serializers.inputSelector(element, value);
+      default:
+        return Form.Element.Serializers.textarea(element, value);
+    }
+  },
+
+  inputSelector: function(element, value) {
+    if (Object.isUndefined(value)) return element.checked ? element.value : null;
+    else element.checked = !!value;
+  },
+
+  textarea: function(element, value) {
+    if (Object.isUndefined(value)) return element.value;
+    else element.value = value;
+  },
+
+  select: function(element, value) {
+    if (Object.isUndefined(value))
+      return this[element.type == 'select-one' ?
+        'selectOne' : 'selectMany'](element);
+    else {
+      var opt, currentValue, single = !Object.isArray(value);
+      for (var i = 0, length = element.length; i < length; i++) {
+        opt = element.options[i];
+        currentValue = this.optionValue(opt);
+        if (single) {
+          if (currentValue == value) {
+            opt.selected = true;
+            return;
+          }
+        }
+        else opt.selected = value.include(currentValue);
+      }
+    }
+  },
+
+  selectOne: function(element) {
+    var index = element.selectedIndex;
+    return index >= 0 ? this.optionValue(element.options[index]) : null;
+  },
+
+  selectMany: function(element) {
+    var values, length = element.length;
+    if (!length) return null;
+
+    for (var i = 0, values = []; i < length; i++) {
+      var opt = element.options[i];
+      if (opt.selected) values.push(this.optionValue(opt));
+    }
+    return values;
+  },
+
+  optionValue: function(opt) {
+    // extend element because hasAttribute may not be native
+    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+  initialize: function($super, element, frequency, callback) {
+    $super(callback, frequency);
+    this.element   = $(element);
+    this.lastValue = this.getValue();
+  },
+
+  execute: function() {
+    var value = this.getValue();
+    if (Object.isString(this.lastValue) && Object.isString(value) ?
+        this.lastValue != value : String(this.lastValue) != String(value)) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+  initialize: function(element, callback) {
+    this.element  = $(element);
+    this.callback = callback;
+
+    this.lastValue = this.getValue();
+    if (this.element.tagName.toLowerCase() == 'form')
+      this.registerFormCallbacks();
+    else
+      this.registerCallback(this.element);
+  },
+
+  onElementEvent: function() {
+    var value = this.getValue();
+    if (this.lastValue != value) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  },
+
+  registerFormCallbacks: function() {
+    Form.getElements(this.element).each(this.registerCallback, this);
+  },
+
+  registerCallback: function(element) {
+    if (element.type) {
+      switch (element.type.toLowerCase()) {
+        case 'checkbox':
+        case 'radio':
+          Event.observe(element, 'click', this.onElementEvent.bind(this));
+          break;
+        default:
+          Event.observe(element, 'change', this.onElementEvent.bind(this));
+          break;
+      }
+    }
+  }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+  KEY_BACKSPACE: 8,
+  KEY_TAB:       9,
+  KEY_RETURN:   13,
+  KEY_ESC:      27,
+  KEY_LEFT:     37,
+  KEY_UP:       38,
+  KEY_RIGHT:    39,
+  KEY_DOWN:     40,
+  KEY_DELETE:   46,
+  KEY_HOME:     36,
+  KEY_END:      35,
+  KEY_PAGEUP:   33,
+  KEY_PAGEDOWN: 34,
+  KEY_INSERT:   45,
+
+  cache: { },
+
+  relatedTarget: function(event) {
+    var element;
+    switch(event.type) {
+      case 'mouseover': element = event.fromElement; break;
+      case 'mouseout':  element = event.toElement;   break;
+      default: return null;
+    }
+    return Element.extend(element);
+  }
+});
+
+Event.Methods = (function() {
+  var isButton;
+
+  if (Prototype.Browser.IE) {
+    var buttonMap = { 0: 1, 1: 4, 2: 2 };
+    isButton = function(event, code) {
+      return event.button == buttonMap[code];
+    };
+
+  } else if (Prototype.Browser.WebKit) {
+    isButton = function(event, code) {
+      switch (code) {
+        case 0: return event.which == 1 && !event.metaKey;
+        case 1: return event.which == 1 && event.metaKey;
+        default: return false;
+      }
+    };
+
+  } else {
+    isButton = function(event, code) {
+      return event.which ? (event.which === code + 1) : (event.button === code);
+    };
+  }
+
+  return {
+    isLeftClick:   function(event) { return isButton(event, 0) },
+    isMiddleClick: function(event) { return isButton(event, 1) },
+    isRightClick:  function(event) { return isButton(event, 2) },
+
+    element: function(event) {
+      event = Event.extend(event);
+
+      var node          = event.target,
+          type          = event.type,
+          currentTarget = event.currentTarget;
+
+      if (currentTarget && currentTarget.tagName) {
+        // Firefox screws up the "click" event when moving between radio buttons
+        // via arrow keys. It also screws up the "load" and "error" events on images,
+        // reporting the document as the target instead of the original image.
+        if (type === 'load' || type === 'error' ||
+          (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+            && currentTarget.type === 'radio'))
+              node = currentTarget;
+      }
+      if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
+      return Element.extend(node);
+    },
+
+    findElement: function(event, expression) {
+      var element = Event.element(event);
+      if (!expression) return element;
+      var elements = [element].concat(element.ancestors());
+      return Selector.findElement(elements, expression, 0);
+    },
+
+    pointer: function(event) {
+      var docElement = document.documentElement,
+      body = document.body || { scrollLeft: 0, scrollTop: 0 };
+      return {
+        x: event.pageX || (event.clientX +
+          (docElement.scrollLeft || body.scrollLeft) -
+          (docElement.clientLeft || 0)),
+        y: event.pageY || (event.clientY +
+          (docElement.scrollTop || body.scrollTop) -
+          (docElement.clientTop || 0))
+      };
+    },
+
+    pointerX: function(event) { return Event.pointer(event).x },
+    pointerY: function(event) { return Event.pointer(event).y },
+
+    stop: function(event) {
+      Event.extend(event);
+      event.preventDefault();
+      event.stopPropagation();
+      event.stopped = true;
+    }
+  };
+})();
+
+Event.extend = (function() {
+  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+    m[name] = Event.Methods[name].methodize();
+    return m;
+  });
+
+  if (Prototype.Browser.IE) {
+    Object.extend(methods, {
+      stopPropagation: function() { this.cancelBubble = true },
+      preventDefault:  function() { this.returnValue = false },
+      inspect: function() { return "[object Event]" }
+    });
+
+    return function(event) {
+      if (!event) return false;
+      if (event._extendedByPrototype) return event;
+
+      event._extendedByPrototype = Prototype.emptyFunction;
+      var pointer = Event.pointer(event);
+      Object.extend(event, {
+        target: event.srcElement,
+        relatedTarget: Event.relatedTarget(event),
+        pageX:  pointer.x,
+        pageY:  pointer.y
+      });
+      return Object.extend(event, methods);
+    };
+
+  } else {
+    Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
+    Object.extend(Event.prototype, methods);
+    return Prototype.K;
+  }
+})();
+
+Object.extend(Event, (function() {
+  var cache = Event.cache;
+
+  function getEventID(element) {
+    if (element._prototypeEventID) return element._prototypeEventID[0];
+    arguments.callee.id = arguments.callee.id || 1;
+    return element._prototypeEventID = [++arguments.callee.id];
+  }
+
+  function getDOMEventName(eventName) {
+    if (eventName && eventName.include(':')) return "dataavailable";
+    return eventName;
+  }
+
+  function getCacheForID(id) {
+    return cache[id] = cache[id] || { };
+  }
+
+  function getWrappersForEventName(id, eventName) {
+    var c = getCacheForID(id);
+    return c[eventName] = c[eventName] || [];
+  }
+
+  function createWrapper(element, eventName, handler) {
+    var id = getEventID(element);
+    var c = getWrappersForEventName(id, eventName);
+    if (c.pluck("handler").include(handler)) return false;
+
+    var wrapper = function(event) {
+      if (!Event || !Event.extend ||
+        (event.eventName && event.eventName != eventName))
+          return false;
+
+      Event.extend(event);
+      handler.call(element, event);
+    };
+
+    wrapper.handler = handler;
+    c.push(wrapper);
+    return wrapper;
+  }
+
+  function findWrapper(id, eventName, handler) {
+    var c = getWrappersForEventName(id, eventName);
+    return c.find(function(wrapper) { return wrapper.handler == handler });
+  }
+
+  function destroyWrapper(id, eventName, handler) {
+    var c = getCacheForID(id);
+    if (!c[eventName]) return false;
+    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+  }
+
+  function destroyCache() {
+    for (var id in cache)
+      for (var eventName in cache[id])
+        cache[id][eventName] = null;
+  }
+
+
+  // Internet Explorer needs to remove event handlers on page unload
+  // in order to avoid memory leaks.
+  if (window.attachEvent) {
+    window.attachEvent("onunload", destroyCache);
+  }
+
+  // Safari has a dummy event handler on page unload so that it won't
+  // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
+  // object when page is returned to via the back button using its bfcache.
+  if (Prototype.Browser.WebKit) {
+    window.addEventListener('unload', Prototype.emptyFunction, false);
+  }
+
+  return {
+    observe: function(element, eventName, handler) {
+      element = $(element);
+      var name = getDOMEventName(eventName);
+
+      var wrapper = createWrapper(element, eventName, handler);
+      if (!wrapper) return element;
+
+      if (element.addEventListener) {
+        element.addEventListener(name, wrapper, false);
+      } else {
+        element.attachEvent("on" + name, wrapper);
+      }
+
+      return element;
+    },
+
+    stopObserving: function(element, eventName, handler) {
+      element = $(element);
+      var id = getEventID(element), name = getDOMEventName(eventName);
+
+      if (!handler && eventName) {
+        getWrappersForEventName(id, eventName).each(function(wrapper) {
+          element.stopObserving(eventName, wrapper.handler);
+        });
+        return element;
+
+      } else if (!eventName) {
+        Object.keys(getCacheForID(id)).each(function(eventName) {
+          element.stopObserving(eventName);
+        });
+        return element;
+      }
+
+      var wrapper = findWrapper(id, eventName, handler);
+      if (!wrapper) return element;
+
+      if (element.removeEventListener) {
+        element.removeEventListener(name, wrapper, false);
+      } else {
+        element.detachEvent("on" + name, wrapper);
+      }
+
+      destroyWrapper(id, eventName, handler);
+
+      return element;
+    },
+
+    fire: function(element, eventName, memo) {
+      element = $(element);
+      if (element == document && document.createEvent && !element.dispatchEvent)
+        element = document.documentElement;
+
+      var event;
+      if (document.createEvent) {
+        event = document.createEvent("HTMLEvents");
+        event.initEvent("dataavailable", true, true);
+      } else {
+        event = document.createEventObject();
+        event.eventType = "ondataavailable";
+      }
+
+      event.eventName = eventName;
+      event.memo = memo || { };
+
+      if (document.createEvent) {
+        element.dispatchEvent(event);
+      } else {
+        element.fireEvent(event.eventType, event);
+      }
+
+      return Event.extend(event);
+    }
+  };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+  fire:          Event.fire,
+  observe:       Event.observe,
+  stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+  fire:          Element.Methods.fire.methodize(),
+  observe:       Element.Methods.observe.methodize(),
+  stopObserving: Element.Methods.stopObserving.methodize(),
+  loaded:        false
+});
+
+(function() {
+  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+     Matthias Miller, Dean Edwards and John Resig. */
+
+  var timer;
+
+  function fireContentLoadedEvent() {
+    if (document.loaded) return;
+    if (timer) window.clearInterval(timer);
+    document.fire("dom:loaded");
+    document.loaded = true;
+  }
+
+  if (document.addEventListener) {
+    if (Prototype.Browser.WebKit) {
+      timer = window.setInterval(function() {
+        if (/loaded|complete/.test(document.readyState))
+          fireContentLoadedEvent();
+      }, 0);
+
+      Event.observe(window, "load", fireContentLoadedEvent);
+
+    } else {
+      document.addEventListener("DOMContentLoaded",
+        fireContentLoadedEvent, false);
+    }
+
+  } else {
+    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
+    $("__onDOMContentLoaded").onreadystatechange = function() {
+      if (this.readyState == "complete") {
+        this.onreadystatechange = null;
+        fireContentLoadedEvent();
+      }
+    };
+  }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+  Before: function(element, content) {
+    return Element.insert(element, {before:content});
+  },
+
+  Top: function(element, content) {
+    return Element.insert(element, {top:content});
+  },
+
+  Bottom: function(element, content) {
+    return Element.insert(element, {bottom:content});
+  },
+
+  After: function(element, content) {
+    return Element.insert(element, {after:content});
+  }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+  // set to true if needed, warning: firefox performance problems
+  // NOT neeeded for page scrolling, only if draggable contained in
+  // scrollable elements
+  includeScrollOffsets: false,
+
+  // must be called before calling withinIncludingScrolloffset, every time the
+  // page is scrolled
+  prepare: function() {
+    this.deltaX =  window.pageXOffset
+                || document.documentElement.scrollLeft
+                || document.body.scrollLeft
+                || 0;
+    this.deltaY =  window.pageYOffset
+                || document.documentElement.scrollTop
+                || document.body.scrollTop
+                || 0;
+  },
+
+  // caches x/y coordinate pair to use with overlap
+  within: function(element, x, y) {
+    if (this.includeScrollOffsets)
+      return this.withinIncludingScrolloffsets(element, x, y);
+    this.xcomp = x;
+    this.ycomp = y;
+    this.offset = Element.cumulativeOffset(element);
+
+    return (y >= this.offset[1] &&
+            y <  this.offset[1] + element.offsetHeight &&
+            x >= this.offset[0] &&
+            x <  this.offset[0] + element.offsetWidth);
+  },
+
+  withinIncludingScrolloffsets: function(element, x, y) {
+    var offsetcache = Element.cumulativeScrollOffset(element);
+
+    this.xcomp = x + offsetcache[0] - this.deltaX;
+    this.ycomp = y + offsetcache[1] - this.deltaY;
+    this.offset = Element.cumulativeOffset(element);
+
+    return (this.ycomp >= this.offset[1] &&
+            this.ycomp <  this.offset[1] + element.offsetHeight &&
+            this.xcomp >= this.offset[0] &&
+            this.xcomp <  this.offset[0] + element.offsetWidth);
+  },
+
+  // within must be called directly before
+  overlap: function(mode, element) {
+    if (!mode) return 0;
+    if (mode == 'vertical')
+      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+        element.offsetHeight;
+    if (mode == 'horizontal')
+      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+        element.offsetWidth;
+  },
+
+  // Deprecation layer -- use newer Element methods now (1.5.2).
+
+  cumulativeOffset: Element.Methods.cumulativeOffset,
+
+  positionedOffset: Element.Methods.positionedOffset,
+
+  absolutize: function(element) {
+    Position.prepare();
+    return Element.absolutize(element);
+  },
+
+  relativize: function(element) {
+    Position.prepare();
+    return Element.relativize(element);
+  },
+
+  realOffset: Element.Methods.cumulativeScrollOffset,
+
+  offsetParent: Element.Methods.getOffsetParent,
+
+  page: Element.Methods.viewportOffset,
+
+  clone: function(source, target, options) {
+    options = options || { };
+    return Element.clonePosition(target, source, options);
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+  function iter(name) {
+    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+  }
+
+  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+  function(element, className) {
+    className = className.toString().strip();
+    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+  } : function(element, className) {
+    className = className.toString().strip();
+    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+    if (!classNames && !className) return elements;
+
+    var nodes = $(element).getElementsByTagName('*');
+    className = ' ' + className + ' ';
+
+    for (var i = 0, child, cn; child = nodes[i]; i++) {
+      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+          (classNames && classNames.all(function(name) {
+            return !name.toString().blank() && cn.include(' ' + name + ' ');
+          }))))
+        elements.push(Element.extend(child));
+    }
+    return elements;
+  };
+
+  return function(className, parentElement) {
+    return $(parentElement || document.body).getElementsByClassName(className);
+  };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+  initialize: function(element) {
+    this.element = $(element);
+  },
+
+  _each: function(iterator) {
+    this.element.className.split(/\s+/).select(function(name) {
+      return name.length > 0;
+    })._each(iterator);
+  },
+
+  set: function(className) {
+    this.element.className = className;
+  },
+
+  add: function(classNameToAdd) {
+    if (this.include(classNameToAdd)) return;
+    this.set($A(this).concat(classNameToAdd).join(' '));
+  },
+
+  remove: function(classNameToRemove) {
+    if (!this.include(classNameToRemove)) return;
+    this.set($A(this).without(classNameToRemove).join(' '));
+  },
+
+  toString: function() {
+    return $A(this).join(' ');
+  }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods();
\ No newline at end of file
diff --git a/js/src/selectlist.js b/js/src/selectlist.js
new file mode 100644
index 0000000..9e18993
--- /dev/null
+++ b/js/src/selectlist.js
@@ -0,0 +1,24 @@
+/**
+ * Provides the javascript for the selectlist.php script.
+ *
+ * $Horde: gollem/js/src/selectlist.js,v 1.1.2.1 2008/10/09 20:54:41 jan Exp $
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ */
+function returnID()
+{
+    var field = parent.opener.document[formid].selectlist_selectid, field2 = parent.opener.document[formid].actionID;
+
+    if (parent.opener.closed || !field || !field2) {
+        alert(GollemText.opener_window);
+        window.close();
+        return;
+    }
+
+    field.value = cacheid;
+    field2.value = 'selectlist_process';
+
+    parent.opener.document[formid].submit();
+    window.close();
+}
diff --git a/js/src/tables.js b/js/src/tables.js
new file mode 100644
index 0000000..e3ffa16
--- /dev/null
+++ b/js/src/tables.js
@@ -0,0 +1,264 @@
+/**
+ * Javascript code for finding all tables with classname "striped" and
+ * dynamically striping their row colors, and finding all tables with
+ * classname "sortable" and making them dynamically sortable.
+ *
+ * TODO: incorporate missing features (if wanted) and improvements from:
+ * http://tetlaw.id.au/view/blog/table-sorting-with-prototype/
+ * http://www.millstream.com.au/view/code/tablekit/
+ * http://tablesorter.com/docs/
+ *
+ * $Horde: gollem/js/src/tables.js,v 1.8.2.1 2008/10/09 20:54:41 jan Exp $
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ */
+
+var SORT_COLUMN_INDEX;
+
+function table_stripe(table)
+{
+    var classes = [ 'rowEven', 'rowOdd' ];
+
+    // Tables can have more than one tbody element; get all child
+    // tbody tags and interate through them.
+    table.select('tbody tr').each(function(c) {
+        c.removeClassName(classes[1]);
+        c.addClassName(classes[0]);
+        classes.reverse(true);
+    });
+}
+
+function table_makeSortable(table)
+{
+    var i = 0;
+
+    // We have a first row: assume it's the header, and make its
+    // contents clickable links.
+    table.down('tr').childElements().each(function(cell) {
+        if (cell.hasClassName('nosort')) {
+            ++i;
+            return;
+        }
+
+        cell.setAttribute('columnIndex', i++);
+        cell.setStyle({ cursor: 'pointer' });
+        cell.observe('click', function(e) {
+            var c = e.findElement('th');
+            e.stop();
+            var a = c.down('a');
+            if (a && !a.hasClassName('sortlink')) {
+                return true;
+            }
+            table_resortTable(c);
+            return false;
+        });
+    });
+}
+
+function table_getSortValue(el)
+{
+    var str = '';
+
+    if (Object.isString(el) || Object.isUndefined(el)) {
+        return el;
+    }
+
+    // Use "sortval" if defined.
+    el = $(el);
+    if (el.readAttribute('sortval')) {
+        return el.readAttribute('sortval');
+    }
+
+    if (el.innerText) {
+        // Not needed but it is faster.
+        return el.innerText;
+    }
+
+    $A(el.childNodes).each(function(e) {
+        switch (e.nodeType) {
+        case 1:
+            // ELEMENT_NODE
+            str += table_getSortValue(e);
+            break;
+
+        case 3:
+            // TEXT_NODE
+            str += e.nodeValue;
+            break;
+        }
+    });
+
+    return str;
+}
+
+function table_resortTable(th)
+{
+    var table = th.up('table'),
+        th_siblings = th.up().childElements(),
+        sortfn,
+        sortDown = 0;
+
+    th_siblings.each(function(e) {
+        if (th == e) {
+            if (e.hasClassName('sortup')) {
+                e.removeClassName('sortup');
+                e.addClassName('sortdown');
+            } else if (e.hasClassName('sortdown')) {
+                e.removeClassName('sortdown');
+                e.addClassName('sortup');
+                sortDown = 1;
+            } else {
+                e.addClassName('sortdown');
+            }
+        } else {
+            e.removeClassName('sortup');
+            e.removeClassName('sortdown');
+        }
+    });
+
+    // Work out a type for the column
+    if (th_siblings.size() <= 1) {
+        return;
+    }
+
+    SORT_COLUMN_INDEX = th.readAttribute('columnIndex');
+    var itm = table_getSortValue(table.down('tbody > tr').cells[SORT_COLUMN_INDEX]);
+
+    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/) ||
+        itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) {
+        sortfn = table_sort_date;
+    } else if (itm.match(/^[£$]/)) {
+        sortfn = table_sort_currency;
+    } else if (itm.match(/^[\d\.]+$/)) {
+        sortfn = table_sort_numeric;
+    } else {
+        sortfn = table_sort_caseinsensitive;
+    }
+
+    // Don't mix up seperate tbodies; sort each in turn.
+    $A(table.getElementsByTagName('tbody')).each(function(tbody) {
+        var bottomRows = [ ],
+            newRows = $A(tbody.getElementsByTagName('tr'));
+
+        newRows.sort(sortfn);
+        if (sortDown) {
+            newRows.reverse();
+        }
+
+        // We appendChild rows that already exist to the tbody, so it
+        // moves them rather than creating new ones. Don't do
+        // sortbottom rows.
+        newRows.each(function(r) {
+            if (r.hasClassName('sortbottom')) {
+                bottomRows.push(r);
+            } else {
+                tbody.appendChild(r);
+            }
+        });
+
+        // Do sortbottom rows only.
+        bottomRows.each(function(r) {
+            tbody.appendChild(r);
+        });
+    });
+
+    // If we just resorted a striped table, re-stripe it.
+    if (table.hasClassName('striped')) {
+        table_stripe(table);
+    }
+
+    // Finally, see if we have a callback function to trigger.
+    if (typeof table_sortCallback != 'undefined' && Object.isFunction(table_sortCallback)) {
+        table_sortCallback(table.id, th.id, sortDown);
+    }
+}
+
+function table_sort_date(a, b)
+{
+    // Two digit years less than 50 are treated as 20XX, greater than
+    // 50 are treated as 19XX.
+    var aa = table_getSortValue(a.cells[SORT_COLUMN_INDEX]),
+        bb = table_getSortValue(b.cells[SORT_COLUMN_INDEX]),
+        dt1, dt2, yr;
+
+    if (aa.length == 10) {
+        dt1 = aa.substr(6, 4) + aa.substr(3, 2) + aa.substr(0, 2);
+    } else {
+        yr = aa.substr(6, 2);
+        if (parseInt(yr) < 50) {
+            yr = '20' + yr;
+        } else {
+            yr = '19' + yr;
+        }
+        dt1 = yr + aa.substr(3, 2) + aa.substr(0, 2);
+    }
+    if (bb.length == 10) {
+        dt2 = bb.substr(6, 4) + bb.substr(3, 2) + bb.substr(0, 2);
+    } else {
+        yr = bb.substr(6, 2);
+        if (parseInt(yr) < 50) {
+            yr = '20' + yr;
+        } else {
+            yr = '19' + yr;
+        }
+        dt2 = yr + bb.substr(3, 2) + bb.substr(0, 2);
+    }
+    if (dt1 == dt2) {
+        return 0;
+    } else if (dt1 < dt2) {
+        return -1;
+    }
+    return 1;
+}
+
+function table_sort_currency(a, b)
+{
+    var aa = table_getSortValue(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g, ''),
+        bb = table_getSortValue(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g, '');
+    return parseFloat(aa) - parseFloat(bb);
+}
+
+function table_sort_numeric(a, b)
+{
+    var aa = parseFloat(table_getSortValue(a.cells[SORT_COLUMN_INDEX]));
+    if (isNaN(aa)) {
+        aa = 0;
+    }
+    var bb = parseFloat(table_getSortValue(b.cells[SORT_COLUMN_INDEX]));
+    if (isNaN(bb)) {
+        bb = 0;
+    }
+    return aa - bb;
+}
+
+function table_sort_caseinsensitive(a, b)
+{
+    var aa = table_getSortValue(a.cells[SORT_COLUMN_INDEX]).toLowerCase(),
+        bb = table_getSortValue(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
+    if (aa == bb) {
+        return 0;
+    } else if (aa < bb) {
+        return -1;
+    }
+    return 1;
+}
+
+function table_sort_default(a, b)
+{
+    var aa = table_getSortValue(a.cells[SORT_COLUMN_INDEX]),
+        bb = table_getSortValue(b.cells[SORT_COLUMN_INDEX]);
+    if (aa == bb) {
+        return 0;
+    } else if (aa < bb) {
+        return -1;
+    }
+    return 1;
+}
+
+/* We do everything onload so that the entire document is present
+ * before we start searching it for tables. */
+document.observe('dom:loaded', function() {
+    $$('table.striped').each(table_stripe);
+    $$('table.sortable').each(table_makeSortable);
+});
diff --git a/js/stripe.js b/js/stripe.js
deleted file mode 100644
index 89ebe08..0000000
--- a/js/stripe.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Javascript code for finding all tables with classname "striped" and
- * dynamically striping their row colors.
- *
- * $Horde: gollem/js/stripe.js,v 1.1.2.1 2006/01/17 23:30:32 jan Exp $
- *
- * See the enclosed file COPYING for license information (GPL). If you did not
- * receive this file, see http://www.fsf.org/copyleft/gpl.html.
- */
-
-/* We do everything onload so that the entire document is present
- * before we start searching it for tables. */
-if (window.addEventListener) {
-    window.addEventListener('load', findStripedTables, false);
-} else if (window.attachEvent) {
-    window.attachEvent('onload', findStripedTables);
-} else if (window.onload != null) {
-    var oldOnLoad = window.onload;
-    window.onload = function(e)
-    {
-        oldOnLoad(e);
-        findStripedTables();
-    };
-} else {
-    window.onload = findStripedTables;
-}
-
-function findStripedTables()
-{
-    if (!document.getElementsByTagName) {
-        return;
-    }
-    tables = document.getElementsByTagName('table');
-    for (i = 0; i < tables.length; i++) {
-        if (tables[i].className.indexOf('striped') != -1) {
-            stripe(tables[i]);
-        }
-    }
-}
-
-function stripe(table)
-{
-    // The flag we'll use to keep track of whether the current row is
-    // odd or even.
-    var even = false;
-
-    // Tables can have more than one tbody element; get all child
-    // tbody tags and interate through them.
-    var tbodies = table.childNodes;
-    for (var c = 0; c < tbodies.length; c++) {
-        if (tbodies[c].tagName == 'TBODY') {
-            var trs = tbodies[c].childNodes;
-            for (var i = 0; i < trs.length; i++) {
-                if (trs[i].tagName == 'TR') {
-                    trs[i].className = trs[i].className.replace(/ ?rowEven ?/, '').replace(/ ?rowOdd ?/, '');
-                    if (trs[i].className) {
-                        trs[i].className += ' ';
-                    }
-                    trs[i].className += even ? 'rowEven' : 'rowOdd';
-
-                    // Flip from odd to even, or vice-versa.
-                    even = !even;
-                }
-            }
-        }
-    }
-}
diff --git a/js/tables.js b/js/tables.js
new file mode 100644
index 0000000..41833af
--- /dev/null
+++ b/js/tables.js
@@ -0,0 +1 @@
+var SORT_COLUMN_INDEX;function table_stripe(B){var A=["rowEven","rowOdd"];B.select("tbody tr").each(function(C){C.removeClassName(A[1]);C.addClassName(A[0]);A.reverse(true)})}function table_makeSortable(B){var A=0;B.down("tr").childElements().each(function(C){if(C.hasClassName("nosort")){++A;return}C.setAttribute("columnIndex",A++);C.setStyle({cursor:"pointer"});C.observe("click",function(E){var F=E.findElement("th");E.stop();var D=F.down("a");if(D&&!D.hasClassName("sortlink")){return true}table_resortTable(F);return false})})}function table_getSortValue(A){var B="";if(Object.isString(A)||Object.isUndefined(A)){return A}A=$(A);if(A.readAttribute("sortval")){return A.readAttribute("sortval")}if(A.innerText){return A.innerText}$A(A.childNodes).each(function(C){switch(C.nodeType){case 1:B+=table_getSortValue(C);break;case 3:B+=C.nodeValue;break}});return B}function table_resortTable(D){var C=D.up("table"),E=D.up().childElements(),B,A=0;E.each(function(G){if(D==G){if(G.hasClassName("sortup")){G.removeClassName("sortup");G.addClassName("sortdown")}else{if(G.hasClassName("sortdown")){G.removeClassName("sortdown");G.addClassName("sortup");A=1}else{G.addClassName("sortdown")}}}else{G.removeClassName("sortup");G.removeClassName("sortdown")}});if(E.size()<=1){return}SORT_COLUMN_INDEX=D.readAttribute("columnIndex");var F=table_getSortValue(C.down("tbody > tr").cells[SORT_COLUMN_INDEX]);if(F.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)||F.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)){B=table_sort_date}else{if(F.match(/^[?$]/)){B=table_sort_currency}else{if(F.match(/^[\d\.]+$/)){B=table_sort_numeric}else{B=table_sort_caseinsensitive}}}$A(C.getElementsByTagName("tbody")).each(function(H){var G=[],I=$A(H.getElementsByTagName("tr"));I.sort(B);if(A){I.reverse()}I.each(function(J){if(J.hasClassName("sortbottom")){G.push(J)}else{H.appendChild(J)}});G.each(function(J){H.appendChild(J)})});if(C.hasClassName("striped")){table_stripe(C)}if(typeof table_sortCallback!="undefined"&&Object.isFunction(table_sortCallback)){table_sortCallback(C.id,D.id,A)}}function table_sort_date(C,A){var F=table_getSortValue(C.cells[SORT_COLUMN_INDEX]),G=table_getSortValue(A.cells[SORT_COLUMN_INDEX]),D,B,E;if(F.length==10){D=F.substr(6,4)+F.substr(3,2)+F.substr(0,2)}else{E=F.substr(6,2);if(parseInt(E)<50){E="20"+E}else{E="19"+E}D=E+F.substr(3,2)+F.substr(0,2)}if(G.length==10){B=G.substr(6,4)+G.substr(3,2)+G.substr(0,2)}else{E=G.substr(6,2);if(parseInt(E)<50){E="20"+E}else{E="19"+E}B=E+G.substr(3,2)+G.substr(0,2)}if(D==B){return 0}else{if(D<B){return-1}}return 1}function table_sort_currency(B,A){var C=table_getSortValue(B.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,""),D=table_getSortValue(A.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,"");return parseFloat(C)-parseFloat(D)}function table_sort_numeric(B,A){var C=parseFloat(table_getSortValue(B.cells[SORT_COLUMN_INDEX]));if(isNaN(C)){C=0}var D=parseFloat(table_getSortValue(A.cells[SORT_COLUMN_INDEX]));if(isNaN(D)){D=0}return C-D}function table_sort_caseinsensitive(B,A){var C=table_getSortValue(B.cells[SORT_COLUMN_INDEX]).toLowerCase(),D=table_getSortValue(A.cells[SORT_COLUMN_INDEX]).toLowerCase();if(C==D){return 0}else{if(C<D){return-1}}return 1}function table_sort_default(B,A){var C=table_getSortValue(B.cells[SORT_COLUMN_INDEX]),D=table_getSortValue(A.cells[SORT_COLUMN_INDEX]);if(C==D){return 0}else{if(C<D){return-1}}return 1}document.observe("dom:loaded",function(){$$("table.striped").each(table_stripe);$$("table.sortable").each(table_makeSortable)});
\ No newline at end of file
diff --git a/lib/Auth/gollem.php b/lib/Auth/gollem.php
index 7dc89c1..f13de72 100644
--- a/lib/Auth/gollem.php
+++ b/lib/Auth/gollem.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * The Auth_gollem:: class provides an Gollem implementation of the Horde
+ * The Auth_gollem:: class provides a Gollem implementation of the Horde
  * authentication system.
  *
  * Required parameters:<pre>
@@ -9,9 +9,9 @@
  * Optional parameters:<pre>
  *   None.</pre>
  *
- * $Horde: gollem/lib/Auth/gollem.php,v 1.18.2.5 2007/01/02 13:54:53 jan Exp $
+ * $Horde: gollem/lib/Auth/gollem.php,v 1.18.2.7 2009/01/06 15:23:54 jan Exp $
  *
- * Copyright 2004-2007 Michael Slusarz <slusarz at curecanti.org>
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
  *
  * See the enclosed file COPYING for license information (LGPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
@@ -95,7 +95,12 @@ class Auth_gollem extends Auth {
             return false;
         }
 
+        // Allocate a global VFS object
         $GLOBALS['gollem_vfs'] = &Gollem::getVFSOb($_SESSION['gollem']['backend_key']);
+        if (is_a($GLOBALS['gollem_vfs'], 'PEAR_Error')) {
+            Horde::fatal($GLOBALS['gollem_vfs']);
+        }
+
         $valid = $GLOBALS['gollem_vfs']->checkCredentials();
         if (is_a($valid, 'PEAR_Error')) {
             $msg = $valid->getMessage();
diff --git a/lib/Block/tree_menu.php b/lib/Block/tree_menu.php
index 893888e..c275905 100644
--- a/lib/Block/tree_menu.php
+++ b/lib/Block/tree_menu.php
@@ -6,9 +6,9 @@ $block_type = 'tree';
 /**
  * Gollem tree block.
  *
- * $Horde: gollem/lib/Block/tree_menu.php,v 1.5.2.2 2007/01/02 13:54:53 jan Exp $
+ * $Horde: gollem/lib/Block/tree_menu.php,v 1.5.2.4 2009/01/06 15:23:54 jan Exp $
  *
- * Copyright 2005-2007 Michael Slusarz <slusarz at horde.org>
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
  *
  * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
@@ -26,8 +26,8 @@ class Horde_Block_gollem_tree_menu extends Horde_Block {
             $old_auth = $GLOBALS['authentication'];
         }
         $GLOBALS['authentication'] = 'none';
-        @define('GOLLEM_BASE', dirname(__FILE__) . '/../..');
-        require_once GOLLEM_BASE . '/lib/base.php';
+
+        require_once dirname(__FILE__) . '/../base.php';
         if (isset($old_auth)) {
             $GLOBALS['authentication'] = $old_auth;
         }
@@ -36,14 +36,16 @@ class Horde_Block_gollem_tree_menu extends Horde_Block {
         $login_url = Horde::applicationUrl('login.php');
 
         foreach ($GLOBALS['gollem_backends'] as $key => $val) {
-            $tree->addNode($parent . $key,
-                           $parent,
-                           $val['name'],
-                           $indent + 1,
-                           false,
-                           array('icon' => 'gollem.png',
-                                 'icondir' => $icondir,
-                                 'url' => Util::addParameter($login_url, array('backend_key' => $key, 'change_backend' => 1))));
+            if (Gollem::checkPermissions('backend', PERMS_SHOW, $key)) {
+                $tree->addNode($parent . $key,
+                               $parent,
+                               $val['name'],
+                               $indent + 1,
+                               false,
+                               array('icon' => 'gollem.png',
+                                     'icondir' => $icondir,
+                                     'url' => Util::addParameter($login_url, array('backend_key' => $key, 'change_backend' => 1))));
+            }
         }
     }
 
diff --git a/lib/Gollem.php b/lib/Gollem.php
index f95af39..f16737e 100644
--- a/lib/Gollem.php
+++ b/lib/Gollem.php
@@ -1,43 +1,36 @@
 <?php
-
-// Sort types
-
 /**
- * Sort by file type.
+ * $Horde: gollem/lib/Gollem.php,v 1.172.2.28 2009/03/18 22:18:22 jan Exp $
+ *
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @package Gollem
  */
+
+/** Sort by file type. */
 define('GOLLEM_SORT_TYPE', 0);
-/**
- * Sort by file name.
- */
+
+/** Sort by file name. */
 define('GOLLEM_SORT_NAME', 1);
-/**
- * Sort by file date.
- */
+
+/** Sort by file date. */
 define('GOLLEM_SORT_DATE', 2);
-/**
- * Sort by file size.
- */
-define('GOLLEM_SORT_SIZE', 3);
 
-// Sort direction
+/** Sort by file size. */
+define('GOLLEM_SORT_SIZE', 3);
 
-/**
- * Sort ascending.
- */
+/** Sort ascending. */
 define('GOLLEM_SORT_ASCEND', 0);
-/**
- * Sort descending.
- */
+
+/** Sort descending. */
 define('GOLLEM_SORT_DESCEND', 1);
 
 /**
  * Gollem Base Class.
  *
- * $Horde: gollem/lib/Gollem.php,v 1.172.2.20 2006/05/19 17:14:06 slusarz Exp $
- *
- * See the enclosed file COPYING for license information (GPL).  If you
- * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
- *
  * @author  Max Kalika <max at horde.org>
  * @author  Chuck Hagenbuch <chuck at horde.org>
  * @package Gollem
@@ -90,7 +83,7 @@ class Gollem {
     function canAutoLogin($key = null, $force = false)
     {
         $auto_server = Gollem::getPreferredBackend();
-        if (is_null($key)) {
+        if ($key === null) {
             $key = $auto_server;
         }
 
@@ -131,7 +124,7 @@ class Gollem {
     function changeDir()
     {
         $dir = Util::getFormData('dir');
-        if (!is_null($dir)) {
+        if ($dir !== null) {
             if (strpos($dir, '/') !== 0) {
                 $dir = $GLOBALS['gollem_be']['dir'] . '/' . $dir;
             }
@@ -299,31 +292,79 @@ class Gollem {
      */
     function listFolder($dir)
     {
+        global $conf;
+
+        if (!empty($conf['foldercache']['use_cache']) &&
+            !empty($conf['cache']['driver']) &&
+            ($conf['cache']['driver'] != 'none')) {
+            require_once 'Horde/Cache.php';
+            require_once 'Horde/Serialize.php';
+            $key = Gollem::_getCacheID($dir);
+
+            $cache = &Horde_Cache::singleton($conf['cache']['driver'], Horde::getDriverConfig('cache', $conf['cache']['driver']));
+            $res = $cache->get($key, $conf['foldercache']['lifetime']);
+            if ($res !== false) {
+                $res = Horde_Serialize::unserialize($res, SERIALIZE_BASIC);
+                if (is_array($res)) {
+                    return $res;
+                }
+            }
+        }
+
         $files = $GLOBALS['gollem_vfs']->listFolder($dir, isset($GLOBALS['gollem_be']['filter']) ? $GLOBALS['gollem_be']['filter'] : null, $GLOBALS['prefs']->getValue('show_dotfiles'));
         if (!is_a($files, 'PEAR_Error')) {
-            switch ($GLOBALS['prefs']->getValue('sortby')) {
-            case GOLLEM_SORT_TYPE:
-                usort($files, array('Gollem', '_sortType'));
-                break;
-
-            case GOLLEM_SORT_NAME:
-                usort($files, array('Gollem', '_sortName'));
-                break;
-
-            case GOLLEM_SORT_DATE:
-                usort($files, array('Gollem', '_sortDate'));
-                break;
-
-            case GOLLEM_SORT_SIZE:
-                usort($files, array('Gollem', '_sortSize'));
-                break;
-            }
+            $sortcols = array(
+                GOLLEM_SORT_TYPE => '_sortType',
+                GOLLEM_SORT_NAME => '_sortName',
+                GOLLEM_SORT_DATE => '_sortDate',
+                GOLLEM_SORT_SIZE => '_sortSize',
+            );
+            usort($files, array('Gollem', $sortcols[$GLOBALS['prefs']->getValue('sortby')]));
+        }
+
+        if (isset($cache)) {
+            require_once 'Horde/Serialize.php';
+            $cache->set($key, Horde_Serialize::serialize($files, SERIALIZE_BASIC), $conf['foldercache']['lifetime']);
         }
 
         return $files;
     }
 
     /**
+     * Generate the Cache ID for a directory.
+     *
+     * @access private
+     * @since Gollem 1.1
+     *
+     * @param string $dir  The directory name.
+     */
+    function _getCacheID($dir)
+    {
+        global $prefs;
+        return implode('|', array(Auth::getAuth(), $_SESSION['gollem']['backend_key'], $prefs->getValue('show_dotfiles'), $prefs->getValue('sortdirsfirst'), $prefs->getValue('sortby'), $prefs->getValue('sortdir'), $dir));
+    }
+
+    /**
+     * Expire a folder cache entry.
+     *
+     * @since Gollem 1.1
+     *
+     * @param string $dir  The directory name.
+     */
+    function expireCache($dir)
+    {
+        global $conf;
+
+        if (!empty($conf['foldercache']['use_cache']) &&
+            !empty($conf['cache']['driver']) &&
+            ($conf['cache']['driver'] != 'none')) {
+            require_once 'Horde/Cache.php';
+            $cache = &Horde_Cache::singleton($conf['cache']['driver'], Horde::getDriverConfig('cache', $conf['cache']['driver']));
+            $cache->expire(Gollem::_getCacheID($dir));
+        }
+    }
+
+    /**
      * Generate correct subdirectory links.
      *
      * @param string $base  The base directory.
@@ -592,6 +633,9 @@ class Gollem {
 
         /* Read the source data. */
         $data = $from_be->read($dir, $name);
+        if (is_a($data, 'PEAR_Error')) {
+            return $data;
+        }
 
         /* Write the target data. */
         $res = $to_be->writeData($newdir, $name, $data);
@@ -700,18 +744,15 @@ class Gollem {
                               $backend = null)
     {
         $userID = Auth::getAuth();
-        if (is_null($backend)) {
+        if ($backend === null) {
             $backend = $_SESSION['gollem']['backend_key'];
         }
 
         switch ($filter) {
         case 'backend':
             $backendTag = 'gollem:backends:' . $backend;
-            if (!$GLOBALS['perms']->exists($backendTag) ||
-                $GLOBALS['perms']->hasPermission($backendTag, $userID, $permission)) {
-                return true;
-            }
-            break;
+            return (!$GLOBALS['perms']->exists($backendTag) ||
+                    $GLOBALS['perms']->hasPermission($backendTag, $userID, $permission));
         }
 
         return false;
@@ -729,14 +770,15 @@ class Gollem {
     {
         $label = array();
         $root_dir = Gollem::getRoot();
+        $root_dir_name = $_SESSION['gollem']['backends'][$_SESSION['gollem']['backend_key']]['name'];
 
         if ($currdir == $root_dir) {
-            $label[] = '[' . _("Root") . ']';
+            $label[] = '[' . $root_dir_name . ']';
         } else {
             $parts = explode('/', $currdir);
             $parts_count = count($parts);
 
-            $label[] = Horde::link(Util::addParameter($url, 'dir', $root_dir), sprintf(_("Up to %s"), _("Root"))) . '[' . _("Root") . ']</a>';
+            $label[] = Horde::link(Util::addParameter($url, 'dir', $root_dir), sprintf(_("Up to %s"), $root_dir_name)) . '[' . $root_dir_name . ']</a>';
 
             for ($i = 1; $i <= $parts_count; $i++) {
                 $part = array_slice($parts, 0, $i);
@@ -766,29 +808,20 @@ class Gollem {
     {
         require_once 'Horde/Menu.php';
 
-        $menu = &new Menu();
-        $menu->add(Util::addParameter(Horde::applicationUrl('manager.php'), 'dir', Gollem::getHome()), _("Home"), 'home.png');
-
-        if (strpos($_SERVER['PHP_SELF'], 'manager.php') !== false) {
-            if (Gollem::checkPermissions('backend', PERMS_EDIT)) {
-                $menu->add('#', _("Create Folder"), 'mkdir.png', null, '', 'createFolder(); return false;');
-            }
-            if (Gollem::checkPermissions('backend', PERMS_READ)) {
-                $menu->add('#', _("Change Folder"), 'cd.png', null, '', 'changeDirectory(); return false;');
-            }
-        }
+        $menu = new Menu();
+        $menu->add(Util::addParameter(Horde::applicationUrl('manager.php'), 'dir', Gollem::getHome()), _("_My Home"), 'folder_home.png');
 
         if (!empty($_SESSION['gollem'])) {
             $backend_key = $_SESSION['gollem']['backend_key'];
             if (Auth::isAdmin()) {
-                $menu->add(Util::addParameter(Horde::applicationUrl('permissions.php'), 'backend', $backend_key), _("Permissions"), 'administration.png', $GLOBALS['registry']->getImageDir('horde'));
+                $menu->add(Util::addParameter(Horde::applicationUrl('permissions.php'), 'backend', $backend_key), _("_Permissions"), 'perms.png', $GLOBALS['registry']->getImageDir('horde'));
             }
 
             if ($_SESSION['gollem']['hasquota'] &&
                 ($_SESSION['gollem']['backends'][$backend_key]['quota_val'] != -1)) {
                 if ($GLOBALS['browser']->hasFeature('javascript')) {
-                    Horde::addScriptFile('open_quota_win.js', 'gollem');
-                    $quota_url = 'javascript:open_quota_win(\'' . addslashes('backend=' . $backend_key) . '\');';
+                    Horde::addScriptFile('popup.js');
+                    $quota_url = "javascript:popup_gollem('" . Horde::applicationUrl('quota.php') . "',300,300,'" . addslashes('backend=' . $backend_key) . "');";
                 } else {
                     $quota_url = Util::addParameter(Horde::applicationUrl('quota.php'), 'backend', $backend_key);
                 }
@@ -810,8 +843,7 @@ class Gollem {
      */
     function menu()
     {
-        require_once 'Horde/Template.php';
-        $t = &new Horde_Template();
+        $t = new Gollem_Template();
 
         $t->set('forminput', Util::formInput());
         $t->set('be_select', Gollem::backendSelect(), true);
@@ -907,7 +939,7 @@ class Gollem {
     function realPath($path)
     {
         /* Standardize on UNIX directory separators. */
-        if (substr(PHP_OS, 0, 3) == 'WIN') {
+        if (!strncasecmp(PHP_OS, 'WIN', 3)) {
             $path = str_replace('\\', '/', $path);
         }
 
@@ -943,14 +975,35 @@ class Gollem {
      *
      * @return object  The Horde_VFS object requested.
      */
-    function &getVFSOb($backend_key)
+    function &getVFSOb($backend_key, $params = array())
     {
-        $be_config = &$_SESSION['gollem']['backends'][$backend_key];
-        $params = $be_config['params'];
-        if (!empty($params['password'])) {
-            $params['password'] = Secret::read(Secret::getKey('gollem'), $params['password']);
+        if (isset($_SESSION['gollem']['backends'][$backend_key])) {
+            $be_config = &$_SESSION['gollem']['backends'][$backend_key];
+        } else {
+            $be_config = $GLOBALS['gollem_backends'][$backend_key];
         }
+        if (!count($params)) {
+            $params = $be_config['params'];
+            if (!empty($params['password'])) {
+                $params['password'] = Secret::read(Secret::getKey('gollem'), $params['password']);
+            }
+        }
+
+        // Create VFS object
         $ob = &VFS::singleton($be_config['driver'], $params);
+        if (is_a($ob, 'PEAR_Error')) {
+            return $ob;
+        }
+
+        // Enable logging within VFS
+        $logger = &Horde::getLogger();
+        if ($logger !== false) {
+            // TODO: No need to do this check as of Horde 3.2
+            if (!is_a($logger, 'Log')) {
+                Horde::fatal(PEAR::raiseError('An error has occurred. Furthermore, Horde encountered an error attempting to log this error. Please check your Horde logging configuration in horde/config/conf.php.'), __FILE__, __LINE__, false);
+            }
+            $ob->setLogger($logger, $GLOBALS['conf']['log']['priority']);
+        }
 
         if (!isset($be_config['quota_val'])) {
             /* Only set quota information when we are finished with session
@@ -985,7 +1038,7 @@ class Gollem {
             }
         } elseif ($be_config['quota_val'] > -1) {
             $ob->setQuota($be_config['quota_val'], $be_config['quota_metric']);
-            $ob->setQuotaRoot(Gollem::getRoot());
+            $ob->setQuotaRoot($be_config['root']);
         }
 
         return $ob;
@@ -1041,4 +1094,126 @@ class Gollem {
         return $backends;
     }
 
+    /**
+     * Add inline javascript to the output buffer.
+     *
+     * @since Gollem 1.1
+     *
+     * @param string $script  The script text to add.
+     *
+     * @return string  The javascript text to output, or empty if the page
+     *                 headers have not yet been sent.
+     */
+    function addInlineScript($script)
+    {
+        $script = trim($script);
+        if (empty($script)) {
+            return;
+        }
+
+        if (!isset($GLOBALS['__gollem_inline_script'])) {
+            $GLOBALS['__gollem_inline_script'] = array();
+        }
+        $GLOBALS['__gollem_inline_script'][] = $script;
+
+        // If headers have already been sent, we need to output a
+        // <script> tag directly.
+        if (ob_get_length() || headers_sent()) {
+            Gollem::outputInlineScript();
+        }
+    }
+
+    /**
+     * Print inline javascript to the output buffer.
+     *
+     * @since Gollem 1.1
+     *
+     * @return string  The javascript text to output.
+     */
+    function outputInlineScript()
+    {
+        if (!empty($GLOBALS['__gollem_inline_script'])) {
+            echo '<script type="text/javascript">//<![CDATA[' . "\n";
+            foreach ($GLOBALS['__gollem_inline_script'] as $val) {
+                echo $val . "\n";
+            }
+            echo "//]]></script>\n";
+        }
+
+        $GLOBALS['__gollem_inline_script'] = array();
+    }
+
+    /**
+     * Cleans a path presented to Gollem's browse API call.
+     *
+     * This will remove:
+     * - leading '/'
+     * - leading 'gollem'
+     * - trailing '/'
+     * The desired end result is the path including VFS backend.
+     *
+     * @param string $path  Path as presented to Gollem API.
+     *
+     * @return string  Cleaned path as described above.
+     */
+    function stripAPIPath($path)
+    {
+        // Strip leading '/'
+        if (substr($path, 0, 1) == '/') {
+            $path = substr($path, 1);
+        }
+        // Remove 'gollem' from path
+        if (substr($path, 0, 6) == 'gollem') {
+            $path = substr($path, 6);
+        }
+        // Remove leading '/'
+        if (substr($path, 0, 1) == '/') {
+            $path = substr($path, 1);
+        }
+        // Remove trailing '/'
+        if (substr($path, -1) == '/') {
+            $path = substr($path, 0, -1);
+        }
+        return $path;
+    }
+
+    /**
+     * Convert a Gollem path into a URL encoded string, but keep '/'.
+     * This allows for proper PATH_INFO path parsing.
+     * Special care is taken to handle "+" and " ".
+     *
+     * @since Gollem 1.1
+     *
+     * @param string $path  Path to be urlencode()d.
+     *
+     * @return string  URL-encoded string with '/' preserved.
+     */
+    function pathEncode($path)
+    {
+         // TODO: Must use str_replace here instead of str_ireplace which is
+         // PHP5-only.
+         return str_replace(array('%2F', '%2f'), '/', rawurlencode($path));
+     }
+
+     /**
+      * Take a fully qualified and break off the file or directory name.
+      * This pair is used for the input to many VFS library functions.
+      *
+      * @param string $fullpath   Path to be split.
+      *
+      * @return array  Array of ($path, $name)
+      */
+     function getVFSPath($fullpath)
+     {
+        // Convert the path into VFS's ($path, $name) convention
+        $i = strrpos($fullpath, '/');
+        if ($i !== false) {
+            $path = substr($fullpath, 0, $i);
+            $name = substr($fullpath, $i + 1);
+        } else {
+            $name = $fullpath;
+            $path = '';
+        }
+        return array($name, $path);
+     }
 }
diff --git a/lib/JSON.php b/lib/JSON.php
new file mode 100644
index 0000000..36c8e8d
--- /dev/null
+++ b/lib/JSON.php
@@ -0,0 +1,481 @@
+<?php
+/**
+ * Converts to and from JSON format.
+ *
+ * JSON (JavaScript Object Notation) is a lightweight data-interchange
+ * format. It is easy for humans to read and write. It is easy for
+ * machines to parse and generate. It is based on a subset of the
+ * JavaScript Programming Language, Standard ECMA-262 3rd Edition -
+ * December 1999.  This feature can also be found in Python. JSON is a
+ * text format that is completely language independent but uses
+ * conventions that are familiar to programmers of the C-family of
+ * languages. These properties make JSON an ideal data-interchange
+ * language.
+ *
+ * This package provides a simple encoder and decoder for JSON notation. It
+ * is intended for use with client-side Javascript applications that make
+ * use of HTTPRequest to perform server communication functions - data can
+ * be encoded into JSON notation for use in a client-side javascript, or
+ * decoded from incoming Javascript requests. JSON format is native to
+ * Javascript, and can be directly eval()'ed with no further parsing
+ * overhead
+ *
+ * All strings should be in ASCII or UTF-8 format.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met: Redistributions of source code must retain the
+ * above copyright notice, this list of conditions and the following
+ * disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * For information the UTF-8 encoding operations please see
+ * http://www.cl.cam.ac.uk/~mgk25/unicode.html
+ *
+ * @package Horde_Serialize
+ * @author Michal Migurski <mike-json at teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright 2005 Michal Migurski
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @todo Remove for Horde 4.0
+ */
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state.
+ */
+define('GOLLEM_SERIALIZE_JSON_SLICE', 1);
+define('GOLLEM_SERIALIZE_JSON_IN_STR', 2);
+define('GOLLEM_SERIALIZE_JSON_IN_ARR', 4);
+define('GOLLEM_SERIALIZE_JSON_IN_OBJ', 8);
+define('GOLLEM_SERIALIZE_JSON_IN_CMT', 16);
+
+/**
+ * Converts to and from JSON format.
+ *
+ * @package Horde_Serialize
+ * @author Michal Migurski <mike-json at teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright 2005 Michal Migurski
+ */
+class Gollem_Serialize_JSON {
+
+    /**
+     * Added to Gollem's json.php to use json_encode() if available.
+     */
+    function encode($var)
+    {
+        if (Util::extensionExists('json')) {
+            return json_encode($var);
+        } else {
+            require_once 'Horde/String.php';
+            return Gollem_Serialize_JSON::_encode($var);
+        }
+    }
+
+    /**
+     * Encodes an arbitrary variable into JSON format.
+     *
+     * @param mixed $var  Any number, boolean, string, array, or object to be
+     *                    encoded.
+     *
+     * @return string  JSON string representation of input var.
+     */
+    function _encode($var)
+    {
+        switch (gettype($var)) {
+        case 'boolean':
+            return $var ? 'true' : 'false';
+
+        case 'NULL':
+        case 'null':
+            return 'null';
+
+        case 'integer':
+            return (int) $var;
+
+        case 'double':
+        case 'float':
+            return (float) $var;
+
+        case 'string':
+            // Expected to be in ASCII or UTF-8.
+            $strlen = String::length($var, 'utf-8');
+            $needles = array('\\', "\x08", "\t", "\n", "\x0c", "\r", '"', '/');
+            $replacements = array('\\\\', '\b', '\t', '\n', '\f', '\r', '\"', '\/');
+
+            // Short circuit for ASCII strings.
+            if ($strlen == strlen($var)) {
+                $var = str_replace($needles, $replacements, $var);
+                return '"' . $var . '"';
+            }
+
+            // Iterate over every character in the string, escaping with a
+            // slash or encoding to UTF-8 code points where necessary.
+            $ascii = '';
+            preg_match_all("/(.{1})/su", $var, $m);
+            foreach ($m[1] as $char) {
+                if (strlen($char) == 1) {
+                    $ascii .= str_replace($needles, $replacements, $char);
+                    continue;
+                }
+                $ascii .= '\u' . bin2hex(String::convertCharset($char, 'utf-8', 'utf-16be'));
+            }
+
+            return '"' . $ascii . '"';
+
+        case 'array':
+            /* As per JSON spec if any array key is not an integer we
+             * must treat the the whole array as an object. We also
+             * try to catch a sparsely populated associative array
+             * with numeric keys here because some JS engines will
+             * create an array with empty indexes up to max_index
+             * which can cause memory issues and because the keys,
+             * which may be relevant, will be remapped otherwise.
+             *
+             * As per the ECMA and JSON specification an object may
+             * have any string as a property. Unfortunately due to a
+             * hole in the ECMA specification if the key is a ECMA
+             * reserved word or starts with a digit the parameter is
+             * only accessible using ECMAScript's bracket notation. */
+
+            // Treat as a JSON object.
+            if (is_array($var) &&
+                count($var) &&
+                (array_keys($var) !== range(0, sizeof($var) - 1))) {
+                return '{' .
+                    implode(',', array_map(array('Gollem_Serialize_JSON', '_nameValue'),
+                                           array_keys($var),
+                                           array_values($var))) . '}';
+            }
+
+            // Treat it like a regular array.
+            return '[' . implode(',', array_map(array('Gollem_Serialize_JSON', '_encode'), $var)) . ']';
+
+        case 'object':
+            $vars = get_object_vars($var);
+            return '{' .
+                implode(',', array_map(array('gollem_Serialize_JSON', '_nameValue'),
+                                       array_keys($vars),
+                                       array_values($vars))) . '}';
+
+        default:
+            return '';
+        }
+    }
+
+    /**
+     * Added to Gollem's json.php to use json_decode() if available.
+     */
+    function decode($var)
+    {
+        if (Util::extensionExists('json')) {
+            return json_decode($var);
+        } else {
+            require_once 'Horde/String.php';
+            return Gollem_Serialize_JSON::_decode($var);
+        }
+    }
+
+    /**
+     * Decodes a JSON string into appropriate variable.
+     *
+     * @param string $str  JSON-formatted string.
+     *
+     * @return mixed  Number, boolean, string, array, or object corresponding
+     *                to given JSON input string. Note that decode() always
+     *                returns strings in ASCII or UTF-8 format.
+     */
+    function _decode($str)
+    {
+        $str = Gollem_Serialize_JSON::_reduce($str);
+
+        switch (strtolower($str)) {
+        case 'true':
+            return true;
+
+        case 'false':
+            return false;
+
+        case 'null':
+            return null;
+
+        default:
+            if (is_numeric($str)) {
+                // Return float or int, as appropriate.
+                return ((float)$str == (integer)$str)
+                    ? (integer)$str
+                    : (float)$str;
+
+            } elseif (preg_match('/^("|\').+(\1)$/s', $str, $m) && $m[1] == $m[2]) {
+                // Strings are returned in UTF-8.
+                $delim = substr($str, 0, 1);
+                $chrs = substr($str, 1, -1);
+                $utf8 = '';
+                $strlen_chrs = strlen($chrs);
+
+                for ($c = 0; $c < $strlen_chrs; ++$c) {
+                    $substr_chrs_c_2 = substr($chrs, $c, 2);
+                    $ord_chrs_c = ord($chrs{$c});
+
+                    switch (true) {
+                    case $substr_chrs_c_2 == '\b':
+                        $utf8 .= chr(0x08);
+                        ++$c;
+                        break;
+
+                    case $substr_chrs_c_2 == '\t':
+                        $utf8 .= chr(0x09);
+                        ++$c;
+                        break;
+
+                    case $substr_chrs_c_2 == '\n':
+                        $utf8 .= chr(0x0A);
+                        ++$c;
+                        break;
+
+                    case $substr_chrs_c_2 == '\f':
+                        $utf8 .= chr(0x0C);
+                        ++$c;
+                        break;
+
+                    case $substr_chrs_c_2 == '\r':
+                        $utf8 .= chr(0x0D);
+                        ++$c;
+                        break;
+
+                    case $substr_chrs_c_2 == '\\"':
+                    case $substr_chrs_c_2 == '\\\'':
+                    case $substr_chrs_c_2 == '\\\\':
+                    case $substr_chrs_c_2 == '\\/':
+                        if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
+                            ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
+                            $utf8 .= $chrs{++$c};
+                        }
+                        break;
+
+                    case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
+                        // Single, escaped unicode character.
+                        $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) . chr(hexdec(substr($chrs, ($c + 4), 2)));
+                        $utf8 .= String::convertCharset($utf16, 'utf-16', 'utf-8');
+                        $c += 5;
+                        break;
+
+                    case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
+                        $utf8 .= $chrs{$c};
+                        break;
+
+                    case ($ord_chrs_c & 0xE0) == 0xC0:
+                        // Characters U-00000080 - U-000007FF, mask 110XXXXX
+                        $utf8 .= substr($chrs, $c, 2);
+                        ++$c;
+                        break;
+
+                    case ($ord_chrs_c & 0xF0) == 0xE0:
+                        // Characters U-00000800 - U-0000FFFF, mask 1110XXXX
+                        $utf8 .= substr($chrs, $c, 3);
+                        $c += 2;
+                        break;
+
+                    case ($ord_chrs_c & 0xF8) == 0xF0:
+                        // Characters U-00010000 - U-001FFFFF, mask 11110XXX
+                        $utf8 .= substr($chrs, $c, 4);
+                        $c += 3;
+                        break;
+
+                    case ($ord_chrs_c & 0xFC) == 0xF8:
+                        // Characters U-00200000 - U-03FFFFFF, mask 111110XX
+                        $utf8 .= substr($chrs, $c, 5);
+                        $c += 4;
+                        break;
+
+                    case ($ord_chrs_c & 0xFE) == 0xFC:
+                        // Characters U-04000000 - U-7FFFFFFF, mask 1111110X
+                        $utf8 .= substr($chrs, $c, 6);
+                        $c += 5;
+                        break;
+                    }
+                }
+
+                return $utf8;
+            } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
+                // Array or object notation.
+                if ($str[0] == '[') {
+                    $stk = array(GOLLEM_SERIALIZE_JSON_IN_ARR);
+                    $arr = array();
+                } else {
+                    $stk = array(GOLLEM_SERIALIZE_JSON_IN_OBJ);
+                    $obj = new stdClass();
+                }
+
+                array_push($stk, array('what'  => GOLLEM_SERIALIZE_JSON_SLICE,
+                                       'where' => 0,
+                                       'delim' => false));
+
+                $chrs = substr($str, 1, -1);
+                $chrs = Gollem_Serialize_JSON::_reduce($chrs);
+
+                if ($chrs == '') {
+                    if (reset($stk) == GOLLEM_SERIALIZE_JSON_IN_ARR) {
+                        return $arr;
+                    } else {
+                        return $obj;
+                    }
+                }
+
+                $strlen_chrs = strlen($chrs);
+
+                for ($c = 0; $c <= $strlen_chrs; ++$c) {
+                    $top = end($stk);
+                    $substr_chrs_c_2 = substr($chrs, $c, 2);
+
+                    if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == GOLLEM_SERIALIZE_JSON_SLICE))) {
+                        // Found a comma that is not inside a string,
+                        // array, etc., OR we've reached the end of
+                        // the character list.
+                        $slice = substr($chrs, $top['where'], ($c - $top['where']));
+                        array_push($stk, array('what' => GOLLEM_SERIALIZE_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
+
+                        if (reset($stk) == GOLLEM_SERIALIZE_JSON_IN_ARR) {
+                            // We are in an array, so just push an
+                            // element onto the stack.
+                            array_push($arr, Gollem_Serialize_JSON::_decode($slice));
+
+                        } elseif (reset($stk) == GOLLEM_SERIALIZE_JSON_IN_OBJ) {
+                            // We are in an object, so figure out the
+                            // property name and set an element in an
+                            // associative array for now.
+                            if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+                                // "name":value pair
+                                $key = Gollem_Serialize_JSON::_decode($parts[1]);
+                                $val = Gollem_Serialize_JSON::_decode($parts[2]);
+
+                                $obj->$key = $val;
+                            } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+                                // name:value pair, where name is unquoted
+                                $key = $parts[1];
+                                $obj->$key = Gollem_Serialize_JSON::_decode($parts[2]);
+                            }
+                        }
+                    } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != GOLLEM_SERIALIZE_JSON_IN_STR)) {
+                        // Found a quote, and we are not inside a string.
+                        array_push($stk, array('what' => GOLLEM_SERIALIZE_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
+
+                    } elseif (($chrs{$c} == $top['delim']) &&
+                              ($top['what'] == GOLLEM_SERIALIZE_JSON_IN_STR) &&
+                              (($chrs{$c - 1} != "\\") ||
+                               ($chrs{$c - 1} == "\\" && $chrs{$c - 2} == "\\"))) {
+                        // Found a quote, we're in a string, and it's
+                        // not escaped.
+                        array_pop($stk);
+
+                    } elseif (($chrs{$c} == '[') &&
+                              in_array($top['what'], array(GOLLEM_SERIALIZE_JSON_SLICE, GOLLEM_SERIALIZE_JSON_IN_ARR, GOLLEM_SERIALIZE_JSON_IN_OBJ))) {
+                        // Found a left-bracket, and we are in an
+                        // array, object, or slice.
+                        array_push($stk, array('what' => GOLLEM_SERIALIZE_JSON_IN_ARR, 'where' => $c, 'delim' => false));
+
+                    } elseif (($chrs{$c} == ']') && ($top['what'] == GOLLEM_SERIALIZE_JSON_IN_ARR)) {
+                        // found a right-bracket, and we're in an array
+                        array_pop($stk);
+
+                    } elseif (($chrs{$c} == '{') &&
+                              in_array($top['what'], array(GOLLEM_SERIALIZE_JSON_SLICE, GOLLEM_SERIALIZE_JSON_IN_ARR, GOLLEM_SERIALIZE_JSON_IN_OBJ))) {
+                        // Found a left-brace, and we are in an array,
+                        // object, or slice.
+                        array_push($stk, array('what' => GOLLEM_SERIALIZE_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
+
+                    } elseif (($chrs{$c} == '}') && ($top['what'] == GOLLEM_SERIALIZE_JSON_IN_OBJ)) {
+                        // Found a right-brace, and we're in an object.
+                        array_pop($stk);
+
+                    } elseif (($substr_chrs_c_2 == '/*') &&
+                              in_array($top['what'], array(GOLLEM_SERIALIZE_JSON_SLICE, GOLLEM_SERIALIZE_JSON_IN_ARR, GOLLEM_SERIALIZE_JSON_IN_OBJ))) {
+                        // Found a comment start, and we are in an
+                        // array, object, or slice.
+                        array_push($stk, array('what' => GOLLEM_SERIALIZE_JSON_IN_CMT, 'where' => $c, 'delim' => false));
+                        $c++;
+
+                    } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == GOLLEM_SERIALIZE_JSON_IN_CMT)) {
+                        // Found a comment end, and we're in one now.
+                        array_pop($stk);
+                        $c++;
+
+                        for ($i = $top['where']; $i <= $c; ++$i) {
+                            $chrs = substr_replace($chrs, ' ', $i, 1);
+                        }
+                    }
+                }
+
+                if (reset($stk) == GOLLEM_SERIALIZE_JSON_IN_ARR) {
+                    return $arr;
+                } elseif (reset($stk) == GOLLEM_SERIALIZE_JSON_IN_OBJ) {
+                    return $obj;
+                }
+            }
+        }
+    }
+
+    /**
+     * Array-walking function for use in generating JSON-formatted
+     * name-value pairs.
+     *
+     * @access private
+     *
+     * @param string $name  Name of key to use.
+     * @param mixed $value  Reference to an array element to be encoded.
+     *
+     * @return string  JSON-formatted name-value pair, like '"name":value'.
+     */
+    function _nameValue($name, $value)
+    {
+        return Gollem_Serialize_JSON::_encode(strval($name)) . ':' . Gollem_Serialize_JSON::_encode($value);
+    }
+
+    /**
+     * Reduce a string by removing leading and trailing comments and
+     * whitespace.
+     *
+     * @access private
+     *
+     * @param $str string  String value to strip of comments and whitespace.
+     *
+     * @return string  String value stripped of comments and whitespace.
+     */
+    function _reduce($str)
+    {
+        $str = preg_replace(array(
+            // Eliminate single line comments in '// ...' form.
+            '#^\s*//(.+)$#m',
+
+            // Eliminate multi-line comments in '/* ... */' form, at
+            // start of string.
+            '#^\s*/\*(.+)\*/#Us',
+
+            // Eliminate multi-line comments in '/* ... */' form, at
+            // end of string.
+            '#/\*(.+)\*/\s*$#Us'
+            ), '', $str);
+
+        // Eliminate extraneous space.
+        return trim($str);
+    }
+
+}
diff --git a/lib/MIME/Viewer/images.php b/lib/MIME/Viewer/images.php
index e400fbf..7546c65 100644
--- a/lib/MIME/Viewer/images.php
+++ b/lib/MIME/Viewer/images.php
@@ -6,9 +6,9 @@ require_once 'Horde/MIME/Viewer/images.php';
  * The Gollem_MIME_Viewer_images class allows images to be displayed
  * inline in a message.
  *
- * $Horde: gollem/lib/MIME/Viewer/images.php,v 1.22.2.2 2007/01/02 13:54:53 jan Exp $
+ * $Horde: gollem/lib/MIME/Viewer/images.php,v 1.22.2.4 2009/01/06 15:23:55 jan Exp $
  *
- * Copyright 2002-2007 Mike Cochrane <mike at graftonhall.co.nz>
+ * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
  *
  * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
diff --git a/lib/Session.php b/lib/Session.php
index e31ac4f..1e04248 100644
--- a/lib/Session.php
+++ b/lib/Session.php
@@ -2,11 +2,9 @@
 /**
  * Functions required to start a Gollem session.
  *
- * $Horde: gollem/lib/Session.php,v 1.34.2.5 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/lib/Session.php,v 1.34.2.8 2009/01/06 15:23:54 jan Exp $
  *
- * Copyright 1999-2007 Chuck Hagenbuch <chuck at horde.org>
- * Copyright 2000-2007 Max Kalika <max at horde.org>
- * Copyright 2004-2007 Michael Slusarz <slusarz at horde.org>
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
  *
  * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
@@ -92,7 +90,7 @@ class Gollem_Session {
         /* Set username now. Don't set the current username if the backend
          * already has a username defined. */
         if (empty($ptr['params']['username'])) {
-            $ptr['params']['username'] = (is_null($user)) ? Auth::getBareAuth() : $user;
+            $ptr['params']['username'] = ($user === null) ? Auth::getBareAuth() : $user;
         }
 
         /* Set password now. The password should always be encrypted within
@@ -100,7 +98,9 @@ class Gollem_Session {
         if (!empty($ptr['params']['password'])) {
             $pass = $ptr['params']['password'];
         }
-        if (!is_null($pass)) {
+        if ($pass === null) {
+            $ptr['params']['password'] = null;
+        } else {
             $ptr['params']['password'] = Secret::write(Secret::getKey('gollem'), $pass);
         }
 
diff --git a/lib/Template.php b/lib/Template.php
new file mode 100644
index 0000000..a652760
--- /dev/null
+++ b/lib/Template.php
@@ -0,0 +1,513 @@
+<?php
+/**
+ * Horde Template system. Adapted from bTemplate by Brian Lozier
+ * <brian at massassi.net>.
+ *
+ * Horde_Template provides a basic template engine with tags, loops,
+ * and if conditions. However, it is also a simple interface with
+ * several essential functions: set(), fetch(), and
+ * parse(). Subclasses or decorators can implement (or delegate) these
+ * three methods, plus the options api, and easily implement other
+ * template engines (PHP code, XSLT, etc.) without requiring usage
+ * changes.
+ *
+ * Compilation code adapted from code written by Bruno Pedro <bpedro at ptm.pt>.
+ *
+ * $Horde: gollem/lib/Template.php,v 1.8.2.2 2009/01/06 15:23:54 jan Exp $
+ *
+ * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @author  Chuck Hagenbuch <chuck at horde.org>
+ * @author  Michael Slusarz <slusarz at horde.org>
+ * @package Horde_Template
+ */
+
+/** The identifier to use for memory-only templates. */
+define('GOLLEM_TEMPLATE_STRING', '**string');
+
+class Gollem_Template {
+
+    /**
+     * The Horde_Cache object to use.
+     *
+     * @var Horde_Cache
+     */
+    var $_cache;
+
+    /**
+     * Option values.
+     *
+     * @var array
+     */
+    var $_options = array();
+
+    /**
+     * Directory that templates should be read from.
+     *
+     * @var string
+     */
+    var $_basepath = '';
+
+    /**
+     * Tag (scalar) values.
+     *
+     * @var array
+     */
+    var $_scalars = array();
+
+    /**
+     * Loop tag values.
+     *
+     * @var array
+     */
+    var $_arrays = array();
+
+    /**
+     * Path to template source.
+     *
+     * @var string
+     */
+    var $_templateFile = null;
+
+    /**
+     * Template source.
+     *
+     * @var string
+     */
+    var $_template = null;
+
+    /**
+     * Foreach variable mappings.
+     *
+     * @var array
+     */
+    var $_foreachMap = array();
+
+    /**
+     * Foreach variable incrementor.
+     *
+     * @var integer
+     */
+    var $_foreachVar = 0;
+
+    /**
+     * preg_match() cache.
+     *
+     * @var array
+     */
+    var $_pregcache = array();
+
+    /**
+     * Constructor.
+     *
+     * @param string $basepath  The directory where templates are read from.
+     */
+    function Gollem_Template($basepath = null)
+    {
+        if (!is_null($basepath)) {
+            $this->_basepath = $basepath;
+        }
+
+        if (!empty($GLOBALS['conf']['cache']['driver'])) {
+            require_once 'Horde/Cache.php';
+            $this->_cache = &Horde_Cache::singleton($GLOBALS['conf']['cache']['driver'], Horde::getDriverConfig('cache', $GLOBALS['conf']['cache']['driver']));
+        }
+
+        // DEBUGGING
+        $this->setOption('forcecompile', true);
+    }
+
+    /**
+     * Sets an option.
+     * Currently available options are:
+     * <pre>
+     * 'debug' - Output debugging information to screen
+     * 'forcecompile' - Force a compilation on every page load
+     * 'gettext' - Activate gettext detection
+     * <pre>
+     *
+     * @param string $option  The option name.
+     * @param mixed $val      The option's value.
+     */
+    function setOption($option, $val)
+    {
+        $this->_options[$option] = $val;
+    }
+
+    /**
+     * Set the template contents to a string.
+     *
+     * @param string $template  The template text.
+     */
+    function setTemplate($template)
+    {
+        $this->_template = $template;
+        $this->_parse();
+        $this->_templateFile = GOLLEM_TEMPLATE_STRING;
+    }
+
+    /**
+     * Returns an option's value.
+     *
+     * @param string $option  The option name.
+     *
+     * @return mixed  The option's value.
+     */
+    function getOption($option)
+    {
+        return isset($this->_options[$option]) ? $this->_options[$option] : null;
+    }
+
+    /**
+     * Sets a tag, loop, or if variable.
+     *
+     * @param string|array $tag   Either the tag name or a hash with tag names
+     *                            as keys and tag values as values.
+     * @param mixed        $var   The value to replace the tag with.
+     */
+    function set($tag, $var)
+    {
+        if (is_array($tag)) {
+            foreach ($tag as $tTag => $tVar) {
+                $this->set($tTag, $tVar);
+            }
+        } elseif (is_array($var) || is_object($var)) {
+            $this->_arrays[$tag] = $var;
+        } else {
+            $this->_scalars[$tag] = $var;
+        }
+    }
+
+    /**
+     * Returns the value of a tag or loop.
+     *
+     * @param string $tag  The tag name.
+     *
+     * @return mixed  The tag value or null if the tag hasn't been set yet.
+     */
+    function get($tag)
+    {
+        if (isset($this->_arrays[$tag])) {
+            return $this->_arrays[$tag];
+        }
+        if (isset($this->_scalars[$tag])) {
+            return $this->_scalars[$tag];
+        }
+        return null;
+    }
+
+    /**
+     * Fetches a template from the specified file and return the parsed
+     * contents.
+     *
+     * @param string $filename  The file to fetch the template from.
+     *
+     * @return string  The parsed template.
+     */
+    function fetch($filename = null)
+    {
+        $file = $this->_basepath . $filename;
+        $force = $this->getOption('forcecompile');
+
+        if (!is_null($filename) && ($file != $this->_templateFile)) {
+            $this->_template = $this->_templateFile = null;
+        }
+
+        /* First, check for a cached compiled version. */
+        if (!$force && is_null($this->_template) && isset($this->_cache)) {
+            $cacheid = 'horde_template|' . filemtime($file) . '|' . $file;
+            $this->_template = $this->_cache->get($cacheid, 0);
+            if ($this->_template === false) {
+                $this->_template = null;
+            }
+        }
+
+        /* Parse and compile the template. */
+        if ($force || is_null($this->_template)) {
+            $this->_template = str_replace("\n", " \n", file_get_contents($file));
+            $this->_parse();
+            if (isset($cacheid) &&
+                !$this->_cache->set($cacheid, $this->_template)) {
+                Horde::logMessage(sprintf(_("Could not save the compiled template file '%s'."), $file), __FILE__, __LINE__, PEAR_LOG_ERR);
+            }
+        }
+
+        $this->_templateFile = $file;
+
+        /* Template debugging. */
+        if ($this->getOption('debug')) {
+            echo '<pre>' . htmlspecialchars($this->_template) . '</pre>';
+        }
+
+        return $this->parse();
+    }
+
+    /**
+     * Parses all variables/tags in the template.
+     *
+     * @param string $contents  The unparsed template.
+     *
+     * @return string  The parsed template.
+     */
+    function parse($contents = null)
+    {
+        if (!is_null($contents)) {
+            $this->setTemplate(str_replace("\n", " \n", $contents));
+        }
+
+        /* Evaluate the compiled template and return the output. */
+        ob_start();
+        eval('?>' . $this->_template);
+        return str_replace(" \n", "\n", ob_get_clean());
+    }
+
+    /**
+     * Parses all variables/tags in the template.
+     */
+    function _parse()
+    {
+        // Escape XML instructions.
+        $this->_template = preg_replace('/\?>|<\?/',
+                                        '<?php echo \'$0\' ?>',
+                                        $this->_template);
+
+        // Parse gettext tags, if the option is enabled.
+        if ($this->getOption('gettext')) {
+            $this->_parseGettext();
+        }
+
+        // Process ifs.
+        $this->_parseIf();
+
+        // Process loops and arrays.
+        $this->_parseLoop();
+
+        // Process base scalar tags.  Needs to be after _parseLoop() as we
+        // rely on _foreachMap().
+        $this->_parseTags();
+
+        // Finally, process any associative array scalar tags.
+        $this->_parseAssociativeTags();
+    }
+
+    /**
+     * Parses gettext tags.
+     *
+     * @access private
+     */
+    function _parseGettext()
+    {
+        if (preg_match_all("/<gettext>(.+?)<\/gettext>/s", $this->_template, $matches, PREG_SET_ORDER)) {
+            $replace = array();
+            foreach ($matches as $val) {
+                $replace[$val[0]] = '<?php echo _(\'' . str_replace("'", "\\'", $val[1]) . '\'); ?>';
+            }
+            $this->_doReplace($replace);
+        }
+    }
+
+    /**
+     * Parses 'if' statements.
+     *
+     * @access private
+     *
+     * @param string $key  The key prefix to parse.
+     */
+    function _parseIf($key = null)
+    {
+        $replace = array();
+
+        foreach ($this->_doSearch('if', $key) as $val) {
+            $replace[$val[0]] = '<?php if (!empty(' . $this->_generatePHPVar('scalars', $val[1]) . ') || !empty(' . $this->_generatePHPVar('arrays', $val[1]) . ')): ?>';
+            $replace[$val[2]] = '<?php endif; ?>';
+
+            // Check for else statement.
+            foreach ($this->_doSearch('else', $key) as $val2) {
+                $replace[$val2[0]] = '<?php else: ?>';
+                $replace[$val2[2]] = '';
+            }
+        }
+
+        $this->_doReplace($replace);
+    }
+
+    /**
+     * Parses the given array for any loops or other uses of the array.
+     *
+     * @access private
+     *
+     * @param string $key  The key prefix to parse.
+     */
+    function _parseLoop($key = null)
+    {
+        $replace = array();
+
+        foreach ($this->_doSearch('loop', $key) as $val) {
+            $divider = null;
+
+            // See if we have a divider.
+            if (preg_match("/<divider:" . $val[1] . ">(.*)<\/divider:" . $val[1] . ">/sU", $this->_template, $m)) {
+                $divider = $m[1];
+                $replace[$m[0]] = '';
+            }
+
+            if (!isset($this->_foreachMap[$val[1]])) {
+                $this->_foreachMap[$val[1]] = ++$this->_foreachVar;
+            }
+            $varId = $this->_foreachMap[$val[1]];
+            $var = $this->_generatePHPVar('arrays', $val[1]);
+
+            $replace[$val[0]] = '<?php ' .
+                (($divider) ? '$i' . $varId . ' = count(' . $var . '); ' : '') .
+                'foreach (' . $this->_generatePHPVar('arrays', $val[1]) . ' as $k' . $varId . ' => $v' . $varId . '): ?>';
+            $replace[$val[2]] = '<?php ' .
+                (($divider) ? 'if (--$i' . $varId . ' != 0) { echo \'' . $divider . '\'; }; ' : '') .
+                'endforeach; ?>';
+
+            // Parse ifs.
+            $this->_parseIf($val[1]);
+
+            // Parse interior loops.
+            $this->_parseLoop($val[1]);
+
+            // Replace scalars.
+            $this->_parseTags($val[1]);
+        }
+
+        $this->_doReplace($replace);
+    }
+
+    /**
+     * Replaces 'tag' tags with their PHP equivalents.
+     *
+     * @access private
+     *
+     * @param string $key  The key prefix to parse.
+     */
+    function _parseTags($key = null)
+    {
+        $replace = array();
+
+        foreach ($this->_doSearch('tag', $key, true) as $val) {
+            $replace_text = '<?php ';
+            if (isset($this->_foreachMap[$val[1]])) {
+                $var = $this->_foreachMap[$val[1]];
+                $replace_text .= 'if (isset($v' . $var . ')) { echo is_array($v' . $var . ') ? $k' . $var . ' : $v' . $var . '; } else';
+            }
+            $var = $this->_generatePHPVar('scalars', $val[1]);
+            $replace[$val[0]] = $replace_text . 'if (isset(' . $var . ')) { echo ' . $var . '; } ?>';
+        }
+
+        $this->_doReplace($replace);
+    }
+
+    /**
+     * Parse associative tags (i.e. <tag:foo.bar />).
+     *
+     * @access private
+     */
+    function _parseAssociativeTags()
+    {
+        $replace = array();
+
+        foreach ($this->_pregcache['tag'] as $key => $val) {
+            $parts = explode('.', $val[1]);
+            $var = '$this->_arrays[\'' . $parts[0] . '\'][\'' . $parts[1] . '\']';
+            $replace[$val[0]] = '<?php if (isset(' . $var . ')) { echo ' . $var . '; } ?>';
+            unset($this->_pregcache['tag'][$key]);
+        }
+
+        $this->_doReplace($replace);
+    }
+
+    /**
+     * Output the correct PHP variable string for use in template space.
+     *
+     * @access private
+     */
+    function _generatePHPVar($tag, $key)
+    {
+        $out = '';
+
+        $a = explode('.', $key);
+        $a_count = count($a);
+
+        if ($a_count == 1) {
+            switch ($tag) {
+            case 'arrays':
+                $out = '$this->_arrays';
+                break;
+
+            case 'scalars':
+                $out = '$this->_scalars';
+                break;
+            }
+        } else {
+            $out = '$v' . $this->_foreachMap[implode('.', array_slice($a, 0, -1))];
+        }
+
+        return $out . '[\'' . end($a) . '\']';
+    }
+
+    /**
+     * TODO
+     *
+     * @access private
+     */
+    function _doSearch($tag, $key, $noclose = false)
+    {
+        $out = array();
+        $level = (is_null($key)) ? 0 : substr_count($key, '.') + 1;
+
+        if (!isset($this->_pregcache[$key])) {
+            $regex = ($noclose) ?
+                "/<" . $tag . ":(.+?)\s\/>/" :
+                "/<" . $tag . ":([^>]+)>/";
+            preg_match_all($regex, $this->_template, $this->_pregcache[$tag], PREG_SET_ORDER);
+        }
+
+        foreach ($this->_pregcache[$tag] as $pkey => $val) {
+            $val_level = substr_count($val[1], '.');
+            $add = false;
+            if (is_null($key)) {
+                $add = !$val_level;
+            } else {
+                $add = (($val_level == $level) &&
+                        (strpos($val[1], $key . '.') === 0));
+            }
+            if ($add) {
+                if (!$noclose) {
+                    $val[2] = '</' . $tag . ':' . $val[1] . '>';
+                }
+                $out[] = $val;
+                unset($this->_pregcache[$tag][$pkey]);
+            }
+        }
+
+        return $out;
+    }
+
+    /**
+     * TODO
+     *
+     * @access private
+     */
+    function _doReplace($replace)
+    {
+        if (empty($replace)) {
+            return;
+        }
+
+        $search = array();
+
+        foreach (array_keys($replace) as $val) {
+            $search[] = '/' . preg_quote($val, '/') . '/';
+        }
+
+        $this->_template = preg_replace($search, array_values($replace), $this->_template);
+    }
+
+}
diff --git a/lib/api.php b/lib/api.php
index d09ab5b..11bbde3 100644
--- a/lib/api.php
+++ b/lib/api.php
@@ -5,13 +5,39 @@
  * This file defines Gollem's external API interface. Other
  * applications can interact with Gollem through this API.
  *
- * $Horde: gollem/lib/api.php,v 1.14.2.2 2005/12/19 07:51:15 slusarz Exp $
+ * $Horde: gollem/lib/api.php,v 1.14.2.5 2008/10/09 20:54:42 jan Exp $
  *
  * @author  Amith Varghese (amith at xalan.com)
  * @author  Michael Slusarz (slusarz at curecanti.org)
+ * @author  Ben Klang (bklang at alkaloid.net)
  * @package Gollem
  */
 
+$_services['browse'] = array(
+    'args' => array('path' => 'string'),
+    'type' => '{urn:horde}hashHash',
+);
+
+$_services['put'] = array(
+    'args' => array('path' => 'string', 'content' => 'string', 'content_type' => 'string'),
+    'type' => 'int',
+);
+
+$_services['mkcol'] = array(
+    'args' => array('path' => 'string'),
+    'type' => 'int',
+);
+
+$_services['move'] = array(
+    'args' => array('path' => 'string', 'dest' => 'string'),
+    'type' => 'int',
+);
+
+$_services['path_delete'] = array(
+    'args' => array('path' => 'string'),
+    'type' => 'int',
+);
+
 $_services['perms'] = array(
     'args' => array(),
     'type' => '{urn:horde}stringArray');
@@ -32,6 +58,417 @@ $_services['setSelectList'] = array(
     'args' => array('selectid' => 'string', 'files' => 'array'),
     'type' => 'string');
 
+$_services['getViewLink'] = array(
+    'args' => array('dir' => 'string', 'file' => 'string', 'backend' => 'string'),
+    'type' => 'string');
+
+/**
+ * Browses through the VFS tree.
+ *
+ * Each VFS backend is listed as a directory at the top level.  No modify
+ * operations are allowed outside any VFS area.
+ *
+ * @since Gollem 1.1
+ *
+ * @param string $path       The level of the tree to browse.
+ * @param array $properties  The item properties to return. Defaults to 'name',
+ *                           'icon', and 'browseable'.
+ *
+ * @return array  The contents of $path.
+ */
+function _gollem_browse($path = '', $properties = array())
+{
+    @define('GOLLEM_BASE', dirname(__FILE__) . '/..');
+    $GLOBALS['authentication'] = 'none';
+    require_once GOLLEM_BASE . '/lib/base.php';
+    require_once GOLLEM_BASE . '/lib/Session.php';
+    require GOLLEM_BASE . '/config/backends.php';
+    require GOLLEM_BASE . '/config/credentials.php';
+
+    $path = Gollem::stripAPIPath($path);
+
+    // Default properties.
+    if (!$properties) {
+        $properties = array('name', 'icon', 'browseable');
+    }
+
+    $results = array();
+    if ($path == '') {
+        // We are at the root of gollem.  Return a set of folders, one for
+        // each backend available.
+        foreach ($backends as $backend => $curBackend) {
+            if (Gollem::checkPermissions('backend', PERMS_SHOW, $backend)) {
+                $results['gollem/' . $backend]['name'] = $curBackend['name'];
+                $results['gollem/' . $backend]['browseable'] = true;
+            }
+        }
+    } else {
+        // A file or directory has been requested.
+
+        // Locate the backend_key in the path.
+        if (strchr($path, '/')) {
+            $backend_key = substr($path, 0, strpos($path, '/'));
+        } else {
+            $backend_key = $path;
+        }
+
+        // Validate and perform permissions checks on the requested backend
+        if (!isset($backends[$backend_key])) {
+            return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
+        }
+        //if (!Gollem::canAutoLogin($backend_key)) {
+        //    // FIXME: Is it possible to request secondary authentication
+        //    // credentials here for backends that require it?
+        //    return PEAR::raiseError(_("Additional authentication required."));
+        //}
+        if (!Gollem_Session::createSession($backend_key)) {
+            return PEAR::raiseError(_("Unable to create Gollem session"));
+        }
+        if (!Gollem::checkPermissions('backend', PERMS_READ)) {
+            return PEAR::raiseError(_("Permission denied to this backend."));
+        }
+
+        // Trim off the backend_key (and '/') to get the VFS relative path
+        $fullpath = substr($path, strlen($backend_key) + 1);
+
+        // Get the VFS-standard $name,$path pair
+        list($name, $path) = Gollem::getVFSPath($fullpath);
+
+        // Check to see if the request is a file or folder
+        if ($GLOBALS['gollem_vfs']->isFolder($path, $name)) {
+            // This is a folder request.  Return a directory listing.
+            $list = Gollem::listFolder($path . '/' . $name);
+            if (is_a($list, 'PEAR_Error')) {
+                return $list;
+            }
+
+            // Iterate over the directory contents
+            if (is_array($list) && count($list)) {
+                $index = 'gollem/' . $backend_key . '/' . $fullpath;
+                foreach ($list as $key => $val) {
+                    $entry = Gollem::pathEncode($index . '/' . $val['name']);
+                    $results[$entry]['name'] = $val['name'];
+                    $results[$entry]['modified'] = $val['date'];
+                    if ($val['type'] == '**dir') {
+                        $results[$entry]['browseable'] = true;
+                    } else {
+                        $results[$entry]['browseable'] = false;
+                        $results[$entry]['contentlength'] = $val['size'];
+                    }
+                }
+            }
+        } else {
+            // A file has been requested.  Return the contents of the file.
+
+            // Get the file meta-data
+            $list = Gollem::listFolder($path);
+            $i = false;
+            foreach ($list as $key => $file) {
+                if ($file['name'] == $name) {
+                    $i = $key;
+                    break;
+                }
+            }
+            if ($i === false) {
+                // File not found
+                return $i;
+            }
+
+            // Read the file contents
+            $data = $GLOBALS['gollem_vfs']->read($path, $name);
+            if (is_a($data, 'PEAR_Error')) {
+                return false;
+            }
+
+            // Send the file
+            $results['name'] = $name;
+            $results['data'] = $data;
+            $results['contentlength'] = $list[$i]['size'];
+            $results['mtime'] = $list[$i]['date'];
+        }
+    }
+
+    return $results;
+}
+
+/**
+ * Accepts a file for storage into the VFS
+ *
+ * @since Gollem 1.1
+ *
+ * @param string $path           Path to store file
+ * @param string $content        Contents of file
+ * @param string $content_type   MIME type of file
+ *
+ * @return mixed                 True on success; PEAR_Error on failure
+ */
+function _gollem_put($path, $content, $content_type)
+{
+    @define('GOLLEM_BASE', dirname(__FILE__) . '/..');
+    // Gollem does not handle authentication
+    $GLOBALS['authentication'] = 'none';
+
+    // Include Gollem base libraries
+    require_once GOLLEM_BASE . '/lib/base.php';
+    require_once GOLLEM_BASE . '/lib/Session.php';
+    require GOLLEM_BASE . '/config/backends.php';
+    require GOLLEM_BASE . '/config/credentials.php';
+
+    // Clean off the irrelevant portions of the path
+    $path = Gollem::stripAPIPath($path);
+
+    if ($path == '') {
+        // We are at the root of gollem.  Any writes at this level are
+        // disallowed.
+        return PEAR::raiseError(_("Files must be written inside a VFS backend."));
+    } else {
+        // We must be inside one of the VFS areas.  Determine which one.
+         // Locate the backend_key in the path
+        if (strchr($path, '/')) {
+            $backend_key = substr($path, 0, strpos($path, '/'));
+        } else {
+            $backend_key = $path;
+        }
+
+        // Validate and perform permissions checks on the requested backend
+        if (!isset($backends[$backend_key])) {
+            return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
+        }
+        //if (!Gollem::canAutoLogin($backend_key)) {
+        //    // FIXME: Is it possible to request secondary authentication
+        //    // credentials here for backends that require it?
+        //    return PEAR::raiseError(_("Additional authentication required."));
+        //}
+        if (!Gollem_Session::createSession($backend_key)) {
+            return PEAR::raiseError(_("Unable to create Gollem session"));
+        }
+        if (!Gollem::checkPermissions('backend', PERMS_EDIT)) {
+            return PEAR::raiseError(_("Permission denied to this backend."));
+        }
+
+        // Trim off the backend_key (and '/') to get the VFS relative path
+        $fullpath = substr($path, strlen($backend_key) + 1);
+
+        // Get the VFS-standard $name,$path pair
+        list($name, $path) = Gollem::getVFSPath($fullpath);
+
+        return $GLOBALS['gollem_vfs']->writeData($path, $name, $content);
+    }
+}
+
+/**
+ * Creates a directory ("collection" in WebDAV-speak) within the VFS
+ *
+ * @since Gollem 1.1
+ *
+ * @param string $path           Path of directory to create
+ *
+ * @return mixed                 True on success; PEAR_Error on failure
+ */
+function _gollem_mkcol($path)
+{
+    @define('GOLLEM_BASE', dirname(__FILE__) . '/..');
+    // Gollem does not handle authentication
+    $GLOBALS['authentication'] = 'none';
+
+    // Include Gollem base libraries
+    require_once GOLLEM_BASE . '/lib/base.php';
+    require_once GOLLEM_BASE . '/lib/Session.php';
+    require GOLLEM_BASE . '/config/backends.php';
+    require GOLLEM_BASE . '/config/credentials.php';
+
+    // Clean off the irrelevant portions of the path
+    $path = Gollem::stripAPIPath($path);
+
+    if ($path == '') {
+        // We are at the root of gollem.  Any writes at this level are
+        // disallowed.
+        return PEAR::raiseError(_('Folders must be created inside a VFS backend.'));
+    } else {
+        // We must be inside one of the VFS areas.  Determine which one.
+        // Locate the backend_key in the path
+        if (!strchr($path, '/')) {
+            // Disallow attempts to create a share-level directory.  
+            return PEAR::raiseError(_('Folders must be created inside a VFS backend.'));
+        } else {
+            $backend_key = substr($path, 0, strpos($path, '/'));
+        }
+
+        // Validate and perform permissions checks on the requested backend
+        if (!isset($backends[$backend_key])) {
+            return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
+        }
+        //if (!Gollem::canAutoLogin($backend_key)) {
+        //    // FIXME: Is it possible to request secondary authentication
+        //    // credentials here for backends that require it?
+        //    return PEAR::raiseError(_("Additional authentication required."));
+        //}
+        if (!Gollem_Session::createSession($backend_key)) {
+            return PEAR::raiseError(_("Unable to create Gollem session"));
+        }
+        if (!Gollem::checkPermissions('backend', PERMS_EDIT)) {
+            return PEAR::raiseError(_("Permission denied to this backend."));
+        }
+
+        // Trim off the backend_key (and '/') to get the VFS relative path
+        $fullpath = substr($path, strlen($backend_key) + 1);
+
+        // Get the VFS-standard $name,$path pair
+        list($name, $path) = Gollem::getVFSPath($fullpath);
+
+        return $GLOBALS['gollem_vfs']->createFolder($path, $name);
+    }
+}
+
+/**
+ * Renames a file or directory
+ *
+ * @since Gollem 1.1
+ *
+ * @param string $path           Path to source object to be renamed
+ * @param string $dest           Path to new name
+ *
+ * @return mixed                 True on success; PEAR_Error on failure
+ */
+function _gollem_move($path, $dest)
+{
+    @define('GOLLEM_BASE', dirname(__FILE__) . '/..');
+    // Gollem does not handle authentication
+    $GLOBALS['authentication'] = 'none';
+
+    // Include Gollem base libraries
+    require_once GOLLEM_BASE . '/lib/base.php';
+    require_once GOLLEM_BASE . '/lib/Session.php';
+    require GOLLEM_BASE . '/config/backends.php';
+    require GOLLEM_BASE . '/config/credentials.php';
+
+    // Clean off the irrelevant portions of the path
+    $path = Gollem::stripAPIPath($path);
+    $dest = Gollem::stripAPIPath($dest);
+
+    if ($path == '') {
+        // We are at the root of gollem.  Any writes at this level are
+        // disallowed.
+        return PEAR::raiseError(_('Folders must be created inside a VFS backend.'));
+    } else {
+        // We must be inside one of the VFS areas.  Determine which one.
+        // Locate the backend_key in the path
+        if (!strchr($path, '/')) {
+            // Disallow attempts to rename a share-level directory.  
+            return PEAR::raiseError(_('Renaming of backends is not allowed.'));
+        } else {
+            $backend_key = substr($path, 0, strpos($path, '/'));
+        }
+
+        // Ensure that the destination is within the same backend
+        if (!strchr($dest, '/')) {
+            // Disallow attempts to rename a share-level directory.  
+            return PEAR::raiseError(_('Renaming of backends is not allowed.'));
+        } else {
+            $dest_backend_key = substr($path, 0, strpos($path, '/'));
+            if ($dest_backend_key != $backend_key) {
+                return PEAR::raiseError(_('Renaming across backends is not supported.'));
+            }
+        }
+
+        // Validate and perform permissions checks on the requested backend
+        if (!isset($backends[$backend_key])) {
+            return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
+        }
+        //if (!Gollem::canAutoLogin($backend_key)) {
+        //    // FIXME: Is it possible to request secondary authentication
+        //    // credentials here for backends that require it?
+        //    return PEAR::raiseError(_("Additional authentication required."));
+        //}
+        if (!Gollem_Session::createSession($backend_key)) {
+            return PEAR::raiseError(_("Unable to create Gollem session"));
+        }
+        if (!Gollem::checkPermissions('backend', PERMS_EDIT)) {
+            return PEAR::raiseError(_("Permission denied to this backend."));
+        }
+
+        // Trim off the backend_key (and '/') to get the VFS relative path
+        $srcfullpath = substr($path, strlen($backend_key) + 1);
+        $dstfullpath = substr($dest, strlen($backend_key) + 1);
+
+        // Get the VFS-standard $name,$path pair
+        list($srcname, $srcpath) = Gollem::getVFSPath($srcfullpath);
+        list($dstname, $dstpath) = Gollem::getVFSPath($dstfullpath);
+
+        return $GLOBALS['gollem_vfs']->rename($srcpath, $srcname, $dstpath, $dstname);
+    }
+}
+
+/**
+ * Removes a file or folder from the VFS
+ *
+ * @since Gollem 1.1
+ *
+ * @param string $path           Path of file or folder to delete
+ *
+ * @return mixed                 True on success; PEAR_Error on failure
+ */
+function _gollem_path_delete($path)
+{
+    @define('GOLLEM_BASE', dirname(__FILE__) . '/..');
+    // Gollem does not handle authentication
+    $GLOBALS['authentication'] = 'none';
+
+    // Include Gollem base libraries
+    require_once GOLLEM_BASE . '/lib/base.php';
+    require_once GOLLEM_BASE . '/lib/Session.php';
+    require GOLLEM_BASE . '/config/backends.php';
+    require GOLLEM_BASE . '/config/credentials.php';
+
+    // Clean off the irrelevant portions of the path
+    $path = Gollem::stripAPIPath($path);
+
+    if ($path == '') {
+        // We are at the root of gollem.  Any writes at this level are
+        // disallowed.
+        return PEAR::raiseError(_("The application folder can not be deleted."));
+    } else {
+        // We must be inside one of the VFS areas.  Determine which one.
+        // Locate the backend_key in the path
+        if (strchr($path, '/')) {
+            $backend_key = substr($path, 0, strpos($path, '/'));
+        } else {
+            $backend_key = $path;
+        }
+
+        // Validate and perform permissions checks on the requested backend
+        if (!isset($backends[$backend_key])) {
+            return PEAR::raiseError(sprintf(_("Invalid backend requested: %s"), $backend_key));
+        }
+        //if (!Gollem::canAutoLogin($backend_key)) {
+        //    // FIXME: Is it possible to request secondary authentication
+        //    // credentials here for backends that require it?
+        //    return PEAR::raiseError(_("Additional authentication required."));
+        //}
+        if (!Gollem_Session::createSession($backend_key)) {
+            return PEAR::raiseError(_("Unable to create Gollem session"));
+        }
+        if (!Gollem::checkPermissions('backend', PERMS_EDIT)) {
+            return PEAR::raiseError(_("Permission denied to this backend."));
+        }
+
+        // Trim off the backend_key (and '/') to get the VFS relative path
+        $fullpath = substr($path, strlen($backend_key) + 1);
+
+        // Get the VFS-standard $name,$path pair
+        list($name, $path) = Gollem::getVFSPath($fullpath);
+
+        // Apparently Gollem::verifyDir() (called by deleteF* next) needs to
+        // see a path with a leading '/' 
+        $path = $backends[$backend_key]['root'] . $path;
+        if ($GLOBALS['gollem_vfs']->isFolder($path, $name)) {
+            return Gollem::deleteFolder($path, $name);
+        } else {
+            return Gollem::deleteFile($path, $name);
+        }
+    }
+}
+
 function _gollem_perms()
 {
     static $perms = array();
@@ -55,16 +492,48 @@ function _gollem_perms()
 }
 
 /**
+ * Returns a link to the gollem file preview interface
+ *
+ * @since Gollem 1.1
+ *
+ * @param string $dir       File absolute path
+ * @param string $file      File basename
+ * @param string $backend   Backend key. Defaults to Gollem::getPreferredBackend()
+ *
+ * @return string  The URL string.
+ */
+function _gollem_getViewLink($dir, $file, $backend = '')
+{
+    @define('GOLLEM_BASE', dirname(__FILE__) . '/..');
+    require_once GOLLEM_BASE . '/lib/base.php';
+
+    if (empty($backend)) {
+        $backend = Gollem::getPreferredBackend();
+    }
+
+    $url = Util::addParameter(
+        Horde::applicationUrl('view.php'),
+        array('actionID' => 'view_file',
+              'type' => substr($file, strrpos($file, '.') + 1),
+              'file' => $file,
+              'dir' => $dir,
+              'driver' => $_SESSION['gollem']['backends'][$backend]['driver']));
+
+    return $url;
+}
+
+/**
  * Creates a link to the gollem file selection window.
+ *
  * The file section window will return a cache ID value which should be used
- * (along with the selectListResults and returnFromSelectList functions
- * belong) to obtain the data from a list of selected files.
+ * (along with the selectListResults and returnFromSelectList functions below)
+ * to obtain the data from a list of selected files.
  *
- * THERE MUST be a form field named 'selectlist_selectid' in the calling
+ * There MUST be a form field named 'selectlist_selectid' in the calling
  * form. This field will be populated with the selection ID when the user
  * completes file selection.
  *
- * THERE MUST be a form parameter named 'actionID' in the calling form.
+ * There MUST be a form parameter named 'actionID' in the calling form.
  * This form will be populated with the value 'selectlist_process' when
  * the user completes file selection.  The calling form will be submitted
  * after the window closes (i.e. the calling form must process the
@@ -81,16 +550,17 @@ function _gollem_perms()
 function _gollem_selectlistLink($link_text, $link_style, $formid,
                                 $icon = false, $selectid = '')
 {
-    Horde::addScriptFile('open_selectlist_win.js', 'gollem');
-    $link = Horde::link('#', $link_text, $link_style, '', 'open_selectlist_win(\'' . $formid . '\', \'' . $selectid . '\'); return false;');
+    Horde::addScriptFile('popup.js', 'gollem');
+    $link = Horde::link('#', $link_text, $link_style, '_blank', "popup_gollem('" . Horde::applicationUrl(Util::addParameter('selectlist.php', array('formid' => $formid, 'cacheid' => $selectid))) . "', 300, 500); return false;");
     if ($icon) {
-        $link_text = Horde::img('gollem.png', $link_text, 'style="vertical-align:middle"');
+        $link_text = Horde::img('gollem.png', $link_text);
     }
-    return $link . $link_text . '</a>';
+    return '<script type="text/javascript">document.write(\''
+        . addslashes($link . $link_text) . '<\' + \'/a>\');</script>';
 }
 
 /**
- * Return the list of files selected by the user for a given selection ID.
+ * Returns the list of files selected by the user for a given selection ID.
  *
  * @param string $selectid  The selection ID.
  *
@@ -133,7 +603,7 @@ function _gollem_returnFromSelectlist($selectid, $index)
 }
 
 /**
- * Set the files selected for a given selection ID
+ * Sets the files selected for a given selection ID.
  *
  * @param string $selectid  The selection ID to use.
  * @param array $files      An array with each file entry stored in its own
@@ -148,7 +618,7 @@ function _gollem_setSelectlist($selectid = '', $files = array())
     require_once GOLLEM_BASE . '/lib/base.php';
 
     if (empty($selectid)) {
-        $selectid = substr(base_convert(microtime() . mt_rand(), 10, 36), -16);
+        $selectid = uniqid(mt_rand(), true);
     }
 
     if (count($files) > 0) {
diff --git a/lib/base.php b/lib/base.php
index b6541eb..a980f07 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -15,16 +15,16 @@
  *   $gollem_be - A link to the current backend parameters in the session
  *   $gollem_vfs - A link to the current VFS object for the active backend
  *
- * $Horde: gollem/lib/base.php,v 1.60.2.3 2007/02/16 09:12:28 slusarz Exp $
+ * $Horde: gollem/lib/base.php,v 1.60.2.4 2008/10/09 20:54:42 jan Exp $
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
  */
 
 // Check for a prior definition of HORDE_BASE (perhaps by an
 // auto_prepend_file definition for site customization).
 if (!defined('HORDE_BASE')) {
-    @define('HORDE_BASE', dirname(__FILE__) . '/../..');
+    define('HORDE_BASE', dirname(__FILE__) . '/../..');
 }
 
 // Load the Horde Framework core, and set up inclusion paths.
@@ -44,22 +44,24 @@ if (is_a(($pushed = $registry->pushApp('gollem', !defined('AUTH_HANDLER'))), 'PE
     Horde::fatal($pushed, __FILE__, __LINE__, false);
 }
 $conf = &$GLOBALS['conf'];
- at define('GOLLEM_TEMPLATES', $registry->get('templates'));
+define('GOLLEM_TEMPLATES', $registry->get('templates'));
 
 // Notification system.
 $notification = &Notification::singleton();
 $notification->attach('status');
 
 // Find the base file path of Gollem.
- at define('GOLLEM_BASE', dirname(__FILE__) . '/..');
+if (!defined('GOLLEM_BASE')) {
+    define('GOLLEM_BASE', dirname(__FILE__) . '/..');
+}
 
-// Horde base libraries.
-require_once 'Horde/Help.php';
+// Horde libraries.
 require_once 'Horde/Secret.php';
 require_once 'VFS.php';
 
-// Gollem base library.
+// Gollem libraries.
 require_once GOLLEM_BASE . '/lib/Gollem.php';
+require_once GOLLEM_BASE . '/lib/Template.php';
 
 // If Gollem isn't responsible for Horde auth, and no one is logged into
 // Horde, redirect to the login screen.
@@ -72,6 +74,13 @@ if (!Util::nonInputVar('no_compress')) {
     Horde::compressOutput();
 }
 
+// Set the global $gollem_be variable to the current backend's parameters.
+if (empty($_SESSION['gollem']['backend_key'])) {
+    $GLOBALS['gollem_be'] = null;
+} else {
+    $GLOBALS['gollem_be'] = &$_SESSION['gollem']['backends'][$_SESSION['gollem']['backend_key']];
+}
+
 $authentication = Util::nonInputVar('authentication');
 if ($authentication !== 'none') {
     // If we've gotten to this point and have valid login credentials
@@ -86,15 +95,9 @@ if ($authentication !== 'none') {
         exit;
     }
 
+    // Check authentication and create $GLOBALS['gollem_vfs'] object
     Gollem::checkAuthentication($authentication);
 }
 
-// Set the global $gollem_be variable to the current backend's parameters.
-if (empty($_SESSION['gollem']['backend_key'])) {
-    $GLOBALS['gollem_be'] = null;
-} else {
-    $GLOBALS['gollem_be'] = &$_SESSION['gollem']['backends'][$_SESSION['gollem']['backend_key']];
-}
-
 // Load the backend list.
 Gollem::loadBackendList();
diff --git a/lib/prefs.php b/lib/prefs.php
index 5645ad3..4f6b03e 100644
--- a/lib/prefs.php
+++ b/lib/prefs.php
@@ -1,13 +1,13 @@
 <?php
 /**
- * $Horde: gollem/lib/prefs.php,v 1.2.2.2 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/lib/prefs.php,v 1.2.2.4 2009/01/06 15:23:54 jan Exp $
  *
- * Copyright 1999-2007 Charles J. Hagenbuch <chuck at horde.org>
- * Copyright 1999-2007 Jon Parise <jon at horde.org>
- * Copyright 1999-2007 Max Kalika <max at horde.org>
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Max Kalika <max at horde.org>
  */
 
 function handle_columnselect($updated)
@@ -16,7 +16,6 @@ function handle_columnselect($updated)
     if (!empty($columns)) {
         $GLOBALS['prefs']->setValue('columns', $columns);
         return true;
-    } else {
-        return false;
     }
+    return false;
 }
diff --git a/lib/version.php b/lib/version.php
index b5c55de..f741795 100644
--- a/lib/version.php
+++ b/lib/version.php
@@ -1 +1 @@
-<?php define('GOLLEM_VERSION', 'H3 (1.0.3)') ?>
+<?php define('GOLLEM_VERSION', 'H3 (1.1)') ?>
diff --git a/locale/bg_BG/LC_MESSAGES/gollem.mo b/locale/bg_BG/LC_MESSAGES/gollem.mo
index c321080..ee7d17c 100644
Binary files a/locale/bg_BG/LC_MESSAGES/gollem.mo and b/locale/bg_BG/LC_MESSAGES/gollem.mo differ
diff --git a/locale/ca_ES/help.xml b/locale/ca_ES/help.xml
index 7747681..722adc4 100755
--- a/locale/ca_ES/help.xml
+++ b/locale/ca_ES/help.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Horde: gollem/locale/ca_ES/help.xml,v 1.1.2.1 2007/02/07 16:23:16 jan Exp $ -->
+<!-- $Horde: gollem/locale/ca_ES/help.xml,v 1.1.2.2 2008/10/09 20:54:43 jan Exp $ -->
 <help>
 
-<entry id="file-actions" md5="4496a389972e236d397a3661b6767c9e" state="uptodate">
+<entry id="file-actions" md5="b0de5fc9b7cc30fea350fc3900737896" state="uptodate">
     <title>Administrador d'arxius: Accions</title>
     <heading>Creació de carpetes</heading>
     <para>
diff --git a/locale/cs_CZ/LC_MESSAGES/gollem.mo b/locale/cs_CZ/LC_MESSAGES/gollem.mo
index 40c3ee9..3d79773 100644
Binary files a/locale/cs_CZ/LC_MESSAGES/gollem.mo and b/locale/cs_CZ/LC_MESSAGES/gollem.mo differ
diff --git a/locale/da_DK/LC_MESSAGES/gollem.mo b/locale/da_DK/LC_MESSAGES/gollem.mo
index 0f8aa73..1af7524 100644
Binary files a/locale/da_DK/LC_MESSAGES/gollem.mo and b/locale/da_DK/LC_MESSAGES/gollem.mo differ
diff --git a/locale/de_DE/LC_MESSAGES/gollem.mo b/locale/de_DE/LC_MESSAGES/gollem.mo
index a9ff96f..8eb6674 100644
Binary files a/locale/de_DE/LC_MESSAGES/gollem.mo and b/locale/de_DE/LC_MESSAGES/gollem.mo differ
diff --git a/locale/en_US/help.xml b/locale/en_US/help.xml
index f9e6871..c6e4c06 100644
--- a/locale/en_US/help.xml
+++ b/locale/en_US/help.xml
@@ -1,20 +1,20 @@
 <?xml version='1.0'?>
-<!-- $Horde: gollem/locale/en_US/help.xml,v 1.7 2005/08/03 06:43:46 slusarz Exp $ -->
+<!-- $Horde: gollem/locale/en_US/help.xml,v 1.7.2.1 2008/10/09 20:54:45 jan Exp $ -->
 <help>
 
 <entry id="file-actions">
     <title>File Manager: Actions</title>
     <heading>Creating Folders</heading>
     <para>
-    To create a folder in the current directory, simply choose Create Folder from the More Actions drop down box.  
+    To create a folder in the current directory, simply choose Create Folder from the Actions drop down box.  
     </para>
     <heading>Delete, cut, copy and paste files</heading>
     <para>
     In order to delete, cut or copy a file or files, you need to select at least one file.
     After you select one or more files using the checkboxes to the left of the item, select either Cut Items, Copy Items or 
-    Delete Items from the More Actions drop down box.  If you selected Cut Items or Copy Items, you now have the option to 
+    Delete Items from the Actions drop down box.  If you selected Cut Items or Copy Items, you now have the option to 
     paste those files elsewhere in the File Manager.  Navigate to the location that you wish to paste the items, then select 
-    Paste Items from the More Actions drop down box.  The items will now be either moved (Cut Items) or copied (Copy Items) to 
+    Paste Items from the Actions drop down box.  The items will now be either moved (Cut Items) or copied (Copy Items) to 
     the location that you chose.
     </para>
     <heading>Delete, cut, copy and paste directories</heading>
@@ -26,9 +26,9 @@
     
     In order to delete, cut or copy a directory or directories, you need to select at least one directory.
     After you select one or more directories using the checkboxes to the left of the item, select either Cut Items, Copy Items 
-    or Delete Items from the More Actions drop down box.  If you selected Cut Items or Copy Items, you now have the option to 
+    or Delete Items from the Actions drop down box.  If you selected Cut Items or Copy Items, you now have the option to 
     paste those directories elsewhere in the File Manager.  Navigate to the location that you wish to paste the items, then 
-    select Paste Items from the More Actions drop down box.  The items will now either be moved (Cut Items) or copied (Copy Items)
+    select Paste Items from the Actions drop down box.  The items will now either be moved (Cut Items) or copied (Copy Items)
     to the location that you chose.
     </para>
     <heading>Working with the Clipboard</heading>
diff --git a/locale/es_ES/LC_MESSAGES/gollem.mo b/locale/es_ES/LC_MESSAGES/gollem.mo
index ebde13a..8f1ae6a 100644
Binary files a/locale/es_ES/LC_MESSAGES/gollem.mo and b/locale/es_ES/LC_MESSAGES/gollem.mo differ
diff --git a/locale/es_ES/help.xml b/locale/es_ES/help.xml
index 574e689..99350bb 100644
--- a/locale/es_ES/help.xml
+++ b/locale/es_ES/help.xml
@@ -1,12 +1,11 @@
 <?xml version="1.0"?>
-<!-- $Horde: gollem/locale/es_ES/help.xml,v 1.6.2.2 2006/02/16 17:21:11 jan Exp $ -->
+<!-- $Horde: gollem/locale/es_ES/help.xml,v 1.6.2.4 2009/02/21 11:16:28 jan Exp $ -->
 <help>
-
-<entry id="file-actions" md5="4496a389972e236d397a3661b6767c9e" state="uptodate">
+  <entry id="file-actions" md5="4496a389972e236d397a3661b6767c9e" state="changed">
     <title>Administrador de archivos: Acciones</title>
     <heading>Creaci&#xF3;n de carpetas</heading>
     <para>
-    Para crear una carpeta en el directorio actual, elija Crear carpeta en la barra de men&#xFA;.
+    Para crear una carpeta en el directorio actual, elija Crear carpeta en el men&#xFA; desplegable Acciones.
     </para>
     <heading>Eliminar, cortar, copiar y pegar archivos</heading>
     <para>
@@ -40,15 +39,14 @@
     del portapapeles pulsando su icono, que est&#xE1; sobre el listado de carpetas a la derecha del icono Actualizar
     El icono no se mostrar&#xE1; a menos que exista alg&#xFA;n elemento en el portapapeles. Los elementos cortados o copiados
     no dispondr&#xE1;n de una casilla a su izquierda, lo que significa que est&#xE1;n en el portapapeles. Cuando pulse en el 
-    icono del portapapeles, ver&#xE1; un listado de los elementos que haya copiado o cortado. Seleccione los elementos que 
+    icono del portapapeles, ver&#xE1; un listado de los elementos que haya copiado o cortado. Puede pegar esos elementos en la carpeta actual, mostrada sobre la lista de elementos, desde el visor del Portapapeles. Seleccione los elementos que 
     desee pegar y pulse pegar. Esos elementos se pegar&#xE1;n en la carpeta actual y se eliminar&#xE1;n del portapapeles. 
     Tras completar la operaci&#xF3;n de pegado, regresar&#xE1; a la carpeta actual. Si deseara eliminar un elemento del portapapeles, 
-    s&#xF3;lo tiene que seleccionarlo y pulsar Limpiar. Esos elementos se eliminar&#xE1;n del portapapeles se mostrar&#xE1; de
-    nuevo la carpeta actual.  
+    s&#xF3;lo tiene que seleccionarlo y pulsar Limpiar. Esos elementos se eliminar&#xE1;n del portapapeles y se mostrar&#xE1; de
+    nuevo la carpeta actual.
     </para>
 </entry>
-
-<entry id="file-upload" md5="f07834ebb15641cdc4e349ed8d304d75" state="uptodate">
+  <entry id="file-upload" md5="f07834ebb15641cdc4e349ed8d304d75" state="uptodate">
     <title>Administrador de archivos: Carga</title>
     <heading>Carga de archivos</heading>
     <para>
@@ -61,8 +59,7 @@
     actual del Administrador de archivos.
 </para>
 </entry>
-
-<entry id="sorting" md5="0ce2080b01acce2e9affc2191fc0386c" state="uptodate">
+  <entry id="sorting" md5="0ce2080b01acce2e9affc2191fc0386c" state="uptodate">
     <title>Ordenaci&#xF3;n de entradas</title>
     <heading>Ordenaci&#xF3;n de entradas</heading>
     <para>
diff --git a/locale/et_EE/LC_MESSAGES/gollem.mo b/locale/et_EE/LC_MESSAGES/gollem.mo
new file mode 100644
index 0000000..4d7cb7b
Binary files /dev/null and b/locale/et_EE/LC_MESSAGES/gollem.mo differ
diff --git a/locale/eu_ES/LC_MESSAGES/gollem.mo b/locale/eu_ES/LC_MESSAGES/gollem.mo
new file mode 100644
index 0000000..ed47e44
Binary files /dev/null and b/locale/eu_ES/LC_MESSAGES/gollem.mo differ
diff --git a/locale/eu_ES/help.xml b/locale/eu_ES/help.xml
new file mode 100644
index 0000000..fd33b68
--- /dev/null
+++ b/locale/eu_ES/help.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- $Horde: gollem/locale/eu_ES/help.xml,v 1.1.2.2 2008/10/09 20:54:48 jan Exp $ -->
+<help>
+
+<entry id="file-actions" md5="b0de5fc9b7cc30fea350fc3900737896" state="uptodate">
+    <title>Fitxategi-kudeatzailea: Ekintzak</title>
+    <heading>Karpetak sortzea</heading> <para>Uneko direktorioan karpeta bat sortzeko, hautatu 'Ekintza gehiago' goitibehera koadroan 'Sortu karpeta' aukera.</para> <heading>Fitxategiak ezabatu, ebaki, kopiatu eta itsatsi</heading> <para>Fitxategi bat edo fitxategi batzuk ezabatu, ebaki edo kopiatzeko, fitxategi bat hautatu behar duzu gutxienez. Fitxategi bat edo gehiago hautatu badituzu elementuaren ezkerrean dauden kontrol-laukiak erabiliz, hautatu Ebaki elementuak, Kopiatu elementuak edo Ezabatu elementuak 'Ekintza gehiago' izeneko goitibeherako koadroan.  Ebaki elementuak edo Kopiatu elementuak hautatu baduzu, fitxategi horiek Fitxategi-kudeatzaileko beste leku batean itsats ditzakezu orain.  Nabigatu elementuak itsatsi nahi dituzun lekura, eta ondoren hautatu Itsatsi elementuak 'Ekintza gehiago' izeneko goitibeherako koadroan.  Orduan elementuak lekuz aldatu (Ebaki elementuak) edo kopiatu (Kopiatu elementuak) egingo dira zuk aukeratutako lekura.</para> <heading>Ezabatu, ebaki, kopiatu eta itsatsi direktorioak</heading> <para>Lehenespenez, hutsik dauden direktorioak bakarrik ezaba ditzakezu, baina hutsik ez dauden direktorioak ezabatzeko aukera ere gaitu dezakezu (ezabatze errekurtsiboa).  Hutsik ez dagoen direktorio bat ezabatzen saiatzen bazara eginbide hau gaitu gabe, ezabatzeak huts egingo du eta errorea emango dizu.  Hutsik ez dauden direktorioak ezabatzeko aukera gaitzeko, hautatu Aukerak, Ezarpenak eta aukeratu Bai, 'Ezabatu karpetak errekurtsiboki' aukeraren goitibeherako koadroan.  Orduan gaituta geratuko da ezabatze errekurtsiboaren aukera.
+    
+    Direktorio bat edo gehiago ezabatzeko, ebakitzeko edo kopiatzeko, direktorio bat hautatu behar duzu gutxienez. Direktorio bat edo gehiago hautatu badituzu elementuaren ezkerrean dauden kontrol-laukiak erabiliz, hautatu Ebaki elementuak, Kopiatu elementuak edo Ezabatu elementuak 'Ekintza gehiago' izeneko goitibeherako koadroan.  Ebaki elementuak edo Kopiatu elementuak hautatu baduzu, direktorio horiek Fitxategi-kudeatzaileko beste leku batean itsats ditzakezu orain.  Nabigatu elementuak itsatsi nahi dituzun lekura, eta ondoren hautatu Itsatsi elementuak 'Ekintza gehiago' izeneko goitibeherako koadroan.  Orduan elementuak lekuz aldatu (Ebaki elementuak) edo kopiatu (Kopiatu elementuak) egingo dira zuk aukeratutako lekura.</para> <heading>Arbelaren erabilera</heading> <para>Fitxategi edo direktorio bat kopiatzean edo ebakitzean, arbelean kokatzen da.  Arbelaren edukia ikusteko, egin klik arbelaren ikonoan. Direktorio/Karpeten zerrendaren goialdean eta 'Freskatu' ikonoaren eskuinean aurkituko duzu.  Ikonoa ez da agertuko arbelean elementurik ez badago.  Ebakitzen edo kopiatzen diren elementuek ez dute kontrol-laukirik edukiko ezkerraldean, arbelean daudela esan nahi baitu horrek.  Arbel-ikustailean klik egindakoan, kopiatu edo ebakitako elementuen zerrenda ikusiko duzu. Arbel-ikustailetik, elementu horiek uneko direktorioan itsats ditzakezu. Elementuen zerrendaren goialdean bistaratzen da, hain zuzen ere, uneko direktorioa. Besterik gabe hautatu itsatsi nahi dituzun elementuak, eta egin klik Itsatsi botoian.  Elementu horiek uneko direktorioan itsatsiko dira, arbeletik kenduz aldi berean.  Itsasten amaitutakoan, uneko direktoriora itzuliko zara.  Elementu bat kendu nahi baduzu arbeletik, egin klik elementuetan eta sakatu Garbitu botoia.  Elementuak kendu egingo dira arbeletik, eta uneko direktoriora itzuliko zara.</para></entry>
+
+<entry id="file-upload" md5="f07834ebb15641cdc4e349ed8d304d75" state="uptodate">
+    <title>Fitxategi-kudeatzailea: Kargatu</title>
+    <heading>Fitxategiak kargatu</heading> <para>Fitxategi bat edo gehiago kargatzeko, nabigatu fitxategiak kargatu nahi dituzun direktoriora Fitxategi-kudeatzailean.  Direktorio horri Uneko direktorioa esaten zaio.  Direktorio egokian zaudenean Fitxategi-kudeatzailean, egin klik Arakatu botoian. Fitxategiak kargatzeko leihoa bistaratuko da.  Leihoa irekitzen denean, nabigatu kargatu nahi duzun fitxategira, hautatu eta egin klik Ados.  Hainbat fitxategi karga ditzakezu batera.  Fitxategi-kudeatzaileak automatikoki gehituko du beste Arakatu botoi bat fitxategi bat hautatzen duzun bakoitzean.  Kargatu nahi dituzun fitxategi guztiak hautatutakoan, egin klik 'Kargatu fitxategia(k)' botoian eta hautatutako fitxategiak kargatu egingo dira Fitxategi-kudeatzaileko uneko direktoriora.</para></entry>
+
+<entry id="sorting" md5="0ce2080b01acce2e9affc2191fc0386c" state="uptodate">
+    <title>Ordenatu sarrerak</title>
+    <heading>Ordenatu sarrerak</heading> <para>Fitxategi edo direktorioen zerrenda bat ikustean, edozein zutaberen arabera ordena ditzakezu.  Hori egiteko, egin klik ordenatzeko erabili nahi duzun zutabearen goiburuan, eta zerrenda freskatu egingo da, hautatutako zutabearen arabera ordenatuta.  Goranzko edo beheranzko ordenara aldatzeko, klik egin zutabearen izenburuko geziaren ikonoan.</para></entry></help>
diff --git a/locale/fi_FI/LC_MESSAGES/gollem.mo b/locale/fi_FI/LC_MESSAGES/gollem.mo
index 1eefd65..7c1221f 100644
Binary files a/locale/fi_FI/LC_MESSAGES/gollem.mo and b/locale/fi_FI/LC_MESSAGES/gollem.mo differ
diff --git a/locale/fi_FI/help.xml b/locale/fi_FI/help.xml
index 5a56cfa..0c24a5a 100644
--- a/locale/fi_FI/help.xml
+++ b/locale/fi_FI/help.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
-<!-- $Horde: gollem/locale/fi_FI/help.xml,v 1.2.2.1 2006/02/20 11:20:49 jan Exp $ -->
+<!-- $Horde: gollem/locale/fi_FI/help.xml,v 1.2.2.4 2009/02/03 00:16:18 jan Exp $ -->
 <help>
-  <entry id="file-actions" md5="4496a389972e236d397a3661b6767c9e" state="uptodate">
+  <entry id="file-actions" md5="b0de5fc9b7cc30fea350fc3900737896" state="uptodate">
     <title>Tiedostohallinta: Toiminnot</title>
     <heading>Hakemistojen luonti</heading>
     <para>
@@ -13,37 +13,22 @@
     Kun olet valinnut yhden tai useamman tiedoston rastittamalla valintalaatikot objektin vasemmalla puolella, voit alasvetovalikosta valita yhden seuraavista  toiminnoista "Leikkaa objekteja", "Kopioi objekteja" tai "Poista objektit". Jos valitset "Leikkaa objekti" tai "Kopioi objekti", niin t&#xE4;m&#xE4;n j&#xE4;lkeen voit liitt&#xE4;&#xE4; objektin muuhun paikkaan tiedostonhallinnassa. Kun haluat liitt&#xE4;&#xE4; objektin, niin siirry valitsemaasi kohteeseen ja valitse t&#xE4;m&#xE4;n j&#xE4;lkeen toiminnot alasvetovalikosta "Liit&#xE4; objekti". T&#xE4;m&#xE4;n j&#xE4;lkeen objektit ovat joko siirtyneet (Leikkaa objekti) tai kopioituneet (Kopioi objekti) valitsemaasi kohteeseen.
     </para>
     <heading>Hakemistojen poisto, leikkaus, kopiointi ja liit&#xE4;minen</heading>
-    <heading>Delete, cut, copy and paste directories</heading>
     <para>	
     Oletuksena voit poistaa hakemiston vain jos se on tyhj&#xE4;. On kuitenkin mahdollista poistaa ei-tyhj&#xE4; hakemisto jos valitset asetuksen "Poista hakemistot rekursiivisesti". Jos yrit&#xE4;t poistaa ei-tyhj&#xE4;&#xE4; hakemistoa ilman ett&#xE4; sinulla on p&#xE4;&#xE4;ll&#xE4; em. asetus, niin poistaminen ep&#xE4;onnistuu virheilmoituksen kera. Jos haluat poistaa ei-tyhji&#xE4; hakemistoja, niin valitse laita asetuksista p&#xE4;&#xE4;lle asetus "Poista hakemistot rekursiivisesti.".
     Poistaaksesi, leikataksesi tai kopioidaksesi hakemistoja, sinun pit&#xE4;&#xE4; valita ainakin yksi hakemisto.
     Kun olet valinnut yhden tai useamman hakemiston rastittamalla valintalaatikon hakemiston vasemmalla puolella, voit alasvetovalikosta valita yhden seuraavista  toiminnoista "Leikkaa objekteja", "Kopioi objekteja" tai "Poista objektit". Jos valitset "Leikkaa objekti" tai "Kopioi objekti", niin t&#xE4;m&#xE4;n j&#xE4;lkeen voit liitt&#xE4;&#xE4; objektin muuhun paikkaan tiedostonhallinnassa. Kun haluat liitt&#xE4;&#xE4; objektin, niin siirry valitsemaasi kohteeseen ja valitse t&#xE4;m&#xE4;n j&#xE4;lkeen toiminnot alasvetovalikosta "Liit&#xE4; objekti". T&#xE4;m&#xE4;n j&#xE4;lkeen objektit ovat joko siirtyneet (Leikkaa objekti) tai kopioituneet (Kopioi objekti) valitsemaasi kohteeseen.
     </para>
-    <heading>Ty&#xF6;skentely leikep&#xF6;yd&#xE4;n kanssa</heading>
+
+    <heading>Ty&#xF6;skentely leikep&#xF6;yd&#xE4;ll&#xE4;</heading>
     <para>
-    Kun kopioit tai siirr&#xE4;t tiedoston tai hakemiston, niin se
-    laitetaan leikep&#xF6;yd&#xE4;lle. Voit tarkistaa leikep&#xF6;yd&#xE4;n sis&#xE4;ll&#xF6;n
-    napsauttamalla leikep&#xF6;yt&#xE4; -ikonia, joka l&#xF6;ytyy
-    hakemisto/kansiolistauksen yl&#xE4;puolelta p&#xE4;ivit&#xE4; -ikonin oikealta
-    puolelta. Leikep&#xF6;yt&#xE4; -ikoni ei ole n&#xE4;kyvill&#xE4;, jos leikep&#xF6;yt&#xE4; on
-    tyhj&#xE4;. Leikep&#xF6;yd&#xE4;lle kopioitujen tai siirrettyjen objektien vieress&#xE4;
-    vasemmalla puolella ei ole valintaruutua. Kun napsautat leikep&#xF6;yt&#xE4;
-    -ikonia, niin sinulle tulee n&#xE4;kyviin sinne kopioidut tai siirretyt
-    objektit. Leikep&#xF6;yt&#xE4; n&#xE4;kym&#xE4;st&#xE4; voit liitt&#xE4;&#xE4; tietoja sen hetkiseen
-    hakemistoon, joka n&#xE4;kyy objektien yl&#xE4;puolella. Liitt&#xE4;&#xE4;ksesi sen
-    hetkiseen hakemistoon ohjektit valitse vain haluamasi ja valitse
-    liit&#xE4;. Liitetyt objektit poistuvat liit&#xE4; operaation j&#xE4;lkeen
-    automaattisesti leikep&#xF6;yd&#xE4;lt&#xE4; ja palaat takaisin sen hetkiseen
-    hakemistoon. Jos haluat poistaa objektin leikep&#xF6;yd&#xE4;lt&#xE4;, niin valitse
-    se ja napsauta tyhjenn&#xE4; painiketta. Toiminnon j&#xE4;lkeen palaat takaisin
-    sen hetkiseen hakemistoon.
+    Kun olet kopioinut tai leikannut tiedoston tai hakemiston, niin se laitetaan leikep&#xF6;yd&#xE4;lle. Voit tarkastella leikep&#xF6;yd&#xE4;n sis&#xE4;lt&#xF6;&#xE4; napsauttamalla leikep&#xF6;yd&#xE4;n kuvaketta, joka sijaitsee hakemistolistauksen yl&#xE4;puolella oikealla p&#xE4;ivit&#xE4; ikonista. T&#xE4;m&#xE4; ikoni on n&#xE4;kyviss&#xE4; vain jos leikep&#xF6;yd&#xE4;ll&#xE4; on objekteja. Jos objektin vieress&#xE4; ei ole valintalaatikkoa, niin se tarkoittaa, ett&#xE4; n&#xE4;m&#xE4; objektit on jo leikep&#xF6;yd&#xE4;ll&#xE4;. Kun napsautat auki leikep&#xF6;yd&#xE4;n, niin n&#xE4;et listan objekteista, jotka on sinne kopioitu. Voit t&#xE4;st&#xE4; listasta valita haluamasi objektit ja liitt&#xE4;&#xE4; ne nykyiseen hakemistoon. Palaat automaattisesti takaisin nykyiseen hakistoon kun liitt&#xE4;minen on onnistunut. Jos haluat poistaa jonkun objektin leikep&#xF6;yd&#xE4;lt&#xE4;, niin valitse objekti ja napsauta poista. Kun poistaminen on onnistunut, niin palaat takaisin nykyiseen hakemistoon.
     </para>
 </entry>
   <entry id="file-upload" md5="f07834ebb15641cdc4e349ed8d304d75" state="uptodate">
-    <title>Tiedostohallinta: Tuonti</title>
-    <heading>Tiedostojen tuonti</heading>
+    <title>Tiedostohallinta: Tuonti palvelimelle</title>
+    <heading>Tiedostojen tuonti palvelimelle</heading>
     <para>
-    Tuodaksesi tiedoston tai tiedostoja, niin mene ensin siihen hakemistoon johon haluat tuoda tiedostot. T&#xE4;m&#xE4; valitsemasi hakemisto on nykyinen hakemistosi. Kun tiedostonhallinnassa oikeassa hakemistossa, niin napsauta "Browse" -painiketta ja tiedoston tuonti -ikkunan pit&#xE4;isi aueta. Kun ikkuna on auki ja n&#xE4;kyviss&#xE4; valitse tuotava tiedosto ja napsauta OK-painiketta. Voit my&#xF6;s tuoda useampia tiedostoja kerrallaan, joka kerta kun olet valinnut yhden tiedoston, niin ilmestyy uusi "Browse" -painike. Kun olet valinnut kaikki tuotavat tiedostot, niin napsauta "Tuo tiedostot" -painiketta ja valitsemasi tiedostot tuodaan tiedostohallinnan nykyiseen hakemistoon.
+    Tuodaksesi tiedoston tai tiedostoja palvelimelle, niin mene ensin siihen hakemistoon johon haluat tuoda tiedostot. T&#xE4;m&#xE4; valitsemasi hakemisto on nykyinen hakemistosi. Kun olet tiedostonhallinnassa oikeassa hakemistossa, niin napsauta "Browse" -painiketta ja tiedoston tuonti palvelimelle -ikkunan pit&#xE4;isi aueta. Kun ikkuna on auennut ja olet valinnut palvelimelle tuotavan tiedosto, niin napsauta OK-painiketta. Voit my&#xF6;s tuoda palvelimelle useampia tiedostoja kerrallaan. Kun olet valinnut yhden tiedoston, niin tämän jälkeen ilmestyy näkyviin uusi "Browse" -painike. Kun olet valinnut kaikki palvelimelle tuotavat tiedostot, niin napsauta "Tuo tiedostot palvelimelle" -painiketta ja valitsemasi tiedostot tuodaan palvelimelle tiedostohallinnan nykyiseen hakemistoon.
 </para>
 </entry>
   <entry id="sorting" md5="0ce2080b01acce2e9affc2191fc0386c" state="uptodate">
diff --git a/locale/fr_FR/LC_MESSAGES/gollem.mo b/locale/fr_FR/LC_MESSAGES/gollem.mo
index b97c15f..a524702 100644
Binary files a/locale/fr_FR/LC_MESSAGES/gollem.mo and b/locale/fr_FR/LC_MESSAGES/gollem.mo differ
diff --git a/locale/hu_HU/LC_MESSAGES/gollem.mo b/locale/hu_HU/LC_MESSAGES/gollem.mo
index ee144be..e1d4a10 100644
Binary files a/locale/hu_HU/LC_MESSAGES/gollem.mo and b/locale/hu_HU/LC_MESSAGES/gollem.mo differ
diff --git a/locale/hu_HU/help.xml b/locale/hu_HU/help.xml
index b8e89bc..fe29645 100644
--- a/locale/hu_HU/help.xml
+++ b/locale/hu_HU/help.xml
@@ -1,104 +1,131 @@
 <?xml version="1.0" encoding="iso-8859-2"?>
-<!-- Gollem 1.0.2 help: hu_HU $Horde: gollem/locale/hu_HU/help.xml,v 1.2.2.1 2006/03/03 13:44:11 jan Exp $ -->
+<!-- $Horde: gollem/locale/hu_HU/help.xml,v 1.2.2.2 2008/10/09 20:54:50 jan Exp $ -->
 <help>
-  <entry id="file-actions" state="uptodate" md5="4496a389972e236d397a3661b6767c9e">
-    <title>Fájlkezelõ: Mûveletek</title>
+  <entry id="file-actions" state="unknown">
+    <title>Fájl menedzser: Mûveletek</title>
     <heading>Mappák létrehozása</heading>
     <para>
-    Ha új almappát kívánunk létrehozni a jelenlegi mappán belül, válasszuk az 
-    "Új mappa létrehozása" funkciót a "Mûveletek" 
-    legördülõ menübõl.
+    Ha új almappát kívánunk létrehozni a jelenlegi mappán belül, válasszuk az 'Új mappa
+    létrehozása' funkciót a 'Mûveletek' legördülõ menübõl.
     </para>
-
-    <heading>Fájlok törlése, vágóasztalra való áthelyezése, másolása ill. onnan 
-             történõ beillesztése</heading>
+    <heading>Fájlok törlése, vágóasztalra való áthelyezése, másolása ill. onnan történõ
+    beillesztése</heading>
     <para>
-    Ezekhez a mûveletekhez elõször ki kell jelölnie legalább egy fájlt. Miután a 
-    fájlok bal oldalán levõ kis négyzetekben megjelölte a megfelelõket, válassza 
-    ki a megfelelõ funkciót a "Mûveletek" legördülõ menübõl. Ha az 
-    "Áthelyezés a vágóasztalra" vagy a 
-    "Másolás a vágóasztalra" mûveletet választotta, akkor megjelenik a
-    "Beillesztés a vágóasztalról" funkció. Keresse meg azt a mappát 
-    ahova be kívánja illeszteni a fájlokat, majd válassza ki a 
-    "Beillesztés a vágóasztalról" funkciót
-    a "Mûveletek" legördülõ menübõl. A korábban kiválasztott fájlok 
-    vagy átkerülnek (áthelyzezés esetén) vagy átmásolódnak (másolás esetén) 
-    az új mappába.
+    Ezekhez a mûveletekhez elõször ki kell jelölnie legalább egy fájlt. Miután a fájlok
+    bal oldalán levõ kis négyzetekben megjelölte a megfelelõket, válassza ki a megfelelõ
+    funkciót a 'Mûveletek' legördülõ menübõl. Ha az 'Áthelyezés a vágóasztalra' vagy a
+    'Másolás a vágóasztalra' mûveletet választotta, akkor megjelenik a
+    'Beillesztés a vágóasztalról' funkció. Keresse meg azt a mappát ahova be kívánja
+    illeszteni a fájlokat, majd válassza ki a 'Beillesztés a vágóasztalról' funkciót
+    a 'Mûveletek' legördülõ menübõl. A korábban kiválasztott fájlok vagy átkerülnek
+    (áthelyzezés esetén) vagy átmásolódnak (másolás esetén) az új mappába.
     </para>
-
-    <heading>Mappák törlése, vágóasztalra való áthelyezése, másolása ill. onnan 
-             történõ beillesztése</heading>
+    <heading>Mappák törlése, vágóasztalra való áthelyezése, másolása ill. onnan történõ
+    beillesztése</heading>
     <para>
-    Alapértelmezett beállítás esetén csak olyan mappákat törölhet, melyek üresek,
-    bár az opciókban beállíthatja a nemüres mappák (rekurzív) törölhetõségét. 
-    Enélkül viszont, ha megkísérel kitörölni egy nemüres mappát, akkor ez nem 
-    fog sikerülni, hibajelzést kap. A nemüres mappák rekurzív törléséhez 
-    kattintson az Opciókra, majd itt a Beállítások pontra, ahol már beállítható 
-    a kívánt lehetõség.
-    Ha mappákat kíván törölni, áthelyezni, vagy másolni, akkor elõször válasszon 
-    ki legalább egy mappát. Miután a mappák bal oldalán levõ kis négyzetekben 
-    megjelölte a megfelelõket, válassza ki a megfelelõ funkciót a 
-    "Mûveletek" legördülõ menübõl. 
-    Ha az "Áthelyezés a vágóasztalra" vagy a 
-    "Másolás a vágóasztalra" mûveletet választotta, akkor megjelenik 
-    a "Beillesztés a vágóasztalról" funkció. Keresse meg 
+    Alapértelmezett beállítás esetén csak olyan mappákat törölhet, melyek üresek, bár
+    az opciókban beállíthatja a nemüres mappák (rekurzív) törölhetõségét. Enélkül viszont
+    ha megkísérel kitörölni egy nemüres mappát, akkor ez nem fog sikerülni, hibajelzést 
+    kap. A nemüres mappák rekurzív törléséhez kattintson az Opciókra, majd itt a 
+    Beállítások pontra, ahol már beállítható a kívánt lehetõség.
+    Ha mappákat kíván törölni, áthelyezni, vagy másolni, akkor elõször válasszon ki 
+    legalább egy mappát. Miután a mappák bal oldalán levõ kis négyzetekben megjelölte 
+    a megfelelõket, válassza ki a megfelelõ funkciót a 'Mûveletek' legördülõ menübõl. 
+    Ha az 'Áthelyezés a vágóasztalra' vagy a 'Másolás a vágóasztalra' mûveletet 
+    választotta, akkor megjelenik a 'Beillesztés a vágóasztalról' funkció. Keresse meg 
     azt a mappát ahova be kívánja illeszteni a mappákat, majd válassza ki a 
-    "Beillesztés a vágóasztalról" funkciót a "Mûveletek" 
-    legördülõ menübõl. A korábban kiválasztott mappák vagy átkerülnek 
-    (áthelyzezés esetén) vagy átmásolódnak (másolás esetén) az új mappába.
+    'Beillesztés a vágóasztalról' funkciót a 'Mûveletek' legördülõ menübõl. 
+    A korábban kiválasztott mappák vagy átkerülnek (áthelyzezés esetén) vagy 
+    átmásolódnak (másolás esetén) az új mappába.
     </para>
-
-    <heading>A vágóasztal használata</heading>
+<!-- English entry:
+<entry id="file-actions">
+    <title>File Manager: Actions</title>
+    <heading>Creating Folders</heading>
     <para>
-    Az "Áthelyezés a vágóasztalra" ill. a 
-    "Másolás a vágóasztalra" mûveletek elvégzése után a kiválasztott
-    állományok ill. mappák a vágóasztalra kerülnek. Ennek tartalma megjeleníthetõ.
-    Ehhez a vágóasztal ikonjára kell kattintani, ami az állomány- ill. mappalista
-    tetején, a frissítés gombtól jobbra van. Ez az ikon csak akkor jelenik meg,
-    ha a vágóasztal ténylegesen tartalmaz valamit. A szokásos állománylistában 
-    hiányozni fog a kis kijelölõ négyzet azon állományok sorában, melyeket
-    áthelyeztünk vagy átmásoltunk a vágóasztalra. Ha rákattintunk a vágóasztal
-    ikonjára, akkor megjelenik azoknak az állományoknak a listája, melyeket a
-    vágóasztal éppen tartalmaz. Ezek az állományok beilleszthetõk innen az 
-    aktuálisan érvényes alkönyvtárba mely a lista fölött látható. Ehhez 
-    egyszerûen ki kell jelölni a kívánt állományokat és a 
-    "Beillesztés"-re kell kattintani. Erre a kijelölt állományok 
-    bekerülnek az aktuálisan érvényes alkönyvtárba, és törlõdnek a vágóasztalról.
-    A beillesztést követõen visszakerül az aktuálisan érvényes alkönyvtárba.
-    Ha törölni óhajt egy állományt a vágóasztalról, akkor jelölje ki és 
-    kattintson a "Törlés"-re. Erre törlõdnek a kijelölt állományok
-    és visszakerül az aktuálisan érvényes alkönyvtárba.
+    To create a folder in the current directory, simply choose Create Folder from the More Actions drop down box.  
     </para>
-  </entry>
-
-  <entry id="file-upload" state="uptodate" md5="f07834ebb15641cdc4e349ed8d304d75">
-    <title>Fájlkezelõ: Feltöltés</title>
-    <heading>Fájlok feltöltése</heading>
+    <heading>Delete, cut, copy and paste files</heading>
+    <para>
+    In order to delete, cut or copy a file or files, you need to select at least one file.
+    After you select one or more files using the checkboxes to the left of the item, select either Cut Items, Copy Items or 
+    Delete Items from the More Actions drop down box.  If you selected Cut Items or Copy Items, you now have the option to 
+    paste those files elsewhere in the File Manager.  Navigate to the location that you wish to paste the items, then select 
+    Paste Items from the More Actions drop down box.  The items will now be either moved (Cut Items) or copied (Copy Items) to 
+    the location that you chose.
+    </para>
+    <heading>Delete, cut, copy and paste directories</heading>
+    <para>	
+    By default, you can only delete directories that are empty, however you can enable the deletion of non-empty directories 
+    (recursive delete).  If you try to delete a non-empty directory without enabling this feature, deletion will fail with 
+    an error.  To enable the deleting non-empty directories, click on Options, Settings and choose Yes from the drop down box 
+    for the Delete Folders Recursively option.  This will enable the recursive delete option.
+    
+    In order to delete, cut or copy a directory or directories, you need to select at least one directory.
+    After you select one or more directories using the checkboxes to the left of the item, select either Cut Items, Copy Items 
+    or Delete Items from the More Actions drop down box.  If you selected Cut Items or Copy Items, you now have the option to 
+    paste those directories elsewhere in the File Manager.  Navigate to the location that you wish to paste the items, then 
+    select Paste Items from the More Actions drop down box.  The items will now either be moved (Cut Items) or copied (Copy Items)
+    to the location that you chose.
+    </para>
+    <heading>Working with the Clipboard</heading>
     <para>
-    Ha egy vagy több fájlt kíván a szerverre feltölteni, elõször keresse meg a 
-    Fájlkezelõben azt a mappát, ahova az állományokat el kívánja helyezni. Ez 
-    lesz az aktuálisan érvényes alkönyvtár. Ezután kattintson a 
-    "Böngészés" (Browse) gombra, majd a felbukkanó Fájlfeltöltés 
-    (File upload) ablakban keresse meg és jelölje ki (a saját gépén) a 
-    feltöltendõ fájlt és kattintson az OK (esetleg Megnyitás/Open)
-    gombra. Egyszerre több fájlt is feltölthet. Minden fájlkiválasztás után a 
-    Fájlkezelõ egy újabb sorban új "Böngészés" (Browse) gombot 
-    jelenít meg. Ezt használva több fájl is kijelölhetõ feltöltésre. Miután 
-    kijelölte a feltöltendõ fájl(oka)t, kattintson a Fájlfeltöltés gombra. 
-    Erre a kijelölt állományok a szerverre fognak kerülni, a Fájlkezelõben 
-    korábban kiválasztott mappába.
+    Once you copy or cut a file or directory, it is placed in the clipboard.  You can view the contents of the clipboard by clicking
+    on the clipboard icon, which is located above the directory/folder listing and to the right of the refresh icon.  This icon is not 
+    present unless there are items in the clipboard.  Items that are cut or copied will not have a checkbox to the left of them, which 
+    means they are in the clipboard.  Once you click on the clipboard viewer, you will see a list of items that you have copied or cut.
+    From the clipboard viewer, you can paste these items to the current directory, which is displayed above the list of items.
+    Simply check the items that you want to paste, then click paste.  These items will be pasted into the current directory and be removed
+    from the clipboard.  You will be returned to the current directory after the paste is complete.  If you would like to remove an item 
+    from the clipboard, simply check the items and click clear.  These items will then be removed from the clipboard and you will be returned 
+    to the current directory.  
     </para>
-  </entry>
-
-  <entry id="sorting" state="uptodate" md5="0ce2080b01acce2e9affc2191fc0386c">
+</entry>--></entry>
+  <entry id="file-upload" state="unknown">
+    <title>Fájl menedzser: Feltöltés</title>
+    <heading>Fájlok feltöltése</heading>
+    <para>
+    Ha egy vagy több fájlt kíván a szerverre feltölteni, elõször keresse meg a Fájl 
+    menedzserben azt a mappát, ahova az állományokat el kívánja helyezni. Ez lesz az 
+    éppen érvényes alkönyvtár. Ezután kattintson a 'Böngészés' (Browse) gombra, majd
+    a felbukkanó Fájlfeltöltés (File upload) ablakban keresse meg és jelölje ki 
+    (a saját gépén) a feltöltendõ fájlt és kattintson az OK (esetleg Megnyitás/Open)
+    gombra. Egyszerre több fájlt is feltölthet. Minden fájlkiválasztás után a Fájl
+    menedzser egy újabb sorban új 'Böngészés' (Browse) gombot jelenít meg. Ezt használva
+    több fájl is kijelölhetõ feltöltésre. Miután kijelölte a feltöltendõ fájl(oka)t,
+    kattintson a Fájlfeltöltés gombra. Erre a kijelölt állományok a szerverre fognak
+    kerülni, a Fájl menedzserben korábban kiválasztott mappába.
+</para>
+<!-- English entry:
+<entry id="file-upload">
+    <title>File Manager: Uploading</title>
+    <heading>Uploading Files</heading>
+    <para>
+    To upload a file or files, navigate to the directory on the File Manager that you wish to upload the files to.  This is 
+    known as your current directory.  Once you are in the proper directory on the File Manager, click on the Browse button.
+    This will display a File Upload window.  Once this window is open, navigate to the file which you wish to upload, select 
+    it and click OK.  You can upload multiple files at once.  The File Manager will automatically add another 
+    Browse button after each file you select.  Once you have selected all of the files that you wish to upload, click the 
+    Upload File(s) button and the file or files that you selected will be uploaded to your current directory on the File Manager.
+</para>
+</entry>--></entry>
+  <entry id="sorting" state="unknown">
     <title>Sorbarendezés</title>
     <heading>Sorbarendezés</heading>
     <para>
-    Az állományok listázáskor bármely oszlop szerint sorbarendezhetõk. Ehhez 
-    mindössze a megfelelõ oszlop fejlécére kell kattintania. Erre a lista 
-    újra megjelenik, mégpedig a kívánt oszlop szerinti sorrendben. Ha a 
-    sorbarendezés irányát kívánja megváltoztatni, akkor kattintson a fejlécben 
-    levõ kis háromszög alakú nyílra.
+    Az állományok listázáskor bármely oszlop szerint sorbarendezhetõk. Ehhez mindössze
+    a megfelelõ oszlop fejlécére kell kattintania. Erre a lista újra megjelenik, mégpedig
+    a kívánt oszlop szerinti sorrendben. Ha a sorbarendezés irányát kívánja megváltoztatni,
+    akkor kattintson a fejlécben levõ kis háromszög alakú nyílra.
+    </para>
+<!-- English entry:
+<entry id="sorting">
+    <title>Sorting Entries</title>
+    <heading>Sorting Entries</heading>
+    <para>
+    When viewing a list of files or directories, you can sort them by any column.  To do this, click on the appropriate 
+    column heading that you wish to sort by, and the list will refreshed, sorted by the column you selected.  To switch 
+    columns between ascending and descending order, click on the arrow icon in the column heading.
     </para>
-  </entry>
+</entry>--></entry>
 </help>
diff --git a/locale/it_IT/LC_MESSAGES/gollem.mo b/locale/it_IT/LC_MESSAGES/gollem.mo
index 22adef8..352203a 100644
Binary files a/locale/it_IT/LC_MESSAGES/gollem.mo and b/locale/it_IT/LC_MESSAGES/gollem.mo differ
diff --git a/locale/ko_KR/LC_MESSAGES/gollem.mo b/locale/ko_KR/LC_MESSAGES/gollem.mo
index 31ae2ee..00ca17c 100644
Binary files a/locale/ko_KR/LC_MESSAGES/gollem.mo and b/locale/ko_KR/LC_MESSAGES/gollem.mo differ
diff --git a/locale/lv_LV/LC_MESSAGES/gollem.mo b/locale/lv_LV/LC_MESSAGES/gollem.mo
index 497d812..0b7cd5f 100644
Binary files a/locale/lv_LV/LC_MESSAGES/gollem.mo and b/locale/lv_LV/LC_MESSAGES/gollem.mo differ
diff --git a/locale/lv_LV/help.xml b/locale/lv_LV/help.xml
new file mode 100644
index 0000000..3ae37e5
--- /dev/null
+++ b/locale/lv_LV/help.xml
@@ -0,0 +1,57 @@
+<?xml version='1.0' encoding='cp1257'?>
+<!-- $Horde: gollem/locale/lv_LV/help.xml,v 1.1.2.2 2008/10/09 20:54:51 jan Exp $ -->
+<help>
+
+<entry id="file-actions">
+    <title>Failu pârvaldnieks: Darbîbas</title>
+    <heading>Mapju izveidoðana</heading>
+    <para>
+    Lai izveidotu mapi aktuâlajâ katalogâ, uzklikðíiniet ikonai <b>Izveidot mapi</b> Failu pârvaldnieka rîkjoslâ.  
+    </para>
+    <heading>Failu dzçðana, izgrieðana, kopçðana, ielîmçðana</heading>
+    <para>
+    Lai dzçstu, izgrieztu vai nokopçtu failu(s), ir jâizvçlas vismaz viens fails, atzîmçjot to(s) izvçles rûtiòâ(s) pa kreisi no faila nosaukuma. Pçc tam, kad ir atzîmçti nepiecieðami faili, no izkrîtoðâs komandkartes <b>Darbîbas</b> izvçlieties nepiecieðamo darbîbu. Ja izvçlçjâties <b>Kopçt</b> vai <b>Izgriezt</b>, atzîmçtie faili tiks nokopçti vai pârvietoti uz Starpliktuvi un lietotâja saskarnç parâdîsies jauna ikona <b>Skatît starpliktuvi</b>. No Starpliktuves Jums ir iespçja ielîmçt atbilstoðos failus jebkurâ Failu pârvaldnieka vietâ. Pârejiet uz vietu direktoriju kokâ, kurâ nepiecieðams novietot failu(s), atveriet Starpliktuvi, atzîmçjiet nepiecieðamo(s) failu(s) rûtiòâ(s) pa kreisi no faila nosaukuma un uzklikðíiniet uz <b>Ielîmçt</b>. Pçc ðîs darbîbas faili tiks ielîmçti aktuâlajâ katalogâ un Starpliktuve – attîrîta.   
+    </para>
+    <heading>Katalogu dzçðana, izgrieðana, kopçðana, ielîmçðana</heading>
+    <para>	
+Pçc noklusçðanas, izdzçst katalogu iespçjams tikai gadîjumâ, ja tajâ nav failu. Ja vçlaties dzçst katalogus ar visu to saturu, varat ieslçgt rekursîvu katalogu dzçðanu. Lai to ieslçgtu, uzklikðíiniet ikonai <b>Opcijas</b>, izvçlieties <b>Iestatîjumi</b> un  no izkrîtoðajâ komandkartç piedâvâtajâm iespçjâm - Jums vçlamo variantu. 
+Ja mçìinâsiet dzçst katalogu ar failiem, neieslçdzot minçto opciju, dzçðanas mçìinâjums beigsies ar kïûdu.
+
+Lai dzçstu, izgrieztu vai nokopçtu katalogu(s), ir jâizvçlas vismaz viens katalogs, atzîmçjot to(s) izvçles rûtiòâ(s) pa kreisi no kataloga nosaukuma. Pçc tam, kad ir atzîmçti nepiecieðami katalogi, no izkrîtoðâs komandkartes <b>Darbîbas</b> izvçlieties nepiecieðamo darbîbu. Ja izvçlçjâties <b>Kopçt</b> vai <b>Izgriezt</b>, atzîmçtie katalogi tiks nokopçti vai pârvietoti uz Starpliktuvi un lietotâja saskarnç parâdîsies jauna ikona <b>Skatît starpliktuvi</b>. No Starpliktuves Jums ir iespçja ielîmçt atbilstoðos katalogus jebkurâ katalogu pârvaldnieka vietâ. Pârejiet uz vietu direktoriju kokâ, kurâ nepiecieðams novietot katalogu(s), atveriet Starpliktuvi, atzîmçjiet nepiecieðamo(s) katalogu(s) rûtiòâ(s) pa kreisi no kataloga nosaukuma un uzklikðíiniet uz <b>Ielîmçt</b>. Pçc ðîs darbîbas katalogi tiks ielîmçti aktuâlajâ katalogâ un Starpliktuve – attîrîta.   
+    
+    </para>
+    <heading>Darbs ar starpliktuvi</heading>
+    <para>
+Ja Jûs kopçjat vai izgreiþat failu vai katalogu, tas tiek novietots starpliktuvç, kuras saturu varat apskatît, uzklikðíinot ikonai <b>Starpliktuve</b>, kas atrodas virs failu un katalogu saraksta pa labio no <b>Atsvaidzinât skatu</b> ikonas.
+Ðî ikona parâdâs lietotâja saskarnç tikai tad, kad starpliktuvç atrodas kâds objekts.Pçc tam, kad kâds fails vai katalogs ir nokopçts vai izgriezts, blakus tâ tâ nosaukumam Failu pârvaldnieka galvenajâ logâ vairs nebûs izvçles rûtiòa.
+</para>
+<para>
+Kad atvçrsiet Starpliktuves pârlûku, redzçsiet uz starpliktuvi kopçto vai izgriezto objektu sarakstu, kur katram objektam blakus ir attçlota iepriekð veikto darbîbu atainojoða piktogramma. No ðejienes Jûs varat ielîmçt objektus aktuâlajâ katalogâ, kas parâdîts virs objektu saraksta – atzîmçjiet ielîmçjamos failus un nospiediet pogu <b>Ielîmçt</b>, objekti tiks ievietoti aktuâlajâ katalogâ un notîrîti no starpliktuves. Pçc objektu ielîmçðanas Failu pârvaldnieks atgriezîsies aktuâlajâ katalogâ. Ja vçlaties vienkârði notîrît kâdu objektu no starpliktuves, atzîmçjiet to un nospiediet pogu <b>Notîrît</b>. Objekts(-i) tiks notîrîti no starpliktuves un Failu  pârvaldnieks atgriezîsies aktuâlajâ katalogâ.
+</para>
+<para>
+Piezîme: ja objekts tika izgriezts uz starpliktuvi, pçc notîrîðanas no starpliktuves objekts paliek savâ iepriekðçjâ vietâ.
+    </para>
+</entry>
+
+<entry id="file-upload">
+    <title>Failu pârvaldnieks: Augðupielâdçðana</title>
+    <heading>Failu augðupielâdçðana</heading>
+    <para>
+Piezîme: failu augðupielâdçðana darbojas tikai gadîjumâ, ja ir pareizi konfigurçtas VFS palîgmoduïa pieejas tiesîbas. To var izdarît tikai sistçmas administrators.
+    </para>
+    <para>
+     Lai augðupielâdçtu failus, pârejiet uz vietu katalogu kokâ, kurâ vçlaties tos novietot. Tas bûs aktuâlais katalogs. Kad esat atvçruði vajadzîgo katalogu, Failu pârvaldnieka loga apakðâ nospiediet pogu <b>Browse...</b> (pârlûkot). Tas atvçrs <b>File Upload</b> logu, kurâ Jums jâsameklç augðupielâdçjamais fails, jâuzklikðíina tâ nosaukumam un <b>OK</b> pogai.
+</para>
+<para>
+Vienlaikus ir iespçjams augðupielâdçt vairâkus failus – Failu pârvaldnieks automâtiski pievienos jaunu <b>Browse...</b> pogu pçc katra faila izvçles. Kad ir sameklçti visi faili, nospiediet pogu <b>Augðupielâdçt failu(s)</b> un tie tiks augðupielâdçti aktuâlajâ Failu pârvaldnieka katalogâ.
+</para>
+</entry>
+
+<entry id="sorting">
+    <title>Ðíiroðana</title>
+    <heading>Ðíiroðana</heading>
+    <para>
+    Apskatot failu vai katalogu sarakstus, Jûs varat to sakârtot pçc jebkuras slejas. Lai to izdarîtu, uzklikðíiniet atbilstoðâs slejas virsrakstam un saraksts tiks atsvaidzinâts, sakârtojot objektus atbilstoði Jûsu izvçlçtajai slejai. Lai mainîtu kârtoðanas secîbu no augoðas uz dilstoðu un otrâdi, uzklikðíiniet slejas virsrakstam blakus esoðajai bultiòai.
+    </para>
+</entry>
+</help>
\ No newline at end of file
diff --git a/locale/nl_NL/LC_MESSAGES/gollem.mo b/locale/nl_NL/LC_MESSAGES/gollem.mo
index 3f67a62..be7d385 100644
Binary files a/locale/nl_NL/LC_MESSAGES/gollem.mo and b/locale/nl_NL/LC_MESSAGES/gollem.mo differ
diff --git a/locale/nn_NO/LC_MESSAGES/gollem.mo b/locale/nn_NO/LC_MESSAGES/gollem.mo
index 813103e..83ae8e4 100644
Binary files a/locale/nn_NO/LC_MESSAGES/gollem.mo and b/locale/nn_NO/LC_MESSAGES/gollem.mo differ
diff --git a/locale/pl_PL/LC_MESSAGES/gollem.mo b/locale/pl_PL/LC_MESSAGES/gollem.mo
index 0c8547d..4380349 100644
Binary files a/locale/pl_PL/LC_MESSAGES/gollem.mo and b/locale/pl_PL/LC_MESSAGES/gollem.mo differ
diff --git a/locale/pt_BR/LC_MESSAGES/gollem.mo b/locale/pt_BR/LC_MESSAGES/gollem.mo
index 7dad167..5b20c7a 100644
Binary files a/locale/pt_BR/LC_MESSAGES/gollem.mo and b/locale/pt_BR/LC_MESSAGES/gollem.mo differ
diff --git a/locale/ro_RO/LC_MESSAGES/gollem.mo b/locale/ro_RO/LC_MESSAGES/gollem.mo
index 958c45e..c502b82 100644
Binary files a/locale/ro_RO/LC_MESSAGES/gollem.mo and b/locale/ro_RO/LC_MESSAGES/gollem.mo differ
diff --git a/locale/ru_RU/LC_MESSAGES/gollem.mo b/locale/ru_RU/LC_MESSAGES/gollem.mo
index 68388d3..59c42ff 100644
Binary files a/locale/ru_RU/LC_MESSAGES/gollem.mo and b/locale/ru_RU/LC_MESSAGES/gollem.mo differ
diff --git a/locale/sk_SK/LC_MESSAGES/gollem.mo b/locale/sk_SK/LC_MESSAGES/gollem.mo
new file mode 100644
index 0000000..c8e2fa8
Binary files /dev/null and b/locale/sk_SK/LC_MESSAGES/gollem.mo differ
diff --git a/locale/sl_SI/LC_MESSAGES/gollem.mo b/locale/sl_SI/LC_MESSAGES/gollem.mo
index d59bfec..cc087da 100644
Binary files a/locale/sl_SI/LC_MESSAGES/gollem.mo and b/locale/sl_SI/LC_MESSAGES/gollem.mo differ
diff --git a/locale/sv_SE/LC_MESSAGES/gollem.mo b/locale/sv_SE/LC_MESSAGES/gollem.mo
index 630deb9..8bd07ef 100644
Binary files a/locale/sv_SE/LC_MESSAGES/gollem.mo and b/locale/sv_SE/LC_MESSAGES/gollem.mo differ
diff --git a/locale/tr_TR/LC_MESSAGES/gollem.mo b/locale/tr_TR/LC_MESSAGES/gollem.mo
new file mode 100644
index 0000000..e803a50
Binary files /dev/null and b/locale/tr_TR/LC_MESSAGES/gollem.mo differ
diff --git a/locale/uk_UA/LC_MESSAGES/gollem.mo b/locale/uk_UA/LC_MESSAGES/gollem.mo
new file mode 100644
index 0000000..eb11a14
Binary files /dev/null and b/locale/uk_UA/LC_MESSAGES/gollem.mo differ
diff --git a/locale/zh_TW/LC_MESSAGES/gollem.mo b/locale/zh_TW/LC_MESSAGES/gollem.mo
index 94b64e7..efd7700 100644
Binary files a/locale/zh_TW/LC_MESSAGES/gollem.mo and b/locale/zh_TW/LC_MESSAGES/gollem.mo differ
diff --git a/locale/zh_TW/help.xml b/locale/zh_TW/help.xml
index b5063ec..4dbcda7 100644
--- a/locale/zh_TW/help.xml
+++ b/locale/zh_TW/help.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="Big5"?>
-<!-- $Horde: gollem/locale/zh_TW/help.xml,v 1.3 2005/08/03 11:58:56 jan Exp $ -->
+<!-- $Horde: gollem/locale/zh_TW/help.xml,v 1.3.2.1 2008/10/09 20:54:55 jan Exp $ -->
 <help>
   <entry id="file-actions" md5="a422465ce502865cd4625fbbb8d9a4dc" state="changed">
     <title>ÀÉ®×Á`ºÞ: §@¥Î¤è¦¡</title>
@@ -81,6 +81,48 @@
     from the clipboard, simply check the items and click clear.  These items will then be removed from the clipboard and you will be returned 
     to the current directory.  
     </para>
+</entry>--><!-- English entry:
+<entry id="file-actions">
+    <title>File Manager: Actions</title>
+    <heading>Creating Folders</heading>
+    <para>
+    To create a folder in the current directory, simply choose Create Folder from the Actions drop down box.  
+    </para>
+    <heading>Delete, cut, copy and paste files</heading>
+    <para>
+    In order to delete, cut or copy a file or files, you need to select at least one file.
+    After you select one or more files using the checkboxes to the left of the item, select either Cut Items, Copy Items or 
+    Delete Items from the Actions drop down box.  If you selected Cut Items or Copy Items, you now have the option to 
+    paste those files elsewhere in the File Manager.  Navigate to the location that you wish to paste the items, then select 
+    Paste Items from the Actions drop down box.  The items will now be either moved (Cut Items) or copied (Copy Items) to 
+    the location that you chose.
+    </para>
+    <heading>Delete, cut, copy and paste directories</heading>
+    <para>	
+    By default, you can only delete directories that are empty, however you can enable the deletion of non-empty directories 
+    (recursive delete).  If you try to delete a non-empty directory without enabling this feature, deletion will fail with 
+    an error.  To enable the deleting non-empty directories, click on Options, Settings and choose Yes from the drop down box 
+    for the Delete Folders Recursively option.  This will enable the recursive delete option.
+    
+    In order to delete, cut or copy a directory or directories, you need to select at least one directory.
+    After you select one or more directories using the checkboxes to the left of the item, select either Cut Items, Copy Items 
+    or Delete Items from the Actions drop down box.  If you selected Cut Items or Copy Items, you now have the option to 
+    paste those directories elsewhere in the File Manager.  Navigate to the location that you wish to paste the items, then 
+    select Paste Items from the Actions drop down box.  The items will now either be moved (Cut Items) or copied (Copy Items)
+    to the location that you chose.
+    </para>
+    <heading>Working with the Clipboard</heading>
+    <para>
+    Once you copy or cut a file or directory, it is placed in the clipboard.  You can view the contents of the clipboard by clicking
+    on the clipboard icon, which is located above the directory/folder listing and to the right of the refresh icon.  This icon is not 
+    present unless there are items in the clipboard.  Items that are cut or copied will not have a checkbox to the left of them, which 
+    means they are in the clipboard.  Once you click on the clipboard viewer, you will see a list of items that you have copied or cut.
+    From the clipboard viewer, you can paste these items to the current directory, which is displayed above the list of items.
+    Simply check the items that you want to paste, then click paste.  These items will be pasted into the current directory and be removed
+    from the clipboard.  You will be returned to the current directory after the paste is complete.  If you would like to remove an item 
+    from the clipboard, simply check the items and click clear.  These items will then be removed from the clipboard and you will be returned 
+    to the current directory.  
+    </para>
 </entry>--></entry>
   <entry id="file-upload" md5="90de3164e835816348ab7659f7bf28a7" state="changed">
     <title>ÀÉ®×Á`ºÞ: ¤W¶ÇÀÉ®×</title>
@@ -113,6 +155,18 @@
     Browse button after each file you select.  Once you have selected all of the files that you wish to upload, click the 
     Upload File(s) button and the file or files that you selected will be uploaded to your current directory on the File Manager.
 </para>
+</entry>--><!-- English entry:
+<entry id="file-upload">
+    <title>File Manager: Uploading</title>
+    <heading>Uploading Files</heading>
+    <para>
+    To upload a file or files, navigate to the directory on the File Manager that you wish to upload the files to.  This is 
+    known as your current directory.  Once you are in the proper directory on the File Manager, click on the Browse button.
+    This will display a File Upload window.  Once this window is open, navigate to the file which you wish to upload, select 
+    it and click OK.  You can upload multiple files at once.  The File Manager will automatically add another 
+    Browse button after each file you select.  Once you have selected all of the files that you wish to upload, click the 
+    Upload File(s) button and the file or files that you selected will be uploaded to your current directory on the File Manager.
+</para>
 </entry>--></entry>
   <entry id="sorting" md5="7bbea5e84fddaffa02edae9e705f7fb1" state="changed">
     <title>±Æ¦C¶µ¥Ø</title>
@@ -138,5 +192,14 @@
     column heading that you wish to sort by, and the list will refreshed, sorted by the column you selected.  To switch 
     columns between ascending and descending order, click on the arrow icon in the column heading.
     </para>
+</entry>--><!-- English entry:
+<entry id="sorting">
+    <title>Sorting Entries</title>
+    <heading>Sorting Entries</heading>
+    <para>
+    When viewing a list of files or directories, you can sort them by any column.  To do this, click on the appropriate 
+    column heading that you wish to sort by, and the list will refreshed, sorted by the column you selected.  To switch 
+    columns between ascending and descending order, click on the arrow icon in the column heading.
+    </para>
 </entry>--></entry>
 </help>
diff --git a/login.php b/login.php
index 2b8027c..253689c 100644
--- a/login.php
+++ b/login.php
@@ -2,20 +2,22 @@
 /**
  * Login screen for Gollem.
  *
- * $Horde: gollem/login.php,v 1.94.2.13 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/login.php,v 1.94.2.17 2009/03/19 14:43:18 jan Exp $
  *
- * Copyright 1999-2007 Charles J. Hagenbuch <chuck at horde.org>
- * Copyright 1999-2007 Max Kalika <max at horde.org>
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Max Kalika <max at horde.org>
+ * @author Chuck Hagenbuch <chuck at horde.org>
  */
 
-function _notificationOutput(&$template)
+function _notificationOutput(&$t)
 {
     ob_start();
     $GLOBALS['notification']->notify(array('listeners' => 'status'));
-    $template->set('notification_output', ob_get_contents());
+    $t->set('notification_output', ob_get_contents());
     ob_end_clean();
 }
 
@@ -133,27 +135,30 @@ if ($gollem_auth) {
     Secret::setKey('auth');
 }
 /* Prepare the login template. */
-require_once 'Horde/Template.php';
-$template = &new Horde_Template();
-$template->setOption('gettext', true);
+$t = new Gollem_Template();
+$t->setOption('gettext', true);
 
 require_once 'Horde/Menu.php';
-$menu = &new Menu(HORDE_MENU_MASK_NONE);
-$template->set('menu', $menu->render(), true);
-$template->set('title', sprintf(_("%s Login"), $registry->get('name')));
+$menu = new Menu(HORDE_MENU_MASK_NONE);
+$t->set('menu', $menu->render(), true);
+$t->set('title', sprintf(_("%s Login"), $registry->get('name')));
 
 if (!$backend_key) {
     $backend_key = Gollem::getPreferredBackend();
     /* If there is no backend key defined, there is no available backends for
      * the current user. */
-    if (is_null($backend_key)) {
-        $reason = _("There are no backends available for the current user.");
+    if ($backend_key === null) {
+        $notification->push(_("There are no backends available for the current user."), 'horde.error');
         require GOLLEM_TEMPLATES . '/common-header.inc';
-        _notificationOutput($template);
-        $template->set('allowlogin', false, true);
-        echo $template->fetch(GOLLEM_TEMPLATES . '/login/login.html');
-        if (@is_readable(GOLLEM_BASE . '/config/motd.php')) {
-            require GOLLEM_BASE . '/config/motd.php';
+        _notificationOutput($t);
+        $t->set('allowlogin', false, true);
+        echo $t->fetch(GOLLEM_TEMPLATES . '/login/login.html');
+        if (is_callable(array('Horde', 'loadConfiguration'))) {
+            Horde::loadConfiguration('motd.php', null, null, true);
+        } else {
+            if (is_readable(GOLLEM_BASE . '/config/motd.php')) {
+                require GOLLEM_BASE . '/config/motd.php';
+            }
         }
         require $registry->get('templates', 'horde') . '/common-footer.inc';
         exit;
@@ -162,11 +167,12 @@ if (!$backend_key) {
 
 $login_vfs = array();
 foreach ($GLOBALS['gollem_backends'] as $key => $curBackend) {
-    $login_vfs[$key] = &VFS::singleton($curBackend['driver'], array_merge($curBackend['params'], array('user' => Auth::getAuth())));
+    $login_vfs[$key] = &Gollem::getVFSOb($key, array_merge($curBackend['params'], array('user' => Auth::getAuth())));
     if (is_a($login_vfs[$key], 'PEAR_Error')) {
         Horde::fatal($login_vfs[$key]);
     }
 }
+// Make the VFS global
 $GLOBALS['gollem_vfs'] = $login_vfs[$backend_key];
 
 /* If we only have one backend, and it doesn't require authentication, skip
@@ -180,13 +186,16 @@ if (!$logout_reason && !$autologin_fail) {
             $redirect_params['autologin'] = 1;
         }
     } elseif (Util::getFormData('change_backend') &&
-              empty($GLOBALS['gollem_backends'][$backend_key]['loginparams'])) {
+              Gollem::canAutoLogin($backend_key, true)) {
         $redirect_params['autologin'] = 1;
     }
 }
 
 if (!empty($redirect_params)) {
     $redirect_params += array('actionID' => 'login', 'backend_key' => $backend_key);
+    if ($url_param) {
+        $redirect_params['url'] = $url_param;
+    }
     $url = Util::addParameter(Horde::applicationUrl('redirect.php', true), $redirect_params, null, false);
     header('Location: ' . $url);
     exit;
@@ -200,10 +209,9 @@ if ($logout_reason && $gollem_auth && $conf['menu']['always']) {
     $notification->push('setFocus()', 'javascript');
 }
 
-$reason = $auth->getLogoutReasonString();
-
-/* Add some javascript. */
-Horde::addScriptFile('enter_key_trap.js', 'horde', true);
+if ($reason = $auth->getLogoutReasonString()) {
+    $notification->push(str_replace('<br />', ' ', $reason), 'horde.message');
+}
 
 /* Do we need to do IE version detection? */
 if (!Auth::getAuth() &&
@@ -213,31 +221,30 @@ if (!Auth::getAuth() &&
 }
 
 $choose_language = ($gollem_auth && !$prefs->isLocked('language'));
+$lang_url = null;
 if ($choose_language) {
     $lang_url = (!empty($url_param)) ? urlencode($url_param) : null;
 }
 
-require GOLLEM_TEMPLATES . '/common-header.inc';
-require_once GOLLEM_TEMPLATES . '/login/javascript.inc';
-
 $tabindex = 0;
-$template->set('allowlogin', true, true);
-
-$template->set('action', Horde::url('redirect.php', false, -1, true));
-$template->set('gollem_auth', $gollem_auth, true);
-$template->set('form_input', Util::formInput());
-$template->set('actionid', $actionID);
-$template->set('load_frameset', ($gollem_auth) ? 1 : 0);
-$template->set('url', htmlspecialchars($url_param));
-$template->set('autologin', ($autologin || Gollem::canAutoLogin($backend_key, true)) ? 1 : 0);
-$template->set('clientcaps', !empty($ie_clientcaps), true);
-$template->set('backend_key', ($conf['backend']['backend_list'] != 'shown') ? $backend_key : null, true);
-
-_notificationOutput($template);
-
-$template->set('backend_shown', ($conf['backend']['backend_list'] == 'shown'), true);
-if ($template->get('backend_shown')) {
-    $template->set('shown_tabindex', ++$tabindex);
+$t->set('allowlogin', true, true);
+
+$t->set('action', Horde::url('redirect.php', false, -1, true));
+$t->set('gollem_auth', $gollem_auth, true);
+$t->set('form_input', Util::formInput());
+$t->set('actionid', $actionID);
+$t->set('load_frameset', intval($gollem_auth));
+$t->set('url', htmlspecialchars($url_param));
+$t->set('autologin', ($autologin || Gollem::canAutoLogin($backend_key, true)) ? 1 : 0);
+$t->set('clientcaps', !empty($ie_clientcaps), true);
+$t->set('anchor_string', htmlspecialchars(Util::getFormData('anchor_string')));
+$t->set('backend_key', ($conf['backend']['backend_list'] != 'shown') ? $backend_key : null, true);
+
+_notificationOutput($t);
+
+$t->set('backend_shown', ($conf['backend']['backend_list'] == 'shown'), true);
+if ($t->get('backend_shown')) {
+    $t->set('shown_tabindex', ++$tabindex);
     $shown_array = array();
     foreach ($GLOBALS['gollem_backends'] as $key => $curBackend) {
         $shown_array[] = array(
@@ -246,12 +253,12 @@ if ($template->get('backend_shown')) {
             'val' => $key
         );
     }
-    $template->set('shown_array', $shown_array, true);
+    $t->set('shown_array', $shown_array, true);
 }
 
-$template->set('backend_hidden', ($conf['backend']['backend_list'] == 'hidden'), true);
-if ($template->get('backend_hidden')) {
-    $template->set('hidden_text', sprintf(_("Connect to: %s"), $GLOBALS['gollem_backends'][$backend_key]['name']));
+$t->set('backend_hidden', ($conf['backend']['backend_list'] == 'hidden'), true);
+if ($t->get('backend_hidden')) {
+    $t->set('hidden_text', sprintf(_("Connect to: %s"), $GLOBALS['gollem_backends'][$backend_key]['name']));
 }
 
 $loginparams = array();
@@ -265,7 +272,7 @@ if (!empty($GLOBALS['gollem_backends'][$backend_key]['loginparams'])) {
         );
     }
 }
-$template->set('loginparams', $loginparams);
+$t->set('loginparams', $loginparams);
 
 $log_creds = array();
 require GOLLEM_BASE . '/config/credentials.php';
@@ -282,11 +289,11 @@ foreach ($login_vfs[$backend_key]->getRequiredCredentials() as $credential) {
         );
     }
 }
-$template->set('log_creds', $log_creds);
+$t->set('log_creds', $log_creds);
 
-$template->set('choose_language', $choose_language, true);
+$t->set('choose_language', $choose_language, true);
 if ($choose_language) {
-    $template->set('langs_tabindex', ++$tabindex);
+    $t->set('langs_tabindex', ++$tabindex);
     $_SESSION['horde_language'] = NLS::select();
     $langs = array();
     foreach ($nls['languages'] as $key => $val) {
@@ -296,15 +303,31 @@ if ($choose_language) {
             'name' => $val
         );
     }
-    $template->set('langs', $langs, true);
+    $t->set('langs', $langs, true);
 }
 
-$template->set('login_tabindex', ++$tabindex);
-$template->set('login', _("Login"));
+$t->set('login_tabindex', ++$tabindex);
+$t->set('login', _("Login"));
+
+$js_code = array(
+    'var ie_clientcaps = ' . intval($t->get('clientcaps')),
+    'var gollem_auth = ' . intval($gollem_auth),
+    'var lang_url = ' . (is_null($lang_url) ? 'null' : '\'' . $lang_url . '\''),
+    'var nomenu = ' . intval(empty($conf['menu']['always'])),
+    'var reload_url = \'' . Util::addParameter(Horde::selfUrl(false, true, true), array('backend_key' => null), null, false) . '\'',
+);
 
-echo $template->fetch(GOLLEM_TEMPLATES . '/login/login.html');
+Horde::addScriptFile('prototype.js', 'gollem', true);
+Horde::addScriptFile('login.js', 'gollem', true);
+require GOLLEM_TEMPLATES . '/common-header.inc';
+Gollem::addInlineScript(implode(';', $js_code));
+echo $t->fetch(GOLLEM_TEMPLATES . '/login/login.html');
 
-if (@is_readable(GOLLEM_BASE . '/config/motd.php')) {
-    require GOLLEM_BASE . '/config/motd.php';
+if (is_callable(array('Horde', 'loadConfiguration'))) {
+    Horde::loadConfiguration('motd.php', null, null, true);
+} else {
+    if (is_readable(GOLLEM_BASE . '/config/motd.php')) {
+        require GOLLEM_BASE . '/config/motd.php';
+    }
 }
 require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/manager.php b/manager.php
index 5bf4b45..b93674f 100644
--- a/manager.php
+++ b/manager.php
@@ -1,23 +1,29 @@
 <?php
 /**
- * $Horde: gollem/manager.php,v 1.146.2.19 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/manager.php,v 1.146.2.23 2009/03/19 14:18:21 jan Exp $
  *
- * Copyright 1999-2007 Charles J. Hagenbuch <chuck at horde.org>
- * Copyright 1999-2007 Max Kalika <max at horde.org>
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did notcan receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Max Kalika <max at horde.org>
+ * @author Chuck Hagenbuch <chuck at horde.org>
  */
 
 @define('GOLLEM_BASE', dirname(__FILE__));
 require_once GOLLEM_BASE . '/lib/base.php';
-require_once 'Horde/MIME/Part.php';
-require_once 'Horde/Template.php';
+require_once 'Horde/Help.php';
 
 $actionID = Util::getFormData('actionID');
 $backkey = $_SESSION['gollem']['backend_key'];
 $old_dir = Gollem::getDir();
 
+/* Get permissions. */
+$delete_perms = Gollem::checkPermissions('backend', PERMS_DELETE);
+$edit_perms = Gollem::checkPermissions('backend', PERMS_EDIT);
+$read_perms = Gollem::checkPermissions('backend', PERMS_READ);
+
 /* Set directory. */
 if (is_a($result = Gollem::changeDir(), 'PEAR_Error')) {
     $notification->push($result);
@@ -26,7 +32,7 @@ if (is_a($result = Gollem::changeDir(), 'PEAR_Error')) {
 /* Run through the action handlers. */
 switch ($actionID) {
 case 'create_folder':
-    if (Gollem::checkPermissions('backend', PERMS_EDIT)) {
+    if ($edit_perms) {
         if ($new_folder = Util::getPost('new_folder')) {
             $result = Gollem::createFolder($old_dir, $new_folder);
             if (is_a($result, 'PEAR_Error')) {
@@ -39,12 +45,11 @@ case 'create_folder':
     break;
 
 case 'rename_items':
-    if (Gollem::checkPermissions('backend', PERMS_EDIT)) {
+    if ($edit_perms) {
         $new = explode('|', Util::getPost('new_names'));
         $old = explode('|', Util::getPost('old_names'));
         if (!empty($new) && !empty($old) && (count($new) == count($old))) {
-            $iMax = count($new);
-            for ($i = 0; $i < $iMax; $i++) {
+            for ($i = 0, $iMax = count($new); $i < $iMax; ++$i) {
                 $result = Gollem::renameItem($old_dir, $old[$i], $old_dir, $new[$i]);
                 if (is_a($result, 'PEAR_Error')) {
                     $notification->push($result->getMessage(), 'horde.error');
@@ -52,6 +57,7 @@ case 'rename_items':
                     $notification->push(sprintf(_("\"%s\" renamed to \"%s\""), $old[$i], $new[$i]), 'horde.success');
                 }
             }
+            Gollem::expireCache($old_dir);
         } else {
             $notification->push(_("Incorrect number of items."), 'horde.error');
         }
@@ -60,24 +66,35 @@ case 'rename_items':
 
 case 'chmod_modify':
 case 'delete_items':
-    if (Gollem::checkPermissions('backend', PERMS_DELETE)) {
+    if ($delete_perms) {
         $items = Util::getPost('items');
         if (is_array($items) && count($items)) {
             $chmod = Util::getPost('chmod');
             foreach ($items as $item) {
                 if (($actionID == 'chmod_modify') && $chmod) {
                     if (!is_a(Gollem::changePermissions(Gollem::getDir(), $item, $chmod), 'PEAR_Error')) {
+                        Gollem::expireCache($old_dir);
                         $notification->push(_("Chmod done: ") . $item, 'horde.success');
                     } else {
-                        $notification->push(sprintf(_("Cannot chmod %s"), $item), 'horde.error');
+                        $notification->push(sprintf(_("Cannot chmod %s: %s"), $item, $result->getMessage()), 'horde.error');
                     }
                 } elseif ($actionID == 'delete_items') {
-                    if (!is_a($result = Gollem::deleteFile($old_dir, $item), 'PEAR_Error')) {
-                        $notification->push(_("File deleted: ") . $item, 'horde.success');
-                    } elseif (!is_a($result = Gollem::deleteFolder($old_dir, $item), 'PEAR_Error')) {
-                        $notification->push(_("Folder removed: ") . $item, 'horde.success');
+                    if ($GLOBALS['gollem_vfs']->isFolder($old_dir, $item)) {
+                        $result = Gollem::deleteFolder($old_dir, $item);
+                        if (is_a($result, 'PEAR_Error')) {
+                            $notification->push(sprintf(_("Unable to delete folder %s: %s"), $item, $result->getMessage()), 'horde.error');
+                        } else {
+                            Gollem::expireCache($old_dir);
+                            $notification->push(_("Folder removed: ") . $item, 'horde.success');
+                        }
                     } else {
-                        $notification->push(sprintf(_("Cannot delete \"%s\": %s"), $item, $result->getMessage()), 'horde.error');
+                        $result = Gollem::deleteFile($old_dir, $item);
+                        if (is_a($result, 'PEAR_Error')) {
+                            $notification->push(sprintf(_("Unable to delete file %s: %s"), $item, $result->getMessage()), 'horde.error');
+                        } else {
+                            Gollem::expireCache($old_dir);
+                            $notification->push(_("File deleted: ") . $item, 'horde.success');
+                        }
                     }
                 }
             }
@@ -86,19 +103,20 @@ case 'delete_items':
     break;
 
 case 'upload_file':
-    if (Gollem::checkPermissions('backend', PERMS_EDIT)) {
-        for ($i = 1; $i <= count($_FILES); $i++) {
+    if ($edit_perms) {
+        for ($i = 1, $l = count($_FILES); $i <= $l; ++$i) {
             $val = 'file_upload_' . $i;
-            if (isset($_FILES[$val]) &&
-                ($_FILES[$val]['error'] != 4)) {
+            if (isset($_FILES[$val]) && ($_FILES[$val]['error'] != 4)) {
                 $res = Browser::wasFileUploaded($val);
                 if (!is_a($res, 'PEAR_Error')) {
-                    $res = Gollem::writeFile($old_dir, $_FILES[$val]['name'], $_FILES[$val]['tmp_name']);
+                    $filename = Util::dispelMagicQuotes($_FILES[$val]['name']);
+                    $res = Gollem::writeFile($old_dir, $filename, $_FILES[$val]['tmp_name']);
                 }
                 if (is_a($res, 'PEAR_Error')) {
                     $notification->push($res, 'horde.error');
                 } else {
-                    $notification->push(sprintf(_("File received: %s"), $_FILES[$val]['name']), 'horde.success');
+                    Gollem::expireCache($old_dir);
+                    $notification->push(sprintf(_("File received: %s"), $filename), 'horde.success');
                 }
             }
         }
@@ -107,8 +125,7 @@ case 'upload_file':
 
 case 'copy_items':
 case 'cut_items':
-    if (Gollem::checkPermissions('backend', PERMS_EDIT) &&
-        !empty($GLOBALS['gollem_be']['clipboard'])) {
+    if ($edit_perms && !empty($GLOBALS['gollem_be']['clipboard'])) {
         $action = ($actionID == 'copy_items') ? 'copy' : 'cut';
         $items = Util::getPost('items');
 
@@ -140,8 +157,7 @@ case 'cut_items':
 
 case 'clear_items':
 case 'paste_items':
-    if (Gollem::checkPermissions('backend', PERMS_EDIT) &&
-        !empty($GLOBALS['gollem_be']['clipboard'])) {
+    if ($edit_perms && !empty($GLOBALS['gollem_be']['clipboard'])) {
         $items = Util::getPost('items');
         if (is_array($items) && count($items)) {
             foreach ($items as $val) {
@@ -156,6 +172,10 @@ case 'paste_items':
                         if (is_a($res, 'PEAR_Error')) {
                             $notification->push(sprintf(_("Cannot paste \"%s\" (file cleared from clipboard): %s"), $file['name'], $res->getMessage()), 'horde.error');
                         } else {
+                            Gollem::expireCache($old_dir);
+                            if ($file['action'] == 'cut') {
+                                Gollem::expireCache($file['path']);
+                            }
                             $notification->push(sprintf(_("%s was successfully pasted."), $file['name'], $old_dir), 'horde.success');
                         }
                     }
@@ -200,24 +220,41 @@ if (is_a($list, 'PEAR_Error')) {
         $notification->push(sprintf(_("Permission denied to folder \"%s\": %s"), $currdir, $list->getMessage()), 'horde.error');
 
         $loc = strrpos($currdir, '/');
-        if ($loc !== false) {
-            Gollem::setDir(substr($currdir, 0, $loc));
-        } else {
-            Gollem::setDir(Gollem::getHome());
-        }
+        Gollem::setDir(($loc !== false) ? substr($currdir, 0, $loc) : Gollem::getHome());
         $currdir = Gollem::getDir();
         $list = Gollem::listFolder($currdir);
     }
 }
 
+$numitem = count($list);
+$title = $GLOBALS['gollem_be']['label'];
+
 /* Image links. */
-$download_img = Horde::img('download.png', _("Download"), null, $registry->getImageDir('horde'));
-$folder_img = Horde::img('manager/folder.png', _("folder"));
-$symlink_img = Horde::img('manager/symlink.png', _("symlink"));
+$image_dir = $registry->getImageDir('horde');
+$edit_img = Horde::img('edit.png', _("Edit"), null, $image_dir);
+$download_img = Horde::img('download.png', _("Download"), null, $image_dir);
+$folder_img = Horde::img('folder.png', _("folder"));
+$symlink_img = Horde::img('folder_symlink.png', _("symlink"));
+
+/* Init some form vars. */
+$page = Util::getFormData('page', 0);
+$filter = Util::getFormData('filter', '');
+if (isset($_SESSION['gollem']['filter']) &&
+    $_SESSION['gollem']['filter'] != $filter) {
+    $page = 0;
+}
+$_SESSION['gollem']['filter'] = $filter;
 
 /* Commonly used URLs. */
-$manager_url = Horde::applicationUrl('manager.php');
 $view_url = Horde::applicationUrl('view.php');
+$edit_url = Horde::applicationUrl('edit.php');
+$manager_url = Horde::applicationUrl('manager.php');
+
+$refresh_params = array('page' => $page);
+if ($filter) {
+    $refresh_params['filter'] = $filter;
+}
+$refresh_url = Util::addParameter($manager_url, $refresh_params);
 
 /* Get the list of copy/cut files in this directory. */
 $clipboard_files = array();
@@ -229,22 +266,12 @@ if (!empty($GLOBALS['gollem_be']['clipboard'])) {
     }
 }
 
-$title = $GLOBALS['gollem_be']['label'];
-Horde::addScriptFile('stripe.js', 'gollem', true);
-require GOLLEM_TEMPLATES . '/common-header.inc';
-Gollem::menu();
-Gollem::status();
-if ($browser->hasFeature('javascript')) {
-    require_once GOLLEM_TEMPLATES . '/manager/javascript.inc';
-    require_once $registry->get('templates', 'horde') . '/contents/open_view_win.js';
-}
-
 /* Read the columns to display from the preferences. */
 $sources = Gollem::displayColumns();
 $columns = isset($sources[$backkey]) ? $sources[$backkey] : $GLOBALS['gollem_be']['attributes'];
 
 /* Prepare the template. */
-$template = &new Horde_Template();
+$template = new Gollem_Template();
 $template->setOption('gettext', true);
 
 $attrib = $GLOBALS['gollem_vfs']->getModifiablePermissions();
@@ -262,15 +289,13 @@ foreach ($all_columns as $column) {
 $template->set('save', _("Save"));
 $template->set('cancel', _("Cancel"));
 $template->set('ok', _("OK"));
-$template->set('action', $manager_url);
+$template->set('action', $refresh_url);
 $template->set('forminput', Util::formInput());
 $template->set('dir', $currdir);
-$template->set('itemcount', (count($list) == 1) ? _("1 item") : sprintf(_("%d items"), count($list)));
 $template->set('navlink', Gollem::directoryNavLink($currdir, $manager_url));
-$template->set('refresh', Horde::link(Horde::selfUrl(), sprintf("%s %s", _("Refresh"), $GLOBALS['gollem_be']['label'])) . Horde::img('reload.png', sprintf("%s %s", _("Refresh"), htmlspecialchars($GLOBALS['gollem_be']['label'])), null, $registry->getImageDir('horde')) . '</a>');
+$template->set('refresh', Horde::link($refresh_url, sprintf("%s %s", _("Refresh"), $GLOBALS['gollem_be']['label']), '', '', '', '', '', array('id' => 'refreshimg')) . Horde::img('reload.png', sprintf("%s %s", _("Refresh"), htmlspecialchars($GLOBALS['gollem_be']['label'])), null, $image_dir) . '</a>');
 
-$edit_permissions = Gollem::checkPermissions('backend', PERMS_EDIT);
-$template->set('hasclipboard', !$edit_permissions || !empty($GLOBALS['gollem_be']['clipboard']), true);
+$template->set('hasclipboard', !$edit_perms || !empty($GLOBALS['gollem_be']['clipboard']), true);
 if (!$template->get('hasclipboard') ||
     empty($_SESSION['gollem']['clipboard'])) {
     $template->set('clipboard', null);
@@ -278,50 +303,87 @@ if (!$template->get('hasclipboard') ||
     $template->set('clipboard', Horde::link(Util::addParameter(Horde::applicationUrl('clipboard.php'), 'dir', $currdir), _("View Clipboard")) . Horde::img('clipboard.png', _("View Clipboard")) . '</a>');
 }
 
-if ($edit_permissions) {
+if ($edit_perms) {
     $template->set('perms_edit', true, true);
     $template->set('upload_file', _("Upload File(s)"));
     $template->set('upload_help', Help::link('gollem', 'file-upload'));
     $template->set('perms_chmod', in_array('permission', $columns), true);
+    $template->set('create_folder', Horde::link('#', _("Create Folder"), '', '', '', '', '', array('id' => 'createfolder')) . Horde::img('folder_create.png', _("Create Folder")) . '</a>');
 } else {
     $template->set('perms_edit', false, true);
     $template->set('perms_chmod', false, true);
 }
 
-if (count($list)) {
+if ($read_perms) {
+    $template->set('change_folder', Horde::link('#', _("Change Folder"), '', '', '', '', '', array('id' => 'changefolder')) . Horde::img('folder_goto.png', _("Change Folder")) . '</a>');
+}
+
+if ($numitem) {
     $template->set('list_count', true, true);
-    if (Gollem::checkPermissions('backend', PERMS_DELETE)) {
-        $template->set('perms_delete', true, true);
-    } else {
-        $template->set('perms_edit', false, true);
-    }
+    $template->set('perms_delete', $delete_perms);
     $template->set('actions_help', Help::link('gollem', 'file-actions'));
 } else {
     $template->set('list_count', false, true);
 }
 
 $icon_cache = array();
+$total = 0;
 
-if (is_array($list) &&
-    count($list) &&
-    Gollem::checkPermissions('backend', PERMS_READ)) {
+if (is_array($list) && $numitem && $read_perms) {
     $entry = array();
-    $i = $total_files = $total_folders = $total_size = 0;
+    $page_caption = '';
+
+    require_once 'Horde/MIME/Magic.php';
+    require_once 'Horde/MIME/Viewer.php';
+    if (is_callable(array('Horde', 'loadConfiguration'))) {
+        $result = Horde::loadConfiguration('mime_drivers.php', array('mime_drivers', 'mime_drivers_map'), 'horde');
+        extract($result);
+        $result = Horde::loadConfiguration('mime_drivers.php', array('mime_drivers', 'mime_drivers_map'), 'gollem');
+        require_once 'Horde/Array.php';
+        $mime_drivers = Horde_Array::array_merge_recursive_overwrite($mime_drivers, $result['mime_drivers']);
+        $mime_drivers_map = Horde_Array::array_merge_recursive_overwrite($mime_drivers_map, $result['mime_drivers_map']);
+    } else {
+        require HORDE_BASE . '/config/mime_drivers.php';
+        require GOLLEM_BASE . '/config/mime_drivers.php';
+    }
 
     $template->set('empty_dir', false, true);
 
+    /* Set list min/max values */
+    $perpage = $prefs->getValue('perpage');
+    $min = $page * $perpage;
+    while ($min > $numitem) {
+        --$page;
+        $min = $page * $perpage;
+    }
+    $max = $min + $perpage;
+
     foreach ($list as $key => $val) {
-        $item = array();
-
-        $item['date'] = strftime($conf['manager']['date_format'], $val['date']);
-        $item['dl'] = false;
-        $item['group'] = (empty($val['group'])) ? '-' : $val['group'];
-        $item['name'] = htmlspecialchars($val['name']);
-        $item['on_clipboard'] = false;
-        $item['owner'] = (empty($val['owner'])) ? '-' : $val['owner'];
-        $item['perms'] = (empty($val['perms'])) ? '-' : $val['perms'];
-        $item['size'] = ($val['type'] == '**dir') ? '-' : number_format($val['size'], 0, '.', ',');
-        $item['type'] = $val['type'];
+        /* Check if a filter is not empty and filter matches filename. */
+        if (strlen($filter) &&
+            !preg_match('/' . preg_quote($filter, '/') . '/', $val['name'])) {
+            continue;
+        }
+
+        /* Continue if item not in min/max range. */
+        if (($total++ < $min) || ($total > $max)) {
+            continue;
+        }
+
+        $item = array(
+            'date' => htmlspecialchars(strftime($prefs->getValue('date_format'), $val['date'])),
+            'date_sort' => (int)$val['date'],
+            'dl' => false,
+            'edit' => false,
+            'group' => empty($val['group']) ? '-' : htmlspecialchars($val['group']),
+            'name' => htmlspecialchars($val['name']),
+            'on_clipboard' => false,
+            'owner' => empty($val['owner']) ? '-' : htmlspecialchars($val['owner']),
+            'perms' => empty($val['perms']) ? '-' : htmlspecialchars($val['perms']),
+            'size' => ($val['type'] == '**dir') ? '-' : number_format($val['size'], 0, '.', ','),
+            'type' => htmlspecialchars($val['type']),
+            'type_sort' => ($val['type'] == '**dir') ? '' : htmlspecialchars($val['type']),
+        );
 
         $name = str_replace(' ', '&nbsp;', $item['name']);
 
@@ -337,10 +399,6 @@ if (is_array($list) &&
             $item['graphic'] = $folder_img;
         } else {
             if (empty($icon_cache[$val['type']])) {
-                require_once 'Horde/MIME/Magic.php';
-                require_once 'Horde/MIME/Viewer.php';
-                require_once HORDE_BASE . '/config/mime_drivers.php';
-                require_once GOLLEM_BASE . '/config/mime_drivers.php';
                 $icon_cache[$val['type']] = Horde::img(MIME_Viewer::getIcon(MIME_Magic::extToMIME($val['type'])), '', '', '');
             }
             $item['graphic'] = $icon_cache[$val['type']];
@@ -349,7 +407,7 @@ if (is_array($list) &&
         /* Create proper link. */
         switch ($val['type']) {
         case '**dir':
-            $url = Util::addParameter($manager_url, 'dir', Gollem::subdirectory($currdir, $val['name']));
+            $url = Util::addParameter($manager_url, array('dir' => Gollem::subdirectory($currdir, $val['name'])));
             $item['link'] = Horde::link($url) . '<strong>' . $name . '</strong></a>';
             break;
 
@@ -368,7 +426,7 @@ if (is_array($list) &&
                     $dir = $currdir;
                 }
 
-                $url = Util::addParameter($manager_url, 'dir', Gollem::subdirectory($dir, $name));
+                $url = Util::addParameter($manager_url, array('dir' => Gollem::subdirectory($dir, $name)));
                 $item['link'] = $item['name'] . ' -> <strong>' . Horde::link($url) . $val['link'] . '</a></strong>';
             } else {
                 $item['link'] = $item['name'] . ' -> ' . $val['link'];
@@ -376,55 +434,54 @@ if (is_array($list) &&
             break;
 
         default:
-            require_once 'Horde/MIME/Magic.php';
-            $mime_part = &new MIME_Part(MIME_Magic::extToMIME($val['type']), '');
+            $mime_type = MIME_Magic::extToMIME($val['type']);
+
+            // Edit link if possible.
+            if (strpos($mime_type, 'text/') === 0) {
+                $url = Util::addParameter($edit_url, array('actionID' => 'edit_file', 'type' => $val['type'], 'file' => $val['name'], 'dir' => $currdir, 'driver' => $GLOBALS['gollem_be']['driver']));
+                $item['edit'] = Horde::link($url, '', '', '_blank', 'popup(this.href); return false;') . $edit_img . '</a>';
+            }
+
             // We can always download files.
             $item['dl'] = Horde::link(Horde::downloadUrl($val['name'], array('actionID' => 'download_file', 'dir' => $currdir, 'driver' => $GLOBALS['gollem_be']['driver'], 'file' => $val['name'])), sprintf(_("Download %s"), $val['name'])) . $download_img . '</a>';
 
             // Try a view link.
             $url = Util::addParameter($view_url, array('actionID' => 'view_file', 'type' => $val['type'], 'file' => $val['name'], 'dir' => $currdir, 'driver' => $GLOBALS['gollem_be']['driver']));
-            $item['link'] = Horde::link('#', '', '', '', "view('$url', '" . $val['name'] . "'); return false;") . $name . '</a>';
+            $item['link'] = Horde::link($url, '', '', '_blank', 'popup(this.href); return false;') . $name . '</a>';
             break;
         }
 
-        if ($val['type'] != '**dir') {
-            $total_size += $val['size'];
-            $total_files++;
-        } else {
-            $total_folders++;
-        }
-
         $entry[] = $item;
     }
 
     /* Set up the variables needed for the header row. */
-    $manager_url = Horde::selfUrl();
     $sortby = $prefs->getValue('sortby');
     $sortdir = $prefs->getValue('sortdir');
 
-    $size = round($total_size / 1000);
-    if ($total_folders == 1) {
-        if ($total_files == 1) {
-            $size_caption = sprintf(_("1 Folder and 1 File (%s Kb)"), $size);
-        } else {
-            $size_caption = sprintf(_("1 Folder and %s Files (%s Kb)"), $total_files, $size);
-        }
-    } elseif ($total_files == 1) {
-        $size_caption = sprintf(_("%s Folders and 1 File (%s Kb)"), $total_folders, $size);
-    } else {
-        $size_caption = sprintf(_("%s Folders and %s Files (%s Kb)"), $total_folders, $total_files, $size);
+    if ($total) {
+        // Set start/end items (according to current page)
+        $start = ($page * $perpage) + 1;
+        $end = min($total, $start + $perpage - 1);
+
+        require_once 'Horde/Variables.php';
+        require_once 'Horde/UI/Pager.php';
+        $vars = Variables::getDefaultVariables();
+        $vars->set('page', $page);
+        $pager = new Horde_UI_Pager('page', $vars, array('num' => $total, 'url' => $refresh_url, 'page_count' => 10, 'perpage' => $perpage));
+        $page_caption = $pager->render();
     }
 
     $headers = array();
     foreach ($columns as $head) {
-        $hdr = array('class' => 'item', 'sort' => '');
+        $hdr = array('class' => '');
         $sort = null;
 
         switch ($head) {
         case 'type':
-            $hdr['width'] = '5%';
+            $hdr['width'] = '3%';
             $hdr['label'] = _("Type");
             $hdr['align'] = 'right';
+            $hdr['id'] = 's' . GOLLEM_SORT_TYPE;
             $sort = GOLLEM_SORT_TYPE;
             break;
 
@@ -432,19 +489,29 @@ if (is_array($list) &&
             $hdr['width'] = '57%';
             $hdr['label'] = _("Name");
             $hdr['align'] = 'left';
+            $hdr['id'] = 's' . GOLLEM_SORT_NAME;
             $sort = GOLLEM_SORT_NAME;
             break;
 
+        case 'edit':
+            $hdr['width'] = '1%';
+            $hdr['label'] = '&nbsp;';
+            $hdr['align'] = 'center';
+            $hdr['class'] = 'nosort';
+            break;
+
         case 'download':
             $hdr['width'] = '1%';
             $hdr['label'] = '&nbsp;';
             $hdr['align'] = 'center';
+            $hdr['class'] = 'nosort';
             break;
 
         case 'modified':
             $hdr['width'] = '7%';
             $hdr['label'] = _("Modified");
             $hdr['align'] = 'left';
+            $hdr['id'] = 's' . GOLLEM_SORT_DATE;
             $sort = GOLLEM_SORT_DATE;
             break;
 
@@ -452,6 +519,7 @@ if (is_array($list) &&
             $hdr['width'] = '7%';
             $hdr['label'] = _("Size");
             $hdr['align'] = 'right';
+            $hdr['id'] = 's' . GOLLEM_SORT_SIZE;
             $sort = GOLLEM_SORT_SIZE;
             break;
 
@@ -459,27 +527,29 @@ if (is_array($list) &&
             $hdr['width'] = '7%';
             $hdr['label'] = _("Permission");
             $hdr['align'] = 'right';
+            $hdr['class'] = 'nosort';
             break;
 
         case 'owner':
             $hdr['width'] = '7%';
             $hdr['label'] = _("Owner");
             $hdr['align'] = 'right';
+            $hdr['class'] = 'nosort';
             break;
 
         case 'group':
             $hdr['width'] = '7%';
             $hdr['label'] = _("Group");
             $hdr['align'] = 'right';
+            $hdr['class'] = 'nosort';
             break;
         }
 
-        if (!is_null($sort)) {
+        if ($sort !== null) {
             if ($sortby == $sort) {
-                $hdr['sort'] = '<a href="' . Util::addParameter($manager_url, array('actionID' => 'change_sortdir', 'sortdir' => abs(1 - $sortdir))) . '">' . Horde::img($sortdir ? 'za.png' : 'az.png', _("Sort Direction"), null, $registry->getImageDir('horde')) . '</a>&nbsp;';
-                $hdr['class'] = 'selected';
+                $hdr['class'] = ($sortdir ? 'sortup' : 'sortdown');
             }
-            $hdr['label'] = '<a href="' . Util::addParameter($manager_url, array('actionID' => 'change_sortby', 'sortby' => $sort)) .'">' . $hdr['label'] . '</a>';
+            $hdr['label'] = '<a href="' . Util::addParameter($refresh_url, array('actionID' => 'change_sortby', 'sortby' => $sort)) . '" class="sortlink">' . htmlspecialchars($hdr['label']) . '</a>';
         }
 
         $headers[] = $hdr;
@@ -488,12 +558,26 @@ if (is_array($list) &&
     /* Set up the template tags. */
     $template->set('headers', $headers, true);
     $template->set('entry', $entry, true);
-    $template->set('size_caption', $size_caption);
+    $template->set('page_caption', $page_caption);
+    $template->set('filter_val', $filter);
     $template->set('checkall', Horde::getAccessKeyAndTitle(_("Check _All/None")));
-
 } else {
     $template->set('empty_dir', true, true);
 }
+$template->set('itemcount', sprintf(ngettext(_("%d item"), _("%d items"), $total), $total));
+
+$js_code = array(
+    'var warn_recursive = ' . intval($GLOBALS['prefs']->getValue('recursive_deletes') == 'warn'),
+);
+
+Horde::addScriptFile('prototype.js', 'gollem', true);
+Horde::addScriptFile('manager.js', 'gollem', true);
+Horde::addScriptFile('popup.js', 'gollem', true);
+Horde::addScriptFile('tables.js', 'gollem', true);
 
+require GOLLEM_TEMPLATES . '/common-header.inc';
+Gollem::addInlineScript(implode(';', $js_code));
+Gollem::menu();
+Gollem::status();
 echo $template->fetch(GOLLEM_TEMPLATES . '/manager/manager.html');
 require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/permissions.php b/permissions.php
index 3782f9b..7b8cc67 100644
--- a/permissions.php
+++ b/permissions.php
@@ -2,11 +2,11 @@
 /**
  * Gollem permissions administration page.
 
- * $Horde: gollem/permissions.php,v 1.2.2.8 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/permissions.php,v 1.2.2.9 2008/10/13 09:32:22 jan Exp $
  *
  * Copyright 2005-2007 Vijay Mahrra <vijay.mahrra at es.easynet.net>
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
  */
 
diff --git a/po/bg_BG.po b/po/bg_BG.po
index 34a921e..9e5d62e 100644
--- a/po/bg_BG.po
+++ b/po/bg_BG.po
@@ -1,13 +1,12 @@
 # Bulgarian translations for Gollem package.
-# Copyright (C) 2002 Horde Project
+# Copyright 2002-2009 The Horde Project
 # This file is distributed under the same license as the Gollem package.
 # Miroslav Pendev <miro at cybershade.us>, 2002.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Gollem 0.0.1-cvs\n"
-"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-13 17:13+0200\n"
+"POT-Creation-Date: 2002-09-14 00:38-0400\n"
 "PO-Revision-Date: 2002-11-19 20:44-0500\n"
 "Last-Translator: Miroslav Pendev <miro at cybershade.us>\n"
 "Language-Team: BG i18n at lists.horde.org\n"
@@ -15,575 +14,312 @@ msgstr ""
 "Content-Type: text/plain; charset=CP1251\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: manager.php:52
-#, fuzzy, php-format
-msgid "\"%s\" renamed to \"%s\""
-msgstr "'%s' ïðåèìåíóâàíî íà '%s'"
-
-#: templates/manager/header.inc:576
-#, fuzzy, php-format
-msgid "%d items"
+#, c-format
+msgid "%d items in %s"
 msgstr "%d íåùà â %s"
 
-#: manager.php:356
-#, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr ""
-
-#: manager.php:354
-#, php-format
-msgid "%s Folders and 1 File (%s Kb)"
-msgstr ""
-
-#: templates/login/login.inc:88
-#, php-format
+#, c-format
 msgid "%s Login"
 msgstr "%s Âõîä"
 
-#: manager.php:157
-#, php-format
-msgid "%s was successfully pasted."
-msgstr ""
+#, c-format
+msgid "%s Standard"
+msgstr "%s Ñòàíäàðò"
 
-#: manager.php:351
-#, php-format
-msgid "1 Folder and %s Files (%s Kb)"
-msgstr ""
-
-#: manager.php:349
-#, php-format
-msgid "1 Folder and 1 File (%s Kb)"
-msgstr ""
-
-#: templates/manager/header.inc:576
-msgid "1 item"
-msgstr ""
+#, c-format
+msgid "'%s' renamed to '%s'"
+msgstr "'%s' ïðåèìåíóâàíî íà '%s'"
 
-#: view.php:31
-#, php-format
+#, c-format
 msgid "Access denied to %s"
 msgstr "Îòêàçàí äîñòúï äî %s"
 
-#: lib/Gollem.php:115 lib/Gollem.php:389 lib/Gollem.php:442 lib/Gollem.php:463
-#: lib/Gollem.php:480
-#, fuzzy, php-format
-msgid "Access denied to folder \"%s\"."
-msgstr "Îòêàçàí äîñòúï äî %s"
-
-#: templates/manager/header.inc:601
-#, fuzzy
-msgid "Actions"
-msgstr "Îïöèè"
-
-#: selectlist.php:100
-msgid "Add"
-msgstr ""
-
-#: templates/prefs/columnselect.inc:229
-msgid "Add column"
-msgstr ""
-
-#: templates/manager/header.inc:493
-msgid "All"
-msgstr ""
-
-#: templates/manager/header.inc:180
-msgid "Are you sure you wish to continue?"
-msgstr ""
-
-#: templates/manager/header.inc:176
-msgid "Are you sure?"
-msgstr ""
-
-#: config/prefs.php.dist:69
 msgid "Ascending"
 msgstr "Íàðàñòâàùè"
 
-#: config/prefs.php.dist:93
-msgid "Ask"
-msgstr ""
+msgid "Back To Folder"
+msgstr "Îáðàòíî êúì ïàïêà"
 
-#: templates/manager/header.inc:487
-msgid "Attributes"
-msgstr ""
+msgid "Barbie"
+msgstr "Barbie"
 
-#: templates/prefs/columnselect.inc:225
-msgid "Available Columns:"
-msgstr ""
+msgid "Brown"
+msgstr "Brown"
 
-#: lib/api.php:46
-msgid "Backends"
-msgstr ""
+msgid "Burnt Orange"
+msgstr "Burnt Orange"
 
-#: templates/clipboard/clipboard.html:11
-msgid "Below is the current contents of your clipboard."
-msgstr ""
-
-#: selectlist.php:102 clipboard.php:35 templates/manager/header.inc:515
-#: templates/manager/header.inc:533 templates/manager/header.inc:546
-#: templates/manager/header.inc:559
-msgid "Cancel"
-msgstr ""
+msgid "Camouflage"
+msgstr "Camouflage"
 
-#: manager.php:72
-#, php-format
+#, c-format
 msgid "Cannot chmod %s"
 msgstr "Ãðåøêà ïðè chmod %s"
 
-#: manager.php:132
-msgid "Cannot copy items onto clipboard."
-msgstr ""
-
-#: manager.php:190
-#, php-format
-msgid "Cannot create home directory: %s"
-msgstr ""
-
-#: manager.php:134
-msgid "Cannot cut items onto clipboard."
-msgstr ""
-
-#: manager.php:80
-#, fuzzy, php-format
-msgid "Cannot delete \"%s\": %s"
+#, c-format
+msgid "Cannot delete '%s'"
 msgstr "Ãðåøêà ïðè èçòðèâàíå íà '%s'"
 
-#: manager.php:155
-#, php-format
-msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr ""
-
-#: templates/manager/header.inc:553 lib/Gollem.php:793
-#, fuzzy
-msgid "Change Folder"
-msgstr "Ñúçäàé ïàïêà"
-
-#: selectlist.php:110 templates/menu.inc:8
-#, fuzzy
-msgid "Change Server"
-msgstr "Ñúðâúð"
-
-#: config/prefs.php.dist:21
-#, fuzzy
-msgid "Change file and folder handling settings."
+msgid "Change your file sorting options and theme setting."
 msgstr "Ñìåíåòå íà÷èíà íà ñîðòèðàíå íà ôàéëîâåòå è íàñòðîéêèòå çà òåìàòà."
 
-#: config/prefs.php.dist:14
-#, fuzzy
-msgid "Change your file sorting options."
-msgstr "Ñìåíåòå íà÷èíà íà ñîðòèðàíå íà ôàéëîâåòå è íàñòðîéêèòå çà òåìàòà."
+msgid "Checkbox"
+msgstr "Checkbox"
 
-#: manager.php:438
-msgid "Check _All/None"
-msgstr ""
+msgid "Cherry"
+msgstr "Cherry"
 
-#: templates/manager/header.inc:609
 msgid "Chmod Items"
 msgstr "Chmod íåùà"
 
-#: manager.php:70
 msgid "Chmod done: "
 msgstr "Chmod èçâúðøåí:"
 
-#: templates/prefs/columnselect.inc:218
-msgid "Choose the columns to display in the file manager."
-msgstr ""
-
-#: clipboard.php:36
-msgid "Clear"
-msgstr ""
-
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr ""
+msgid "Choose Action:"
+msgstr "Èçáåðè äåéñòâèå:"
 
-#: templates/login/login.inc:111
-#, php-format
+#, c-format
 msgid "Connect to: %s"
 msgstr "Ñâúðçâàíå êúì %s"
 
-#: clipboard.php:39
-msgid "Copy"
-msgstr ""
-
-#: templates/manager/header.inc:611
-#, fuzzy
-msgid "Copy Items"
-msgstr "Chmod íåùà"
-
-#: templates/manager/header.inc:540 lib/Gollem.php:790
 msgid "Create Folder"
 msgstr "Ñúçäàé ïàïêà"
 
-#: permissions.php:48
-#, php-format
-msgid "Created default permissions for backend \"%s\"."
-msgstr ""
-
-#: clipboard.php:40
-#, php-format
-msgid "Current directory: %s"
-msgstr ""
-
-#: clipboard.php:38
-msgid "Cut"
-msgstr ""
-
-#: templates/manager/header.inc:610
-#, fuzzy
-msgid "Cut Items"
-msgstr "Chmod íåùà"
-
-#: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
 msgstr "Êðèòåðèè çà ñîðòèðàíå ïî ïîäðàçáèðàíå:"
 
-#: config/prefs.php.dist:72
 msgid "Default sorting direction:"
 msgstr "Ïîñîêà íà ñîðòèðàíå ïî ïîäðàçáèðàíå:"
 
-#: templates/manager/header.inc:606
+#, c-format
+msgid "Defaulted to: %s"
+msgstr "Ïîäðàçáèðàùî ñå: %s"
+
 msgid "Delete Items"
 msgstr "Èçòðèé íåùà"
 
-#: config/prefs.php.dist:95
-msgid "Delete folders recursively?"
-msgstr ""
-
-#: config/prefs.php.dist:70
 msgid "Descending"
 msgstr "Íàìàëÿâàùè"
 
-#: selectlist.php:101
-msgid "Done"
-msgstr ""
+msgid "Directory removed: "
+msgstr "Äèðåêòîðèÿòà ïðåìåñòåíà:"
+
+msgid "Display Options"
+msgstr "Äèñïëåé Îïöèè"
 
-#: manager.php:218
 msgid "Download"
 msgstr "Èçòåãëè"
 
-#: manager.php:323
-#, fuzzy, php-format
-msgid "Download %s"
-msgstr "Èçòåãëè"
+msgid ""
+"Either you have logged in incorrectly or your login has expired. Please "
+"login again."
+msgstr ""
+"Ãðåøêà ïðè âõîä èëè âðåìåòî çà âàøàòà ñåñèÿ å èçòåêëî. Ìîëÿ ðåãèñòðèðàéòå ñå "
+"îòíîâî."
 
-#: config/credentials.php.dist:28
 msgid "Email"
 msgstr "Ïèñìî"
 
-#: templates/manager/header.inc:508
-msgid "Execute"
-msgstr ""
+#, c-format
+msgid "Error uploading %s: %s"
+msgstr "Ãðåøêà ïðè èçïðàùàíå íà ôàéëà %s: %s"
 
-#: templates/manager/header.inc:464 templates/manager/header.inc:589
-#, fuzzy
-msgid "File"
-msgstr "Èìå íà ôàéë"
+#, c-format
+msgid "Error uploading file: %s"
+msgstr "Ãðåøêà ïðè èçïðàùàíå íà ôàéëà: %s"
 
-#: config/prefs.php.dist:13
-msgid "File Display"
-msgstr ""
-
-#: config/prefs.php.dist:56
 msgid "File Modification Time"
 msgstr "Äàòà íà ìîäèôèêàöèÿ íà ôàéëà"
 
-#: config/prefs.php.dist:55
 msgid "File Name"
 msgstr "Èìå íà ôàéë"
 
-#: config/prefs.php.dist:57
 msgid "File Size"
 msgstr "Ðàçìåð íà ôàéëà"
 
-#: config/prefs.php.dist:54
 msgid "File Type"
 msgstr "Ôàéë òèï"
 
-#: manager.php:76
 msgid "File deleted: "
 msgstr "Èçòðèò ôàéë: "
 
-#: manager.php:101
-#, php-format
+#, c-format
 msgid "File received: %s"
 msgstr "Èçòåãëåí ôàéë: %s"
 
-#: manager.php:78
-#, fuzzy
-msgid "Folder removed: "
-msgstr "Äèðåêòîðèÿòà ïðåìåñòåíà:"
+msgid "File type can't be viewed inline, download the file instead"
+msgstr "Ôàéë îò òîçè òèï íå ìîæå äà ñå ïðåãëåæäà, èçòåãëåòå ãî"
 
-#: templates/manager/header.inc:555
-msgid "Go to:"
-msgstr ""
+msgid "Gollem is not properly configured"
+msgstr "Gollem íå å êîíôèãóðèðàí êîðåêòíî"
 
-#: permissions.php:25
-msgid "Gollem Backend Permissions Administration"
-msgstr ""
+msgid "Green"
+msgstr "Green"
+
+msgid "Grey"
+msgstr "Grey"
 
-#: manager.php:413 templates/manager/header.inc:492
 msgid "Group"
 msgstr "Ãðóïà"
 
-#: lib/Gollem.php:786
+msgid "Help"
+msgstr "Ïîìîù"
+
 msgid "Home"
 msgstr "Íà÷àëî"
 
-#: manager.php:56
 msgid "Incorrect number of items."
 msgstr "Íåêîðåêòåí áðîé."
 
-#: manager.php:125
-#, php-format
-msgid "Item copied to clipboard: %s"
-msgstr ""
-
-#: manager.php:127
-#, php-format
-msgid "Item cut to clipboard: %s"
-msgstr ""
-
-#: templates/login/login.inc:136
 msgid "Language"
 msgstr "Åçèê"
 
-#: config/prefs.php.dist:81
-msgid "List folders first?"
-msgstr ""
+msgid "Light Blue"
+msgstr "Light Blue"
+
+msgid "Locked"
+msgstr "Çàêëþ÷åí"
 
-#: templates/login/login.inc:145
 msgid "Log in"
 msgstr "Âõîä"
 
-#: lib/Block/tree_menu.php:3
-msgid "Menu List"
+msgid ""
+"Login failed for some reason. Most likely your username or password was "
+"entered incorrectly."
 msgstr ""
+"Ðåãèñòðèðàíåòî ñå ïðîâàëè ïîðàäè íåèçâåñòíà ïðè÷èíà. Âåðîÿòíî ãðåøíî "
+"âúâåäåíî ïîòðåáèòåëñêî èìå èëè ïàðîëà."
+
+msgid "Logout"
+msgstr "Èçõîä"
 
-#: manager.php:387
 msgid "Modified"
 msgstr "Ïðîìåíåí"
 
-#: templates/prefs/columnselect.inc:239
-msgid "Move left"
-msgstr ""
+msgid "Mozilla"
+msgstr "Mozilla"
 
-#: templates/prefs/columnselect.inc:241
-msgid "Move right"
-msgstr ""
-
-#: manager.php:374
 msgid "Name"
 msgstr "Èìå"
 
-#: templates/manager/header.inc:529 templates/manager/header.inc:542
 msgid "Name:"
 msgstr "Èìå:"
 
-#: manager.php:35
 msgid "New folder created: "
 msgstr "Ñúçäàäåíà å íîâà ïàïêà: "
 
-#: config/prefs.php.dist:91
-msgid "No"
-msgstr ""
+msgid "Options"
+msgstr "Îïöèè"
 
-#: templates/manager/header.inc:532 templates/manager/header.inc:545
-#: templates/manager/header.inc:558
-msgid "OK"
-msgstr ""
+msgid "Orange"
+msgstr "Orange"
+
+msgid "Other Options"
+msgstr "Äðóãè Îïöèè"
 
-#: manager.php:407 templates/manager/header.inc:491
 msgid "Owner"
 msgstr "Ïðèòåæàòåë"
 
-#: config/credentials.php.dist:23
 msgid "Password"
 msgstr "Ïàðîëà"
 
-#: clipboard.php:37
-msgid "Paste"
-msgstr ""
-
-#: manager.php:401
 msgid "Permission"
 msgstr "Ïðàâà"
 
-#: selectlist.php:63
-#, fuzzy, php-format
-msgid "Permission denied to %s: %s"
-msgstr "Ïðàâî íà äîñòúï äî %s îòêàçàí: %s"
-
-#: manager.php:198
-#, fuzzy, php-format
-msgid "Permission denied to folder \"%s\": %s"
+#, c-format
+msgid "Permission denied to %s: %s."
 msgstr "Ïðàâî íà äîñòúï äî %s îòêàçàí: %s"
 
-#: lib/Gollem.php:798
-#, fuzzy
-msgid "Permissions"
-msgstr "Ïðàâà"
-
-#: templates/login/login.inc:49
-msgid "Please provide your password."
-msgstr ""
-
-#: templates/login/login.inc:44
-msgid "Please provide your username."
-msgstr ""
-
-#: templates/prefs/columnselect.inc:211
-msgid "Please select a backend:"
-msgstr ""
-
-#: templates/manager/header.inc:109
-msgid "Please select an item before this action."
-msgstr ""
-
-#: templates/manager/header.inc:435
-msgid "Please specify at least one file to upload."
-msgstr ""
-
-#: templates/manager/header.inc:496
-msgid "Read"
-msgstr ""
-
-#: templates/manager/header.inc:579
 msgid "Refresh"
 msgstr "Îïðåñíè"
 
-#: templates/prefs/columnselect.inc:231
-msgid "Remove column"
-msgstr ""
-
-#: templates/manager/header.inc:527
-#, fuzzy
-msgid "Rename"
-msgstr "Èìå"
-
-#: templates/manager/header.inc:603
 msgid "Rename Items"
 msgstr "Ïðåèìåíóâàíå"
 
-#: lib/Gollem.php:754 lib/Gollem.php:759
-#, fuzzy
-msgid "Root"
-msgstr "Èçõîä"
+msgid "Select your color scheme."
+msgstr "Èçáåðåòå âàøàòà ñõåìà çà öâåòîâåòå."
 
-#: templates/manager/header.inc:514
-#, fuzzy
-msgid "Save"
-msgstr "Ñúðâúð"
+msgid "Select your preferred language:"
+msgstr "Èçáåðåòå ïðåäïî÷èòàíèÿò îò Âàñ åçèê:"
 
-#: templates/prefs/columnselect.inc:235
-msgid "Selected Columns:"
-msgstr ""
-
-#: templates/login/login.inc:101
 msgid "Server"
 msgstr "Ñúðâúð"
 
-#: config/prefs.php.dist:20
-msgid "Settings"
-msgstr ""
+msgid "Set the language that menu items, explanations, and help are in."
+msgstr "Èçáåðåòå åçèêà, íà êîèòî ñå ïîêàçâàò ìåíþòà, îáÿñíåíèÿ è ïîìîù."
 
-#: config/prefs.php.dist:30
-msgid "Show dotfiles?"
-msgstr ""
-
-#: manager.php:394
 msgid "Size"
 msgstr "Ðàçìåð"
 
-#: manager.php:420
+msgid "Some of Gollem's configuration files are missing:"
+msgstr "Íÿêîè îò êîíôèãóðàöèîííèòå ôàéëîâå íà Gollem ëèïñâàò:"
+
 msgid "Sort Direction"
 msgstr "Ñîðòèðàíå"
 
-#: templates/manager/header.inc:180
-msgid "The following item(s) are folders: "
-msgstr ""
+msgid "Sun"
+msgstr "Sun"
 
-#: templates/manager/header.inc:176
-msgid "The following items will be permanently deleted: "
-msgstr ""
+msgid "There are no files in this directory."
+msgstr "Íÿìà ôàéëîâå â òàçè äèðåêòîðèÿ."
+
+msgid "There was an error viewing this file"
+msgstr "Ãðåøêà ïðè ïðåãëåæäàíåòî íà òîçè ôàéë."
 
-#: templates/selectlist/javascript.inc:9
-msgid "The original opener window has been closed. Exiting."
+msgid ""
+"This file controls the default preferences for Gollem, and also controls "
+"which preferences users can alter."
 msgstr ""
+"Òîçè ôàéë êîíòðîëèðà íàñòðîéêèòå ïî ïîäðàçáèðàíå íà Gollem, à ñúùî è êîè "
+"íàñòðîéêè ïîòðåáèòåëèòå ìîãàò äà ñå ïðîìåíÿò."
 
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
-#, fuzzy
-msgid "There are no files in this folder."
-msgstr "Íÿìà ôàéëîâå â òàçè äèðåêòîðèÿ."
+msgid "This file controls what backends are available from Gollem."
+msgstr "Òîçè ôàéë êîíòðîëèðà êàêâè backends ñà âúçìîæíè çà Gollem."
 
-#: templates/clipboard/clipboard.html:15
-msgid ""
-"To clear items from the clipboard, check the box next to the filename and "
-"click on &quot;Clear&quot;."
+msgid "This file defines types of credentials that a backend might request."
 msgstr ""
+"Òîçè ôàéë äåôèíèðà òèïîâåòå àêðåäèòàöèè, êîèòî backend-a ìîæå äà èçèñêà"
 
-#: templates/clipboard/clipboard.html:13
 msgid ""
-"To paste items from the clipboard to the current directory, check the box "
-"next to the filename and click on &quot;Paste&quot;."
+"This is the main Gollem configuration file. It contains options for the "
+"Gollem scripts."
 msgstr ""
+"Òîâà å ãëàâíèÿ ôàéë çà êîíôèãóðèðàíå íà Gollem. Òîé ñúäúðæà ïúòèùàòà è "
+"îïöèèòå çà Gollem ñêðèïòîâåòå."
 
-#: manager.php:367
 msgid "Type"
 msgstr "Òèï"
 
-#: lib/Gollem.php:759 lib/Gollem.php:769
-#, fuzzy, php-format
-msgid "Up to %s"
+msgid "Up to parent"
 msgstr "Îáðàòíî"
 
-#: templates/manager/header.inc:594
-msgid "Upload File(s)"
-msgstr ""
-
-#: config/prefs.php.dist:12 config/prefs.php.dist:19
-#, fuzzy
-msgid "User Interface"
-msgstr "Èìå"
+msgid "User Options"
+msgstr "Ïîòðåáèòåëñêè îïöèè"
 
-#: config/credentials.php.dist:18
 msgid "Username"
 msgstr "Èìå"
 
-#: templates/manager/header.inc:581
-msgid "View Clipboard"
-msgstr ""
-
-#: login.php:174
-#, fuzzy, php-format
-msgid "Welcome to %s"
-msgstr "Ïîäðàçáèðàùî ñå: %s"
-
-#: templates/manager/header.inc:502
-msgid "Write"
-msgstr ""
+#, c-format
+msgid "Warning: %s requires Javascript to perform certain functions."
+msgstr "Âíèìàíèå: %s èçèñêâà Javascript çà íÿêîè ôóíêöèè."
 
-#: config/prefs.php.dist:92
-msgid "Yes"
-msgstr ""
+#, c-format
+msgid ""
+"You have been logged out of %s. Thank you for using the system. If you wish "
+"to log in again, please use the form below."
+msgstr "Âèå èçëÿçîõòå îò %s.Áëàãîäàðèì Âè, ÷å èçïîëçâàõòå ñèñòåìàòà."
 
-#: permissions.php:28
-msgid "You need at least one backend defined to set permissions."
-msgstr ""
+msgid "Your Information"
+msgstr "Èíôîðìàöèÿ çà Âàñ"
 
-#: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
 msgstr "Âàøèÿò browser íå ïîäúðæà ðåäîâî ïîêàçâàíå íà òîçè òèï ôàéë"
 
-#: templates/menu.inc:6 templates/menu.inc:19
-#, fuzzy
-msgid "_Change Server"
-msgstr "Ñúðâúð"
+msgid "[home]"
+msgstr "[home]"
 
-#: manager.php:219 selectlist.php:74
 msgid "folder"
 msgstr "ïàïêà"
 
-#: manager.php:220 selectlist.php:75
 msgid "symlink"
 msgstr "symlink"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 226b4e8..db5b0e0 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -1,6 +1,6 @@
 # Spanish translations for horde package
 # Traducciones al español para el paquete horde.
-# Copyright (C) 2004 Horde Project
+# Copyright 2004-2009 The Horde Project
 # This file is distributed under the same license as the horde package.
 # Automatically generated, 2004.
 #
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 2aab27d..68b5393 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -1,5 +1,5 @@
 # Czech translations for Gollem package.
-# Copyright (C) 2004 Horde Project
+# Copyright 2004-2009 The Horde Project
 # This file is distributed under the same license as the Horde package.
 # Pavel Chytil <pavel at chytil.tk>, 2004.
 #
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Gollem\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-13 17:13+0200\n"
+"POT-Creation-Date: 2004-12-22 10:04-0800\n"
 "PO-Revision-Date: 2004-11-25 09:19-0800\n"
 "Last-Translator: Pavel Chytil <pavel at chytil.tk>\n"
 "Language-Team: Czech <i18n at lists.horde.org>\n"
@@ -17,74 +17,64 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
 "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: manager.php:52
-#, fuzzy, php-format
-msgid "\"%s\" renamed to \"%s\""
-msgstr "'%s' pøejmenován na '%s'"
-
-#: templates/manager/header.inc:576
+#: templates/manager/header.inc:580
 #, php-format
 msgid "%d items"
 msgstr "%d polo¾ek"
 
-#: manager.php:356
+#: templates/manager/file_footers.inc:15
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s Adresáøù a %s Souborù (%s Kb)"
 
-#: manager.php:354
+#: templates/manager/file_footers.inc:13
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s Adresáøù a 1 Soubor (%s Kb)"
 
-#: templates/login/login.inc:88
+#: templates/xppublish/backend.inc:10 templates/login/login.inc:67
 #, php-format
 msgid "%s Login"
 msgstr "%s Pøihlásit se"
 
-#: manager.php:157
+#: manager.php:170
 #, php-format
 msgid "%s was successfully pasted."
 msgstr "%s byl úspì¹nì vlo¾en."
 
-#: manager.php:351
+#: manager.php:67
+#, php-format
+msgid "'%s' renamed to '%s'"
+msgstr "'%s' pøejmenován na '%s'"
+
+#: templates/manager/file_footers.inc:10
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 Adresáø a %s Souborù (%s Kb)"
 
-#: manager.php:349
+#: templates/manager/file_footers.inc:8
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 Adresáø a 1 Soubor (%s Kb)"
 
-#: templates/manager/header.inc:576
+#: templates/manager/header.inc:580
 msgid "1 item"
 msgstr "1 polo¾ka"
 
-#: view.php:31
+#: view.php:23
 #, php-format
 msgid "Access denied to %s"
 msgstr "Nebyl povolen pøístup k: %s"
 
-#: lib/Gollem.php:115 lib/Gollem.php:389 lib/Gollem.php:442 lib/Gollem.php:463
-#: lib/Gollem.php:480
-#, fuzzy, php-format
-msgid "Access denied to folder \"%s\"."
-msgstr "Nebyl povolen pøístup k: %s"
-
-#: templates/manager/header.inc:601
-msgid "Actions"
-msgstr ""
-
-#: selectlist.php:100
-msgid "Add"
-msgstr ""
+#: lib/Gollem.php:100
+msgid "Access denied: "
+msgstr "Pøístup zamítnut:"
 
-#: templates/prefs/columnselect.inc:229
+#: templates/prefs/columnselect.inc:236
 msgid "Add column"
 msgstr "Pøidat sloupec"
 
-#: templates/manager/header.inc:493
+#: templates/manager/header.inc:435
 msgid "All"
 msgstr "V¹e"
 
@@ -100,15 +90,15 @@ msgstr "Opravdu?"
 msgid "Ascending"
 msgstr "Vzestupnì"
 
-#: config/prefs.php.dist:93
+#: config/prefs.php.dist:94
 msgid "Ask"
 msgstr "Zeptat se"
 
-#: templates/manager/header.inc:487
+#: templates/manager/header.inc:429
 msgid "Attributes"
 msgstr "Atributy"
 
-#: templates/prefs/columnselect.inc:225
+#: templates/prefs/columnselect.inc:232
 msgid "Available Columns:"
 msgstr "Mo¾né Sloupce:"
 
@@ -116,54 +106,44 @@ msgstr "Mo
 msgid "Backends"
 msgstr "Backendy"
 
-#: templates/clipboard/clipboard.html:11
-#, fuzzy
-msgid "Below is the current contents of your clipboard."
-msgstr "Nelze vlo¾it polo¾ky do pøechodné schránky."
+#: templates/xppublish/browse.inc:7
+msgid "Browse to the folder to upload files to"
+msgstr "Pøesunout se do adresáøe a vlo¾it tam soubory"
 
-#: selectlist.php:102 clipboard.php:35 templates/manager/header.inc:515
-#: templates/manager/header.inc:533 templates/manager/header.inc:546
-#: templates/manager/header.inc:559
+#: templates/selectlist/footer.inc:5 templates/manager/header.inc:457
+#: templates/manager/header.inc:490 templates/manager/header.inc:522
+#: templates/manager/header.inc:554
 msgid "Cancel"
 msgstr "Storno"
 
-#: manager.php:72
+#: manager.php:89
 #, php-format
 msgid "Cannot chmod %s"
 msgstr "Nelze provést chmod %s"
 
-#: manager.php:132
+#: manager.php:146
 msgid "Cannot copy items onto clipboard."
 msgstr "Nelze kopírovat polo¾ky do pøechodné schránky."
 
-#: manager.php:190
-#, php-format
-msgid "Cannot create home directory: %s"
-msgstr ""
-
-#: manager.php:134
+#: manager.php:148
 msgid "Cannot cut items onto clipboard."
 msgstr "Nelze vlo¾it polo¾ky do pøechodné schránky."
 
-#: manager.php:80
-#, fuzzy, php-format
-msgid "Cannot delete \"%s\": %s"
+#: manager.php:97
+#, php-format
+msgid "Cannot delete '%s': %s"
 msgstr "Nelze smazat '%s': %s"
 
-#: manager.php:155
-#, fuzzy, php-format
-msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
+#: manager.php:168
+#, php-format
+msgid "Cannot paste '%s' (clipboard cleared): %s"
 msgstr "Nelze vlo¾it '%s' (pøechodná schránka vyprázdnìna): %s"
 
-#: templates/manager/header.inc:553 lib/Gollem.php:793
+#: templates/manager/header.inc:535 templates/manager/header.inc:615
+#: lib/Gollem.php:730
 msgid "Change Folder"
 msgstr "Zmìnit Adresáø"
 
-#: selectlist.php:110 templates/menu.inc:8
-#, fuzzy
-msgid "Change Server"
-msgstr "_Zmìnit Server"
-
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
 msgstr "Zmìnit nastavení pro práci se soubory a adresáøemi."
@@ -172,62 +152,41 @@ msgstr "Zm
 msgid "Change your file sorting options."
 msgstr "Zmìnit mo¾nosti pro tøídìní souborù"
 
-#: manager.php:438
+#: templates/manager/file_headers.inc:11
 msgid "Check _All/None"
 msgstr "Vybrat _V¹e/®ádné"
 
-#: templates/manager/header.inc:609
+#: templates/manager/header.inc:628
 msgid "Chmod Items"
 msgstr "Chmod Polo¾ek"
 
-#: manager.php:70
+#: manager.php:87
 msgid "Chmod done: "
 msgstr "Chmod proveden: "
 
-#: templates/prefs/columnselect.inc:218
+#: templates/manager/header.inc:613
+msgid "Choose Action:"
+msgstr "Vybrat Úkon:"
+
+#: templates/prefs/columnselect.inc:226
 msgid "Choose the columns to display in the file manager."
 msgstr "Vybrat zobrazení sloupcù ve správci souborù."
 
-#: clipboard.php:36
-msgid "Clear"
-msgstr ""
-
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr ""
-
-#: templates/login/login.inc:111
+#: templates/xppublish/backend.inc:33 templates/login/login.inc:90
 #, php-format
 msgid "Connect to: %s"
 msgstr "Pøipojit se: %s"
 
-#: clipboard.php:39
-msgid "Copy"
-msgstr ""
-
-#: templates/manager/header.inc:611
+#: templates/manager/header.inc:631
 msgid "Copy Items"
 msgstr "Kopírovat Polo¾ky"
 
-#: templates/manager/header.inc:540 lib/Gollem.php:790
+#: templates/manager/header.inc:503 templates/manager/header.inc:618
+#: lib/Gollem.php:727
 msgid "Create Folder"
 msgstr "Vytvoøit Adresáø"
 
-#: permissions.php:48
-#, php-format
-msgid "Created default permissions for backend \"%s\"."
-msgstr ""
-
-#: clipboard.php:40
-#, php-format
-msgid "Current directory: %s"
-msgstr ""
-
-#: clipboard.php:38
-msgid "Cut"
-msgstr ""
-
-#: templates/manager/header.inc:610
+#: templates/manager/header.inc:630
 msgid "Cut Items"
 msgstr "Vyjmout Polo¾ky"
 
@@ -239,11 +198,16 @@ msgstr "Implicitn
 msgid "Default sorting direction:"
 msgstr "Implicitní smìr tøídìní:"
 
-#: templates/manager/header.inc:606
+#: templates/xppublish/backend.inc:33 templates/login/login.inc:90
+#, php-format
+msgid "Defaulted to: %s"
+msgstr "Pøepnuto na: %s"
+
+#: templates/manager/header.inc:625
 msgid "Delete Items"
 msgstr "Smazat Polo¾ky"
 
-#: config/prefs.php.dist:95
+#: config/prefs.php.dist:96
 msgid "Delete folders recursively?"
 msgstr "Smazat Adresáøe rekurzivnì?"
 
@@ -251,32 +215,39 @@ msgstr "Smazat Adres
 msgid "Descending"
 msgstr "Sestupnì"
 
-#: selectlist.php:101
+#: templates/selectlist/footer.inc:4
 msgid "Done"
 msgstr "Provedeno"
 
-#: manager.php:218
+#: manager.php:218 templates/manager/file_headers.inc:25
 msgid "Download"
 msgstr "Download"
 
-#: manager.php:323
-#, fuzzy, php-format
-msgid "Download %s"
-msgstr "Download"
+#: xppublish.php:147
+#, php-format
+msgid "ERROR: %s"
+msgstr "CHYBA: %s"
 
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "Email"
 
-#: templates/manager/header.inc:508
+#: templates/manager/header.inc:450
 msgid "Execute"
 msgstr "Provést"
 
-#: templates/manager/header.inc:464 templates/manager/header.inc:589
-#, fuzzy
-msgid "File"
+#: templates/manager/header.inc:592
+msgid "File 1:"
 msgstr "Soubor 1:"
 
+#: templates/manager/header.inc:599
+msgid "File 2:"
+msgstr "Soubor 2:"
+
+#: templates/manager/header.inc:603
+msgid "File 3:"
+msgstr "Soubor 3:"
+
 #: config/prefs.php.dist:13
 msgid "File Display"
 msgstr "Zobrazit Soubor"
@@ -297,139 +268,133 @@ msgstr "Velikost Souboru"
 msgid "File Type"
 msgstr "Typ Souboru"
 
-#: manager.php:76
+#: templates/xppublish/javascript.inc:63
+msgid "File Upload"
+msgstr "Vlo¾it Soubor"
+
+#: manager.php:93
 msgid "File deleted: "
 msgstr "Soubor smazán: "
 
-#: manager.php:101
+#: manager.php:119
 #, php-format
 msgid "File received: %s"
 msgstr "Soubor pøijat: %s"
 
-#: manager.php:78
+#: manager.php:95
 msgid "Folder removed: "
 msgstr "Adresáø odstranìn: "
 
-#: templates/manager/header.inc:555
+#: templates/manager/header.inc:543
 msgid "Go to:"
 msgstr "Pøesunout se na:"
 
-#: permissions.php:25
-msgid "Gollem Backend Permissions Administration"
-msgstr ""
-
-#: manager.php:413 templates/manager/header.inc:492
+#: templates/manager/file_headers.inc:47 templates/manager/header.inc:434
 msgid "Group"
 msgstr "Skupina"
 
-#: lib/Gollem.php:786
+#: lib/Gollem.php:723
 msgid "Home"
 msgstr "Gollem"
 
-#: manager.php:56
+#: manager.php:71
 msgid "Incorrect number of items."
 msgstr "Nesprávný poèet polo¾ek."
 
-#: manager.php:125
+#: manager.php:139
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "Polo¾ka zkopírována do pøechodné schránky: %s"
 
-#: manager.php:127
+#: manager.php:141
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr "Polo¾ka pøesunuta do pøechodné schránky: %s"
 
-#: templates/login/login.inc:136
-msgid "Language"
-msgstr ""
-
 #: config/prefs.php.dist:81
 msgid "List folders first?"
 msgstr "Ukázat nejdøíve seznam adresáøù?"
 
-#: templates/login/login.inc:145
+#: login.php:104 xppublish.php:84
+msgid "Locked"
+msgstr "Uzamèeno"
+
+#: templates/login/login.inc:119
 msgid "Log in"
 msgstr "Pøihlásit se"
 
-#: lib/Block/tree_menu.php:3
-msgid "Menu List"
-msgstr ""
+#: templates/xppublish/login.inc:2
+#, php-format
+msgid "Login to %s"
+msgstr "Pøihlásit se do %s"
 
-#: manager.php:387
+#: templates/manager/file_headers.inc:30
 msgid "Modified"
 msgstr "Zmìnìno"
 
-#: templates/prefs/columnselect.inc:239
+#: templates/prefs/columnselect.inc:246
 msgid "Move left"
 msgstr "Posunout doleva"
 
-#: templates/prefs/columnselect.inc:241
+#: templates/prefs/columnselect.inc:248
 msgid "Move right"
 msgstr "Posunout doprava"
 
-#: manager.php:374
+#: templates/manager/file_headers.inc:21
 msgid "Name"
 msgstr "Název"
 
-#: templates/manager/header.inc:529 templates/manager/header.inc:542
+#: templates/manager/header.inc:479 templates/manager/header.inc:511
 msgid "Name:"
 msgstr "Název:"
 
-#: manager.php:35
+#: manager.php:48
 msgid "New folder created: "
 msgstr "Zalo¾en nový adresáø: "
 
-#: config/prefs.php.dist:91
+#: config/prefs.php.dist:92
 msgid "No"
 msgstr "Ne"
 
-#: templates/manager/header.inc:532 templates/manager/header.inc:545
-#: templates/manager/header.inc:558
+#: templates/manager/header.inc:489 templates/manager/header.inc:521
+#: templates/manager/header.inc:553
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:407 templates/manager/header.inc:491
+#: templates/manager/file_headers.inc:43 templates/manager/header.inc:433
 msgid "Owner"
 msgstr "Vlastník"
 
-#: config/credentials.php.dist:23
+#: templates/xppublish/login.inc:14 config/credentials.php.dist:23
 msgid "Password"
 msgstr "Heslo"
 
-#: clipboard.php:37
-#, fuzzy
-msgid "Paste"
+#: templates/manager/header.inc:637
+msgid "Paste Items"
 msgstr "Vlo¾it Polo¾ky"
 
-#: manager.php:401
+#: templates/manager/file_headers.inc:39
 msgid "Permission"
 msgstr "Práva"
 
-#: selectlist.php:63
+#: manager.php:198 selectlist.php:65 templates/xppublish/browse.inc:28
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "Nepovolený pøístup k %s: %s"
 
-#: manager.php:198
-#, fuzzy, php-format
-msgid "Permission denied to folder \"%s\": %s"
-msgstr "Nepovolený pøístup k %s: %s"
+#: xppublish.php:55
+msgid "Please enter your Username and Password."
+msgstr "Prosím zadejte Va¹e U¾ivatelské Jméno a Heslo"
 
-#: lib/Gollem.php:798
-#, fuzzy
-msgid "Permissions"
-msgstr "Práva"
-
-#: templates/login/login.inc:49
+#: templates/login/login.inc:31
 msgid "Please provide your password."
 msgstr "Prosím zadejte Va¹e heslo."
 
-#: templates/login/login.inc:44
+#: templates/login/login.inc:26
 msgid "Please provide your username."
 msgstr "Prosím zadejte Va¹e u¾ivatelské jméno."
 
-#: templates/prefs/columnselect.inc:211
+#: templates/prefs/columnselect.inc:217
 msgid "Please select a backend:"
 msgstr "Prosim vyberte backend:"
 
@@ -437,43 +402,48 @@ msgstr "Prosim vyberte backend:"
 msgid "Please select an item before this action."
 msgstr "Prosím vyberte polo¾ku pøed provedeními tohoto úkonu."
 
-#: templates/manager/header.inc:435
+#: templates/manager/header.inc:226
 msgid "Please specify at least one file to upload."
 msgstr "Prosím zadejte alespoò jeden soubor pro upload."
 
-#: templates/manager/header.inc:496
+#: templates/manager/header.inc:438
 msgid "Read"
 msgstr "Ètecí"
 
-#: templates/manager/header.inc:579
+#: templates/manager/header.inc:577
 msgid "Refresh"
 msgstr "Obnovit"
 
-#: templates/prefs/columnselect.inc:231
+#: templates/prefs/columnselect.inc:238
 msgid "Remove column"
 msgstr "Odstranit sloupec"
 
-#: templates/manager/header.inc:527
+#: templates/manager/header.inc:471
 msgid "Rename"
 msgstr "Pøejmenovat"
 
-#: templates/manager/header.inc:603
+#: templates/manager/header.inc:622
 msgid "Rename Items"
 msgstr "Pøejmenovat Polo¾ky"
 
-#: lib/Gollem.php:754 lib/Gollem.php:759
+#: lib/Gollem.php:689 lib/Gollem.php:694
 msgid "Root"
 msgstr "Koøenový adresáø"
 
-#: templates/manager/header.inc:514
+#: templates/manager/header.inc:456
 msgid "Save"
 msgstr "Ulo¾it"
 
-#: templates/prefs/columnselect.inc:235
+#: templates/xppublish/backend.inc:27 templates/selectlist/footer.inc:3
+msgid "Select"
+msgstr "Vybrat"
+
+#: templates/prefs/columnselect.inc:242
 msgid "Selected Columns:"
 msgstr "Vybrané Sloupce:"
 
-#: templates/login/login.inc:101
+#: templates/xppublish/backend.inc:22 templates/xppublish/backend.inc:40
+#: templates/login/login.inc:80 templates/login/login.inc:97
 msgid "Server"
 msgstr "Server"
 
@@ -485,11 +455,12 @@ msgstr "Mo
 msgid "Show dotfiles?"
 msgstr "Zobrazit soubory zaèínající teèkou?"
 
-#: manager.php:394
+#: templates/manager/file_headers.inc:35
 msgid "Size"
 msgstr "Velikost"
 
-#: manager.php:420
+#: templates/manager/file_headers.inc:15 templates/manager/file_headers.inc:20
+#: templates/manager/file_headers.inc:29 templates/manager/file_headers.inc:34
 msgid "Sort Direction"
 msgstr "Smìr Tøídìní"
 
@@ -501,80 +472,127 @@ msgstr "N
 msgid "The following items will be permanently deleted: "
 msgstr "Následujíci polo¾ky budou permanentnì vymazány: "
 
-#: templates/selectlist/javascript.inc:9
-msgid "The original opener window has been closed. Exiting."
-msgstr ""
-
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
+#: templates/selectlist/empty_dir.inc:2 templates/manager/empty_dir.inc:2
 msgid "There are no files in this folder."
 msgstr "Tento adresáø neobsahuje ¾ádné soubory."
 
-#: templates/clipboard/clipboard.html:15
+#: templates/xppublish/browse.inc:74
 msgid ""
-"To clear items from the clipboard, check the box next to the filename and "
-"click on &quot;Clear&quot;."
+"There are no folders in the current folder; click 'Next' if you want to "
+"upload files to this folder."
 msgstr ""
+"Tento adresáø neobsahuje ¾ádné soubory; kliknìte na 'Dal¹í' pokud si pøejete "
+"uploadovat soubory do toho to adresáøe."
 
-#: templates/clipboard/clipboard.html:13
-msgid ""
-"To paste items from the clipboard to the current directory, check the box "
-"next to the filename and click on &quot;Paste&quot;."
-msgstr ""
+#: lib/MIME/Viewer/plain.php:30
+msgid "There was an error viewing this file"
+msgstr "Nastala chyba pøi prohlí¾ení toho to souboru."
 
-#: manager.php:367
+#: templates/manager/file_headers.inc:16
 msgid "Type"
 msgstr "Typ"
 
-#: lib/Gollem.php:759 lib/Gollem.php:769
+#: lib/Gollem.php:694 lib/Gollem.php:704
 #, php-format
 msgid "Up to %s"
 msgstr "Do %s"
 
-#: templates/manager/header.inc:594
+#: templates/manager/header.inc:595
 msgid "Upload File(s)"
 msgstr "Uploadovat Soubor(y)"
 
+#: templates/xppublish/javascript.inc:63
+#, php-format
+msgid "Upload Files to %s"
+msgstr "Uploadovat Soubory do %s"
+
+#: xppublish.php:37
+#, php-format
+msgid "Upload to %s"
+msgstr "Uploadovat do %s"
+
+#: xppublish.php:25
+#, php-format
+msgid "Upload your files to %s on %s."
+msgstr "Uploadovat soubory do %s na %s."
+
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
 msgstr "U¾ivatelské Rozhraní"
 
-#: config/credentials.php.dist:18
+#: templates/xppublish/login.inc:11 config/credentials.php.dist:18
 msgid "Username"
 msgstr "U¾ivatelské Jméno"
 
-#: templates/manager/header.inc:581
-msgid "View Clipboard"
-msgstr ""
+#: xppublish.php:51
+msgid "Username and Password are incorrect."
+msgstr "Nesprávné U¾ivatelské Jméno a Heslo."
 
-#: login.php:174
+#: login.php:148
 #, php-format
 msgid "Welcome to %s"
 msgstr "Vítejte v %s"
 
-#: templates/manager/header.inc:502
+#: templates/xppublish/browse.inc:10
+msgid ""
+"When you are inside the folder you wish to upload to, click the 'Next' "
+"button to upload files."
+msgstr ""
+"Pokud jste uvnitø adresáøe, kde si pøejete uploadovat soubory, kliknìte na  "
+"'Dal¹í'."
+
+#: templates/manager/header.inc:444
 msgid "Write"
 msgstr "Zapsat"
 
-#: config/prefs.php.dist:92
+#: config/prefs.php.dist:93
 msgid "Yes"
 msgstr "Ano"
 
-#: permissions.php:28
-msgid "You need at least one backend defined to set permissions."
-msgstr ""
+#: manager.php:52
+msgid "You do not have permission to create this folder."
+msgstr "Nedostateèná práva pro zalo¾ení adresáøe %s."
+
+#: manager.php:152
+msgid "You do not have permission to cut/copy items."
+msgstr "Nedostateèná práva pro vyjmutí/kopírování polo¾ek.."
+
+#: manager.php:103
+msgid "You do not have permission to delete or change permissions on items."
+msgstr "Nedostateèná práva pro smazání nebo zmìnu práv pro tyto polo¾ky."
 
-#: lib/MIME/Viewer/images.php:35
+#: manager.php:178
+msgid "You do not have permission to paste items."
+msgstr "Nedostateèná práva pro vlo¾ení polo¾ek."
+
+#: manager.php:74
+msgid "You do not have permission to rename items."
+msgstr "Nedostateèná práva pro pøejmenování polo¾ek."
+
+#: manager.php:124
+msgid "You do not have permission to upload items."
+msgstr "Nedostateèná práva pro uploadování polo¾ek."
+
+#: lib/MIME/Viewer/images.php:41
 msgid "Your browser does not support inline display of this image type"
 msgstr "Vá¹ prohlí¾eè nepodporuje zobrazení tohoto typu obrázku v tìle zprávy."
 
-#: templates/menu.inc:6 templates/menu.inc:19
+#: lib/Gollem.php:167 lib/Gollem.php:180
+msgid "[home]"
+msgstr "[domovský adresáø]"
+
+#: lib/Gollem.php:749
 msgid "_Change Server"
 msgstr "_Zmìnit Server"
 
-#: manager.php:219 selectlist.php:74
+#: lib/Gollem.php:740 lib/Gollem.php:743
+msgid "_Log out"
+msgstr "_Odhlá¹ení"
+
+#: manager.php:219 selectlist.php:76
 msgid "folder"
 msgstr "adresáø"
 
-#: manager.php:220 selectlist.php:75
+#: manager.php:220 selectlist.php:77
 msgid "symlink"
 msgstr "symbolická linka"
diff --git a/po/da_DK.po b/po/da_DK.po
index 0237838..02a7634 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -1,15 +1,15 @@
 # Danish translations for Gollem package
 # Danske oversættelser for pakke Gollem.
-# Copyright (C) 2006 Horde Project
+# Copyright 2006-2009 The Horde Project
 # This file is distributed under the same license as the Gollem package.
 # Brian Truelsen <horde+i18n at briantruelsen.dk>, 2006.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem H3 (1.0.2-cvs)\n"
+"Project-Id-Version: Gollem H3 (1.1-cvs)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-03-11 16:59+0100\n"
-"PO-Revision-Date: 2006-03-11 17:35+0100\n"
+"POT-Creation-Date: 2006-03-11 12:34+0100\n"
+"PO-Revision-Date: 2006-03-11 15:08+0100\n"
 "Last-Translator: Brian Truelsen <horde+i18n at briantruelsen.dk>\n"
 "Language-Team: i18n at lists.horde.org\n"
 "MIME-Version: 1.0\n"
@@ -27,17 +27,17 @@ msgstr "\"%s\" er omd
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
 msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:260
+#: manager.php:261
 #, php-format
 msgid "%d items"
 msgstr "%d elementer"
 
-#: manager.php:414
+#: manager.php:415
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s mapper og %s filer (%s KB)"
 
-#: manager.php:412
+#: manager.php:413
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s mapper og 1 fil (%s KB)"
@@ -52,20 +52,32 @@ msgstr "Log ind til %s"
 msgid "%s was successfully pasted."
 msgstr "%s er indsat."
 
-#: manager.php:409
+#: manager.php:410
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 mappe og %s filer (%s KB)"
 
-#: manager.php:407
+#: manager.php:408
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 mappe og 1 fil (%s KB)"
 
-#: manager.php:260
+#: manager.php:261
 msgid "1 item"
 msgstr "1 element"
 
+#: templates/javascript/src/popup.js:58
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr "Et vindue kunne ikke åbnes.  Er din popup-blokker aktiveret?"
+
+#: templates/javascript/popup.js:9
+msgid ""
+"A popup window could not be opened.Perhaps you have set your browser to "
+"block popup windows?"
+msgstr "Et vinduet kunne ikke åbnes.  Er din popup-blokker aktiveret?"
+
 #: view.php:31
 #, php-format
 msgid "Access denied to %s"
@@ -77,7 +89,7 @@ msgstr "Adgang n
 msgid "Access denied to folder \"%s\"."
 msgstr "Adgang til mappe \"%s\" nægtet."
 
-#: templates/manager/manager.html:105
+#: templates/manager/manager.html:96
 msgid "Actions"
 msgstr "Handlinger"
 
@@ -93,11 +105,11 @@ msgstr "Tilf
 msgid "All"
 msgstr "Alle"
 
-#: templates/manager/javascript.inc:202
+#: templates/javascript/manager.js:39 templates/javascript/src/manager.js:209
 msgid "Are you sure you wish to continue?"
 msgstr "Er du sikker, at du vil fortsætte?"
 
-#: templates/manager/javascript.inc:198
+#: templates/javascript/manager.js:39 templates/javascript/src/manager.js:205
 msgid "Are you sure?"
 msgstr "Er du sikker?"
 
@@ -125,7 +137,7 @@ msgstr "Backend'er"
 msgid "Below is the current contents of your clipboard."
 msgstr "Nedenfor ses det aktuelle indhold af din udklipsholder."
 
-#: clipboard.php:37 manager.php:254 selectlist.php:102
+#: clipboard.php:37 manager.php:255 selectlist.php:102
 msgid "Cancel"
 msgstr "Annuller"
 
@@ -136,7 +148,7 @@ msgstr "Kan ikke udf
 
 #: manager.php:133
 msgid "Cannot copy items onto clipboard."
-msgstr "Kan ikke kopiere elementer til udklipsholder."
+msgstr "Kan ikke kopiere element til udklipsholder."
 
 #: manager.php:192
 #, php-format
@@ -155,9 +167,9 @@ msgstr "Kan ikke slette \"%s\": %s"
 #: manager.php:157
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr "Kan ikke indsætte \"%s\" (fil visket udklipsholder): %s"
+msgstr "Kan ikke indsætte \"%s\" (fil visket af udklipsholderen): %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:71
+#: lib/Gollem.php:777 templates/manager/manager.html:64
 msgid "Change Folder"
 msgstr "Skift mappe"
 
@@ -177,11 +189,11 @@ msgstr "
 msgid "Check Quota"
 msgstr "Tjek kvote"
 
-#: manager.php:492
+#: manager.php:493
 msgid "Check _All/None"
 msgstr "Hak alle/ingen af"
 
-#: templates/manager/manager.html:113
+#: templates/manager/manager.html:104
 msgid "Chmod Items"
 msgstr "Chmod elementer"
 
@@ -205,7 +217,7 @@ msgstr "Udklipsholder"
 msgid "Close"
 msgstr "Luk"
 
-#: login.php:254
+#: login.php:256
 #, php-format
 msgid "Connect to: %s"
 msgstr "Forbind til: %s"
@@ -214,11 +226,11 @@ msgstr "Forbind til: %s"
 msgid "Copy"
 msgstr "Kopier"
 
-#: templates/manager/manager.html:116
+#: templates/manager/manager.html:107
 msgid "Copy Items"
 msgstr "Kopiér elementer"
 
-#: lib/Gollem.php:774 templates/manager/manager.html:57
+#: lib/Gollem.php:774 templates/manager/manager.html:52
 msgid "Create Folder"
 msgstr "Opret mappe"
 
@@ -228,7 +240,7 @@ msgid ""
 "Created empty permissions for \"%s\". You must explicitly grant access to "
 "this backend now."
 msgstr ""
-"Oprettede tomme tilladelser for \"%s\". Du skal eksplicit tillade adgang til "
+"Oprettede blanke rettigheder for \"%s\". Du skal eksplicit give adgang til "
 "denne backend nu."
 
 #: templates/clipboard/clipboard.html:17
@@ -239,7 +251,7 @@ msgstr "Aktuelt katalog:"
 msgid "Cut"
 msgstr "Klip"
 
-#: templates/manager/manager.html:115
+#: templates/manager/manager.html:106
 msgid "Cut Items"
 msgstr "Klip elementer"
 
@@ -251,7 +263,7 @@ msgstr "Standard sorteringskriterie:"
 msgid "Default sorting direction:"
 msgstr "Standard sorteringsretning:"
 
-#: templates/manager/manager.html:110
+#: templates/manager/manager.html:101
 msgid "Delete Items"
 msgstr "Slet elementer"
 
@@ -267,11 +279,11 @@ msgstr "Faldende"
 msgid "Done"
 msgstr "Færdig"
 
-#: manager.php:214
+#: manager.php:216
 msgid "Download"
 msgstr "Hent"
 
-#: manager.php:381
+#: manager.php:382
 #, php-format
 msgid "Download %s"
 msgstr "Hent %s"
@@ -288,7 +300,8 @@ msgstr "eMail"
 msgid "Execute"
 msgstr "Udfør"
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:179
+#: templates/javascript/manager.js:96 templates/javascript/src/manager.js:492
+#: templates/manager/manager.html:170
 msgid "File"
 msgstr "Fil"
 
@@ -325,7 +338,7 @@ msgstr "Fil modtaget: %s"
 msgid "Folder removed: "
 msgstr "Mappe fjernet: "
 
-#: templates/manager/manager.html:73
+#: templates/manager/manager.html:66
 msgid "Go to:"
 msgstr "Gå til:"
 
@@ -333,7 +346,7 @@ msgstr "G
 msgid "Gollem Backend Permissions Administration"
 msgstr "Gollem backend tilladelsesadministration"
 
-#: manager.php:471 templates/manager/manager.html:8
+#: manager.php:472 templates/manager/manager.html:8
 msgid "Group"
 msgstr "Gruppe"
 
@@ -343,12 +356,12 @@ msgstr "Hjem"
 
 #: manager.php:56
 msgid "Incorrect number of items."
-msgstr "Fejlagtig antal elementer."
+msgstr "Ukorrekt antal elementer."
 
 #: manager.php:126
 #, php-format
 msgid "Item copied to clipboard: %s"
-msgstr "Element kopiet til udklipsholder: %s"
+msgstr "Element kopieret til udklipsholder: %s"
 
 #: manager.php:128
 #, php-format
@@ -363,7 +376,7 @@ msgstr "Sprog"
 msgid "List folders first?"
 msgstr "List mapper først?"
 
-#: login.php:303
+#: login.php:305
 msgid "Login"
 msgstr "Log ind"
 
@@ -373,13 +386,13 @@ msgstr "MB fri"
 
 #: quota.php:62
 msgid "MB used"
-msgstr "MB forbrugt"
+msgstr "MB brugt"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "Menuliste"
 
-#: manager.php:445
+#: manager.php:446
 msgid "Modified"
 msgstr "Modificeret"
 
@@ -391,11 +404,11 @@ msgstr "Flyt til venstre"
 msgid "Move right"
 msgstr "Flyt til højre"
 
-#: manager.php:432
+#: manager.php:433
 msgid "Name"
 msgstr "Navn"
 
-#: templates/manager/manager.html:45 templates/manager/manager.html:59
+#: templates/manager/manager.html:42 templates/manager/manager.html:54
 msgid "Name:"
 msgstr "Navn:"
 
@@ -411,11 +424,11 @@ msgstr "Nej"
 msgid "No quota found."
 msgstr "Ingen kvote fundet."
 
-#: manager.php:255
+#: manager.php:256
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:465 templates/manager/manager.html:7
+#: manager.php:466 templates/manager/manager.html:7
 msgid "Owner"
 msgstr "Ejer"
 
@@ -427,7 +440,7 @@ msgstr "Kodeord"
 msgid "Paste"
 msgstr "Indsæt"
 
-#: manager.php:459
+#: manager.php:460
 msgid "Permission"
 msgstr "Tilladelse"
 
@@ -445,11 +458,11 @@ msgstr "Tilladelse til mappe \"%s\" n
 msgid "Permissions"
 msgstr "Tilladelser"
 
-#: templates/login/javascript.inc:36
+#: templates/javascript/login.js:6 templates/javascript/src/login.js:43
 msgid "Please provide your password."
 msgstr "Indtast venligst dit kodeord."
 
-#: templates/login/javascript.inc:31
+#: templates/javascript/login.js:6 templates/javascript/src/login.js:38
 msgid "Please provide your username."
 msgstr "Indtast venligst dit brugernavn."
 
@@ -457,11 +470,11 @@ msgstr "Indtast venligst dit brugernavn."
 msgid "Please select a backend:"
 msgstr "Vælg en backend:"
 
-#: templates/manager/javascript.inc:132
+#: templates/javascript/manager.js:28 templates/javascript/src/manager.js:139
 msgid "Please select an item before this action."
 msgstr "Vælg et element før denne handling."
 
-#: templates/manager/javascript.inc:456
+#: templates/javascript/manager.js:93 templates/javascript/src/manager.js:463
 msgid "Please specify at least one file to upload."
 msgstr "Specificér mindst én fil, som skal lægges op."
 
@@ -477,7 +490,7 @@ msgstr "Kvoteforbrug"
 msgid "Read"
 msgstr "Læs"
 
-#: manager.php:262
+#: manager.php:263
 msgid "Refresh"
 msgstr "Opdater"
 
@@ -485,11 +498,11 @@ msgstr "Opdater"
 msgid "Remove column"
 msgstr "Fjern kolonne"
 
-#: templates/manager/manager.html:43
+#: templates/manager/manager.html:40
 msgid "Rename"
 msgstr "Omdøb"
 
-#: templates/manager/manager.html:107
+#: templates/manager/manager.html:98
 msgid "Rename Items"
 msgstr "Omdøb elementer"
 
@@ -497,7 +510,7 @@ msgstr "Omd
 msgid "Root"
 msgstr "Rod"
 
-#: manager.php:253
+#: manager.php:254
 msgid "Save"
 msgstr "Gem"
 
@@ -517,23 +530,24 @@ msgstr "Ops
 msgid "Show dotfiles?"
 msgstr "Vis skjulte filer?"
 
-#: manager.php:452
+#: manager.php:453
 msgid "Size"
 msgstr "Størrelse"
 
-#: manager.php:478
+#: manager.php:479
 msgid "Sort Direction"
 msgstr "Sorteringsretning"
 
-#: templates/manager/javascript.inc:202
+#: templates/javascript/manager.js:39 templates/javascript/src/manager.js:209
 msgid "The following item(s) are folders: "
 msgstr "Følgende element(er) er mapper: "
 
-#: templates/manager/javascript.inc:198
+#: templates/javascript/manager.js:39 templates/javascript/src/manager.js:205
 msgid "The following items will be permanently deleted: "
-msgstr "Følgende elementer vil blive slette uigenkaldeligt: "
+msgstr "Følgende elementer vil blive slettet uigenkaldeligt: "
 
-#: templates/selectlist/javascript.inc:9
+#: templates/javascript/selectlist.js:2
+#: templates/javascript/src/selectlist.js:16
 msgid "The original opener window has been closed. Exiting."
 msgstr "Vinduet, der har åbnet dette vindue, er blevet lukket. Afslutter."
 
@@ -541,7 +555,7 @@ msgstr "Vinduet, der har 
 msgid "There are no backends available for the current user."
 msgstr "Ingen backends tilgængelige til den aktuelle bruger."
 
-#: selectlist.php:193 templates/manager/manager.html:128
+#: selectlist.php:193 templates/manager/manager.html:119
 msgid "There are no files in this folder."
 msgstr "Denne mappe indeholder ingen filer."
 
@@ -549,17 +563,19 @@ msgstr "Denne mappe indeholder ingen filer."
 msgid ""
 "To clear items from the clipboard, check the box next to the filename and "
 "click on &quot;Clear&quot;."
-msgstr "For at viske fra udklipsholderen, markér filnavnet og klik 'Visk ud'."
+msgstr ""
+"For at slette elementer fra udklipsholderen skal du markere kassen ved siden "
+"af filnavnet og klikke 'Visk ud'."
 
 #: templates/clipboard/clipboard.html:13
 msgid ""
 "To paste items from the clipboard to the current directory, check the box "
 "next to the filename and click on &quot;Paste&quot;."
 msgstr ""
-"For at indsætte elementer fra udklipsholderen til det aktuelle katalog, "
-"markér kassen ved siden af filen og klik 'Indsæt'."
+"For at indsætte elementer fra udklipsholderen til det aktuelle katalog skal "
+"du markere kassen ved siden af filnavnet, og klikke 'Indsæt'."
 
-#: manager.php:425
+#: manager.php:426
 msgid "Type"
 msgstr "Type"
 
@@ -573,7 +589,7 @@ msgstr "Kan ikke oprette backend-tilladelser: %s"
 msgid "Up to %s"
 msgstr "Op til %s"
 
-#: manager.php:274
+#: manager.php:275
 msgid "Upload File(s)"
 msgstr "Læg fil(er) op"
 
@@ -585,7 +601,7 @@ msgstr "Brugergr
 msgid "Username"
 msgstr "Brugernavn"
 
-#: manager.php:269
+#: manager.php:270
 msgid "View Clipboard"
 msgstr "Vis udklipsholder"
 
@@ -605,7 +621,8 @@ msgstr "Ja"
 #: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
 msgstr ""
-"Du skal have mindst én backend defineret for at kunne indstille tilladelser."
+"Du har brug for at have mindst én backend defineret for at kunne indstille "
+"tilladelser."
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
@@ -615,10 +632,10 @@ msgstr "Din browser underst
 msgid "_Change Server"
 msgstr "Skift server"
 
-#: manager.php:215 selectlist.php:74
+#: manager.php:217 selectlist.php:74
 msgid "folder"
 msgstr "mappe"
 
-#: manager.php:216 selectlist.php:75
+#: manager.php:218 selectlist.php:75
 msgid "symlink"
 msgstr "symlink"
diff --git a/po/de_DE.po b/po/de_DE.po
index 62ccc96..0e5576c 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -1,90 +1,86 @@
-# Gollem German translation.
-# Copyright (C) 2001-2005 Jan Schneider.
-# Jan Schneider <jan at horde.org>, 2001-2005.
+# German translations for Gollem.
+# Copyright 2001-2009 The Horde Project
+# This file is distributed under the same license as the Gollem package.
+# Jan Schneider <jan at horde.org>, 2001-2009.
 #
 # item: Element
 # directory/folder: Verzeichnis
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem 1.0-cvs\n"
+"Project-Id-Version: Gollem 1.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-11-03 23:12+0100\n"
-"PO-Revision-Date: 2006-08-09 17:14+0200\n"
+"POT-Creation-Date: 2009-03-19 10:37+0100\n"
+"PO-Revision-Date: 2009-03-19 11:08+0100\n"
 "Last-Translator: Jan Schneider <jan at horde.org>\n"
 "Language-Team: German <dev at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: manager.php:52
+#: manager.php:57
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
 msgstr "\"%s\" nach \"%s\" umbenannt"
 
-#: quota.php:59
+#: quota.php:56
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
 msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:268
+#: manager.php:560
 #, php-format
-msgid "%d items"
-msgstr "%d Elemente"
-
-#: manager.php:415
-#, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr "%s Verzeichnisse und %s Dateien (%s KB)"
+msgid "%d item"
+msgstr "%d Element"
 
-#: manager.php:413
+#: manager.php:560
 #, php-format
-msgid "%s Folders and 1 File (%s Kb)"
-msgstr "%s Verzeichnisse und 1 Datei (%s KB)"
+msgid "%d items"
+msgstr "%d Elemente"
 
-#: login.php:143
+#: login.php:144
 #, php-format
 msgid "%s Login"
 msgstr "%s Anmeldung"
 
-#: manager.php:159
+#: edit.php:35
 #, php-format
-msgid "%s was successfully pasted."
-msgstr "%s wurde erfolgreich eingefügt."
-
-#: manager.php:410
-#, php-format
-msgid "1 Folder and %s Files (%s Kb)"
-msgstr "1 Verzeichnis und %s Dateien (%s KB)"
+msgid "%s successfully saved."
+msgstr "%s erfolgreich gespeichert."
 
-#: manager.php:408
+#: manager.php:179
 #, php-format
-msgid "1 Folder and 1 File (%s Kb)"
-msgstr "1 Verzeichnis und 1 Datei (%s KB)"
+msgid "%s was successfully pasted."
+msgstr "%s wurde erfolgreich eingefügt."
 
-#: manager.php:268
-msgid "1 item"
-msgstr "1 Element"
+#: templates/javascript_defs.php:15
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"Ein Popup-Fenster konnte nicht geöffnet werden. Vielleicht haben Sie Ihren "
+"Browser so eingestellt, dass er Popup-Fenster blockiert?"
 
-#: view.php:31
+#: edit.php:33 edit.php:43 view.php:35 view.php:42
 #, php-format
 msgid "Access denied to %s"
 msgstr "Zugriff auf %s verweigert"
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
-#: lib/Gollem.php:490
+#: lib/Gollem.php:109 lib/Gollem.php:431 lib/Gollem.php:493 lib/Gollem.php:514
+#: lib/Gollem.php:531
 #, php-format
 msgid "Access denied to folder \"%s\"."
 msgstr "Zugriff auf Verzeichnis \"%s\" verweigert."
 
-#: templates/manager/manager.html:111
+#: templates/manager/manager.html:108
 msgid "Actions:"
 msgstr "Aktionen:"
 
-#: selectlist.php:91
+#: selectlist.php:99
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
 msgstr "Spalte hinzufügen"
 
@@ -92,11 +88,11 @@ msgstr "Spalte hinzuf
 msgid "All"
 msgstr "Alle"
 
-#: templates/manager/javascript.inc:202
+#: templates/javascript_defs.php:26
 msgid "Are you sure you wish to continue?"
 msgstr "Sind Sie sicher, dass Sie fortfahren möchten?"
 
-#: templates/manager/javascript.inc:198
+#: templates/javascript_defs.php:24
 msgid "Are you sure?"
 msgstr "Sind Sie sicher?"
 
@@ -104,7 +100,7 @@ msgstr "Sind Sie sicher?"
 msgid "Ascending"
 msgstr "Aufsteigend"
 
-#: config/prefs.php.dist:93
+#: config/prefs.php.dist:102
 msgid "Ask"
 msgstr "Nachfragen"
 
@@ -116,7 +112,7 @@ msgstr "Attribute"
 msgid "Available Columns:"
 msgstr "Verfügbare Spalten:"
 
-#: lib/api.php:46
+#: lib/api.php:483
 msgid "Backends"
 msgstr "Backends"
 
@@ -124,44 +120,44 @@ msgstr "Backends"
 msgid "Below is the current contents of your clipboard."
 msgstr "Unten sehen Sie den aktuellen Inhalt der Zwischenablage."
 
-#: manager.php:263 selectlist.php:93 clipboard.php:37
+#: manager.php:285 selectlist.php:101 clipboard.php:38
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: manager.php:72
+#: manager.php:79
 #, php-format
-msgid "Cannot chmod %s"
-msgstr "Zugriffsrechte für %s konnten nicht geändert werden."
+msgid "Cannot chmod %s: %s"
+msgstr "Die Zugriffsrechte für \"%s\" konnten nicht geändert werden: %s"
 
-#: manager.php:133
+#: manager.php:150
 msgid "Cannot copy items onto clipboard."
 msgstr "Elemente konnten nicht in die Zwischenablage kopiert werden."
 
-#: manager.php:192
+#: manager.php:212
 #, php-format
 msgid "Cannot create home directory: %s"
 msgstr "Das Heimverzeichnis kann nicht erstellt werden: %s"
 
-#: manager.php:135
+#: manager.php:152
 msgid "Cannot cut items onto clipboard."
 msgstr "Elemente konnten nicht in die Zwischenablage verschoben werden."
 
-#: manager.php:80
-#, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr "\"%s\" kann nicht gelöscht werden: %s"
-
-#: manager.php:157
+#: manager.php:173
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr ""
 "\"%s\" kann nicht eingefügt werden (Datei aus Zwischenablage entfernt): %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:77
+#: manager.php:313 templates/manager/manager.html:70
 msgid "Change Folder"
 msgstr "Verzeichnis wechseln"
 
-#: selectlist.php:101 lib/Gollem.php:821
+#: templates/manager/manager.html:110
+msgid "Change Permissions"
+msgstr "Rechte Ändern"
+
+#: selectlist.php:109 lib/Gollem.php:853
 msgid "Change Server"
 msgstr "Server wechseln"
 
@@ -173,19 +169,15 @@ msgstr "
 msgid "Change your file sorting options."
 msgstr "Ändern Sie die Sortierkriterien für die Dateien."
 
-#: lib/Gollem.php:795
+#: lib/Gollem.php:828
 msgid "Check Quota"
-msgstr "Speicherplatz"
+msgstr "Speicherplatzkontingent überprüfen"
 
-#: manager.php:492
+#: manager.php:556
 msgid "Check _All/None"
 msgstr "_Alle/Keine auswählen"
 
-#: templates/manager/manager.html:113
-msgid "Chmod"
-msgstr "Rechte ändern"
-
-#: manager.php:70
+#: manager.php:77
 msgid "Chmod done: "
 msgstr "Zugriffsrechte geändert:"
 
@@ -193,28 +185,33 @@ msgstr "Zugriffsrechte ge
 msgid "Choose the columns to display in the file manager."
 msgstr "Wählen Sie die anzuzeigenden Spalten im Dateimanager."
 
-#: clipboard.php:38
+#: clipboard.php:39 templates/manager/manager.html:129
 msgid "Clear"
 msgstr "Entfernen"
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
 msgstr "Zwischenablage"
 
-#: quota.php:31
+#: quota.php:32
 msgid "Close"
 msgstr "Schließen"
 
-#: login.php:254
+#: login.php:258
 #, php-format
 msgid "Connect to: %s"
 msgstr "Verbinden zu Server: %s"
 
-#: clipboard.php:41 templates/manager/manager.html:116
+#: clipboard.php:42 templates/manager/manager.html:113
 msgid "Copy"
 msgstr "Kopieren"
 
-#: lib/Gollem.php:774 templates/manager/manager.html:63
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Die kompilierte Templatedatei '%s' konnte nicht gespeichert werden."
+
+#: manager.php:306 templates/manager/manager.html:58
 msgid "Create Folder"
 msgstr "Verzeichnis erstellen"
 
@@ -231,7 +228,7 @@ msgstr ""
 msgid "Current directory:"
 msgstr "Aktuelles Verzeichnis:"
 
-#: clipboard.php:40 templates/manager/manager.html:117
+#: clipboard.php:41 templates/manager/manager.html:114
 msgid "Cut"
 msgstr "Ausschneiden"
 
@@ -243,11 +240,11 @@ msgstr "Sortierreihenfolge:"
 msgid "Default sorting direction:"
 msgstr "Sortierrichtung:"
 
-#: templates/manager/manager.html:120
+#: templates/manager/manager.html:117
 msgid "Delete"
 msgstr "Löschen"
 
-#: config/prefs.php.dist:95
+#: config/prefs.php.dist:104
 msgid "Delete folders recursively?"
 msgstr "Verzeichnisse rekursiv löschen?"
 
@@ -255,15 +252,15 @@ msgstr "Verzeichnisse rekursiv l
 msgid "Descending"
 msgstr "Absteigend"
 
-#: selectlist.php:92
+#: selectlist.php:100
 msgid "Done"
 msgstr "Fertig"
 
-#: manager.php:214
+#: manager.php:235
 msgid "Download"
 msgstr "Herunterladen"
 
-#: manager.php:382
+#: manager.php:440
 #, php-format
 msgid "Download %s"
 msgstr "%s Herunterladen"
@@ -272,15 +269,24 @@ msgstr "%s Herunterladen"
 msgid "ERROR:"
 msgstr "FEHLER:"
 
+#: manager.php:234
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "%s Bearbeiten"
+
 #: config/credentials.php.dist:28
 msgid "Email"
-msgstr "E-Mail"
+msgstr "Email"
 
 #: templates/manager/manager.html:26
 msgid "Execute"
 msgstr "Ausführen"
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:183
+#: templates/javascript_defs.php:28 templates/manager/manager.html:195
 msgid "File"
 msgstr "Datei"
 
@@ -304,20 +310,36 @@ msgstr "Dateigr
 msgid "File Type"
 msgstr "Dateityp"
 
-#: manager.php:76
+#: manager.php:96
 msgid "File deleted: "
 msgstr "Datei gelöscht: "
 
-#: manager.php:101
+#: manager.php:119
 #, php-format
 msgid "File received: %s"
 msgstr "Datei hochgeladen: %s"
 
-#: manager.php:78
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr "Dateien müssen innerhalb eines VFS-Backends gespeichert werden."
+
+#: templates/manager/manager.html:127
+msgid "Filter"
+msgstr "Filter"
+
+#: templates/manager/manager.html:126
+msgid "Filter:"
+msgstr "Filter:"
+
+#: manager.php:88
 msgid "Folder removed: "
 msgstr "Verzeichnis gelöscht: "
 
-#: templates/manager/manager.html:79
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr "Ordner müssen innerhalb eines VFS-Backends angelegt werden."
+
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "Gehe zu:"
 
@@ -325,29 +347,35 @@ msgstr "Gehe zu:"
 msgid "Gollem Backend Permissions Administration"
 msgstr "Gollem Backend Rechteverwaltung"
 
-#: manager.php:472 templates/manager/manager.html:10
+#: manager.php:535 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Gruppe"
 
-#: lib/Gollem.php:770
-msgid "Home"
-msgstr "Heimverzeichnis"
-
-#: manager.php:56
+#: manager.php:62
 msgid "Incorrect number of items."
 msgstr "Ungültige Anzahl von Elementen."
 
-#: manager.php:126
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Ungültiges Backend: %s"
+
+#: manager.php:143
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "Element in Zwischenablage kopiert: %s"
 
-#: manager.php:128
+#: manager.php:145
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr "Element in Zwischenablage verschoben: %s"
 
-#: templates/login/login.html:67
+#: config/prefs.php.dist:90
+msgid "Items per page"
+msgstr "Elemente pro Seite"
+
+#: templates/login/login.html:68
 msgid "Language"
 msgstr "Sprache"
 
@@ -355,47 +383,39 @@ msgstr "Sprache"
 msgid "List folders first?"
 msgstr "Verzeichnisse zuerst anzeigen?"
 
-#: login.php:303
+#: login.php:307
 msgid "Login"
 msgstr "Anmelden"
 
-#: quota.php:62
-msgid "MB free"
-msgstr "MB frei"
-
-#: quota.php:62
-msgid "MB used"
-msgstr "MB belegt"
-
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "Menüliste"
 
-#: manager.php:446
+#: manager.php:505
 msgid "Modified"
 msgstr "Geändert"
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
 msgstr "Nach links"
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
 msgstr "Nach rechts"
 
-#: manager.php:433
+#: manager.php:483
 msgid "Name"
 msgstr "Name"
 
-#: templates/manager/manager.html:49 templates/manager/manager.html:65
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "Name:"
 
-#: manager.php:35
+#: manager.php:41
 msgid "New folder created: "
 msgstr "Neues Verzeichnis erstellt: "
 
-#: config/prefs.php.dist:91
+#: config/prefs.php.dist:100
 msgid "No"
 msgstr "Nein"
 
@@ -403,11 +423,11 @@ msgstr "Nein"
 msgid "No quota found."
 msgstr "Kein Speicherplatzkontingent gefunden."
 
-#: manager.php:264
+#: manager.php:286
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:466 templates/manager/manager.html:9
+#: manager.php:528 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "Besitzer"
 
@@ -415,33 +435,34 @@ msgstr "Besitzer"
 msgid "Password"
 msgstr "Passwort"
 
-#: clipboard.php:39
+#: clipboard.php:40
 msgid "Paste"
 msgstr "Einfügen"
 
-#: manager.php:460
+#: manager.php:521
 msgid "Permission"
 msgstr "Rechte"
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "Zugriff auf %s verweigert: %s"
 
-#: manager.php:200
+#: manager.php:220
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
 msgstr "Zugriff auf Verzeichnis \"%s\" verweigert: %s"
 
-#: lib/Gollem.php:784
-msgid "Permissions"
-msgstr "Rechte"
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
+msgstr "Zugriff auf dieses Backend verweigert."
 
-#: templates/login/javascript.inc:36
+#: templates/javascript_defs.php:19
 msgid "Please provide your password."
 msgstr "Bitte geben Sie Ihr Passwort an."
 
-#: templates/login/javascript.inc:31
+#: templates/javascript_defs.php:18
 msgid "Please provide your username."
 msgstr "Bitte geben Sie Ihren Benutzernamen an."
 
@@ -449,43 +470,47 @@ msgstr "Bitte geben Sie Ihren Benutzernamen an."
 msgid "Please select a backend:"
 msgstr "Bitte wählen Sie ein Backend:"
 
-#: templates/manager/javascript.inc:132
+#: templates/javascript_defs.php:22
 msgid "Please select an item before this action."
 msgstr "Bitte wählen Sie ein Element aus, bevor Sie diese Aktion durchführen."
 
-#: templates/manager/javascript.inc:456
+#: templates/javascript_defs.php:27
 msgid "Please specify at least one file to upload."
 msgstr "Bitte geben Sie mindestens eine Datei zum Hochladen an."
 
-#: quota.php:18 templates/quota/quota.html:2
+#: quota.php:19 templates/quota/quota.html:2
 msgid "Quota Display"
-msgstr "Speicherplatz-Kontingent"
-
-#: quota.php:61
-msgid "Quota Usage"
-msgstr "Speicherplatz-Kontingent"
+msgstr "Speicherplatzkontingent"
 
 #: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Lesen"
 
-#: manager.php:270
+#: manager.php:291
 msgid "Refresh"
 msgstr "Aktualisiere"
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
 msgstr "Spalte löschen"
 
-#: templates/manager/manager.html:47 templates/manager/manager.html:123
+#: templates/manager/manager.html:44 templates/manager/manager.html:120
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
-msgid "Root"
-msgstr "Wurzel"
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
+msgstr "Umbenennen über verschiedene Backends hinweg wird nicht unterstützt."
 
-#: manager.php:262
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr "Das Umbenennen von Backends ist nicht erlaubt."
+
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Zurücksetzen"
+
+#: manager.php:284 templates/edit/edit.inc:11
 msgid "Save"
 msgstr "Speichern"
 
@@ -493,9 +518,9 @@ msgstr "Speichern"
 msgid "Selected Columns:"
 msgstr "Ausgewählte Spalten:"
 
-#: templates/login/login.html:31
+#: templates/login/login.html:32
 msgid "Server"
-msgstr "FTP-Server"
+msgstr "Server"
 
 #: config/prefs.php.dist:20
 msgid "Settings"
@@ -505,31 +530,31 @@ msgstr "Einstellungen"
 msgid "Show dotfiles?"
 msgstr "Versteckte Dateien anzeigen?"
 
-#: manager.php:453
+#: manager.php:513
 msgid "Size"
 msgstr "Größe"
 
-#: manager.php:479
-msgid "Sort Direction"
-msgstr "Sortierrichtung"
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
+msgstr "Der Anwendungsordner kann nicht gelöscht werden."
 
-#: templates/manager/javascript.inc:202
-msgid "The following item(s) are folders: "
-msgstr "Die folgenden Elemente sind Verzeichnisse: "
+#: templates/javascript_defs.php:25
+msgid "The following item(s) are folders:"
+msgstr "Die folgenden Elemente sind Verzeichnisse:"
 
-#: templates/manager/javascript.inc:198
-msgid "The following items will be permanently deleted: "
-msgstr "Die folgenden Elemente werden endgültig gelöscht: "
+#: templates/javascript_defs.php:23
+msgid "The following items will be permanently deleted:"
+msgstr "Die folgenden Elemente werden endgültig gelöscht:"
 
-#: templates/selectlist/javascript.inc:9
+#: templates/javascript_defs.php:31
 msgid "The original opener window has been closed. Exiting."
 msgstr "Das Ursprungs-Fenster ist geschlossen worden. Abbruch."
 
-#: login.php:150
+#: login.php:151
 msgid "There are no backends available for the current user."
-msgstr "Für den aktuellen Benutzer stehen keine Backends zur Verfügung."
+msgstr "Es gibt keine Backends, auf die Sie Zugriff haben."
 
-#: selectlist.php:185 templates/manager/manager.html:134
+#: selectlist.php:199 templates/manager/manager.html:138
 msgid "There are no files in this folder."
 msgstr "Dieses Verzeichnis ist leer."
 
@@ -550,21 +575,36 @@ msgstr ""
 "markieren Sie das Kästchen neben dem Dateinamen und klicken Sie auf &quot;"
 "Einfügen&quot;."
 
-#: manager.php:426
+#: manager.php:475
 msgid "Type"
 msgstr "Typ"
 
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr "Gollemsession konnte nicht gestartet werden"
+
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
-msgstr "Backendrechte konnten nicht erstellt werden: %s"
+msgstr "Die Backendrechte konnten nicht erstellt werden: %s"
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: manager.php:93
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "Die Datei \"%s\" konnte nicht gelöscht werden: %s"
+
+#: manager.php:85
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "Das Verzeichnis \"%s\" konnte nicht gelöscht werden: %s"
+
+#: lib/Gollem.php:781 lib/Gollem.php:791
 #, php-format
 msgid "Up to %s"
 msgstr "Hoch nach %s"
 
-#: manager.php:283
+#: manager.php:303
 msgid "Upload File(s)"
 msgstr "Datei(en) Hochladen"
 
@@ -576,11 +616,11 @@ msgstr "Benutzeroberfl
 msgid "Username"
 msgstr "Benutzername"
 
-#: manager.php:278
+#: manager.php:298
 msgid "View Clipboard"
 msgstr "Zwischenablage anzeigen"
 
-#: login.php:195
+#: login.php:201
 #, php-format
 msgid "Welcome to %s"
 msgstr "Willkommen bei %s"
@@ -589,7 +629,7 @@ msgstr "Willkommen bei %s"
 msgid "Write"
 msgstr "Schreiben"
 
-#: config/prefs.php.dist:92
+#: config/prefs.php.dist:101
 msgid "Yes"
 msgstr "Ja"
 
@@ -603,14 +643,22 @@ msgstr ""
 msgid "Your browser does not support inline display of this image type"
 msgstr "Ihr Browser kann dieses Bild nicht direkt anzeigen"
 
-#: lib/Gollem.php:819 lib/Gollem.php:822
+#: lib/Gollem.php:851 lib/Gollem.php:854
 msgid "_Change Server"
 msgstr "Server _wechseln"
 
-#: manager.php:215 selectlist.php:74
+#: lib/Gollem.php:812
+msgid "_My Home"
+msgstr "_Meine Startseite"
+
+#: lib/Gollem.php:817
+msgid "_Permissions"
+msgstr "_Rechte"
+
+#: manager.php:236 selectlist.php:75
 msgid "folder"
 msgstr "Verzeichnis"
 
-#: manager.php:216 selectlist.php:75
+#: manager.php:237 selectlist.php:76
 msgid "symlink"
 msgstr "symbolischer Link"
diff --git a/po/es_ES.po b/po/es_ES.po
index 06d5645..caed8a0 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -1,91 +1,85 @@
-# Spanish translations for horde package
-# Traducciones al español para el paquete horde.
-# Copyright (C) 2004 Horde Project
-# This file is distributed under the same license as the horde package.
-# Automatically generated, 2004.
+# Spanish translations for gollem package.
+# Traducciones al español para el paquete gollem.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the gollem package.
+# Automatically generated, 2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem 1.0-cvs\n"
+"Project-Id-Version: Gollem 1.0.3\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-05-18 08:26+0200\n"
-"PO-Revision-Date: 2006-02-02 12:09+0100\n"
+"POT-Creation-Date: 2009-02-20 15:16+0100\n"
+"PO-Revision-Date: 2009-02-20 15:16+0100\n"
 "Last-Translator: Manuel P. Ayala <mayala at unex.es>\n"
 "Language-Team: i18n at lists.horde.org\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: manager.php:52
+#: manager.php:57
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
 msgstr "\"%s\" se ha renombrado como \"%s\""
 
-#: quota.php:59
+#: quota.php:56
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
 msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:264
+#: manager.php:560
 #, php-format
-msgid "%d items"
-msgstr "%d elementos"
-
-#: manager.php:417
-#, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr "%s Carpetas y %s Archivos (%s Kb)"
+msgid "%d item"
+msgstr "%d elemento"
 
-#: manager.php:415
+#: manager.php:560
 #, php-format
-msgid "%s Folders and 1 File (%s Kb)"
-msgstr "%s Carpetas y 1 Archivo (%s Kb)"
+msgid "%d items"
+msgstr "%d elementos"
 
-#: login.php:143
+#: login.php:144
 #, php-format
 msgid "%s Login"
 msgstr "Inicio de %s"
 
-#: manager.php:159
-#, php-format
-msgid "%s was successfully pasted."
-msgstr "%s se ha pegado correctamente."
-
-#: manager.php:412
+#: edit.php:35
 #, php-format
-msgid "1 Folder and %s Files (%s Kb)"
-msgstr "1 Carpeta y %s Archivos (%s Kb)"
+msgid "%s successfully saved."
+msgstr "%s guardado correctamente."
 
-#: manager.php:410
+#: manager.php:179
 #, php-format
-msgid "1 Folder and 1 File (%s Kb)"
-msgstr "1 Carpeta y 1 Archivo (%s Kb)"
+msgid "%s was successfully pasted."
+msgstr "%s se ha pegado correctamente."
 
-#: manager.php:264
-msgid "1 item"
-msgstr "1 elemento"
+#: templates/javascript_defs.php:15
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"No se pudo abrir una ventana emergente. ¿Quizás ha configurado su navegador "
+"para bloquear las ventanas emergentes?"
 
-#: view.php:31
+#: edit.php:33 edit.php:43 view.php:35 view.php:42
 #, php-format
 msgid "Access denied to %s"
-msgstr "Se ha denegado el acceso a %s"
+msgstr "Acceso denegado a %s"
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
-#: lib/Gollem.php:490
+#: lib/Gollem.php:109 lib/Gollem.php:431 lib/Gollem.php:493 lib/Gollem.php:514
+#: lib/Gollem.php:531
 #, php-format
 msgid "Access denied to folder \"%s\"."
 msgstr "Se ha denegado el acceso a la carpeta \"%s\"."
 
-#: templates/manager/manager.html:111
+#: templates/manager/manager.html:108
 msgid "Actions:"
 msgstr "Acciones:"
 
-#: selectlist.php:100
+#: selectlist.php:99
 msgid "Add"
 msgstr "Añadir"
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
 msgstr "Añadir columna"
 
@@ -93,11 +87,11 @@ msgstr "A
 msgid "All"
 msgstr "Todos"
 
-#: templates/manager/javascript.inc:202
+#: templates/javascript_defs.php:26
 msgid "Are you sure you wish to continue?"
 msgstr "¿Seguro que desea continuar?"
 
-#: templates/manager/javascript.inc:198
+#: templates/javascript_defs.php:24
 msgid "Are you sure?"
 msgstr "¿Está seguro?"
 
@@ -105,7 +99,7 @@ msgstr "
 msgid "Ascending"
 msgstr "Ascendente"
 
-#: config/.bak/prefs.php.dist:93
+#: config/.bak/prefs.php.dist:102
 msgid "Ask"
 msgstr "Consultar"
 
@@ -117,7 +111,7 @@ msgstr "Atributos"
 msgid "Available Columns:"
 msgstr "Columnas disponibles:"
 
-#: lib/api.php:46
+#: lib/api.php:483
 msgid "Backends"
 msgstr "Motores"
 
@@ -125,43 +119,43 @@ msgstr "Motores"
 msgid "Below is the current contents of your clipboard."
 msgstr "A continuación se muestra el contenido actual del Portapapeles."
 
-#: clipboard.php:37 manager.php:258 selectlist.php:102
+#: selectlist.php:101 clipboard.php:38 manager.php:285
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: manager.php:72
+#: manager.php:79
 #, php-format
-msgid "Cannot chmod %s"
-msgstr "No se puede usar chmod en %s"
+msgid "Cannot chmod %s: %s"
+msgstr "No se puede hacer chmod %s: %s"
 
-#: manager.php:133
+#: manager.php:150
 msgid "Cannot copy items onto clipboard."
 msgstr "No se pueden copiar elementos al portapapeles."
 
-#: manager.php:192
+#: manager.php:212
 #, php-format
 msgid "Cannot create home directory: %s"
 msgstr "No se puede crear la carpeta principal: %s"
 
-#: manager.php:135
+#: manager.php:152
 msgid "Cannot cut items onto clipboard."
 msgstr "No se pueden cortar elementos al portapapeles."
 
-#: manager.php:80
-#, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr "No se puede eliminar \"%s\": %s"
-
-#: manager.php:157
+#: manager.php:173
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr "No se puede pegar \"%s\" (el portapapeles está vacío): %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:77
+#: manager.php:313 templates/manager/manager.html:70
 msgid "Change Folder"
-msgstr "Abrir carpeta"
+msgstr "Cambiar carpeta"
 
-#: selectlist.php:110 lib/Gollem.php:819
+#: templates/manager/manager.html:110
+msgid "Change Permissions"
+msgstr "Cambiar permisos"
+
+#: selectlist.php:109 lib/Gollem.php:852
 msgid "Change Server"
 msgstr "Cambiar servidor"
 
@@ -173,19 +167,15 @@ msgstr "Cambiar opciones de manipulaci
 msgid "Change your file sorting options."
 msgstr "Cambiar opciones de clasificación de archivos."
 
-#: lib/Gollem.php:793
+#: lib/Gollem.php:827
 msgid "Check Quota"
 msgstr "Verificar Quota"
 
-#: manager.php:495
+#: manager.php:556
 msgid "Check _All/None"
 msgstr "Marcar _todos/Ninguno"
 
-#: templates/manager/manager.html:113
-msgid "Chmod"
-msgstr "Cambiar permisos de elementos"
-
-#: manager.php:70
+#: manager.php:77
 msgid "Chmod done: "
 msgstr "Ha terminado el cambio de permisos: "
 
@@ -193,28 +183,33 @@ msgstr "Ha terminado el cambio de permisos: "
 msgid "Choose the columns to display in the file manager."
 msgstr "Elija las columnas mostradas en el gestor de archivos."
 
-#: clipboard.php:38
+#: clipboard.php:39 templates/manager/manager.html:129
 msgid "Clear"
 msgstr "Limpiar"
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
 msgstr "Portapapeles"
 
-#: quota.php:31
+#: quota.php:32
 msgid "Close"
 msgstr "Cerrar"
 
-#: login.php:254
+#: login.php:258
 #, php-format
 msgid "Connect to: %s"
 msgstr "Conectar a: %s"
 
-#: clipboard.php:41 templates/manager/manager.html:116
+#: clipboard.php:42 templates/manager/manager.html:113
 msgid "Copy"
 msgstr "Copiar"
 
-#: lib/Gollem.php:774 templates/manager/manager.html:63
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "No se puede guardar el archivo de plantilla compilado '%s'."
+
+#: manager.php:306 templates/manager/manager.html:58
 msgid "Create Folder"
 msgstr "Crear carpeta"
 
@@ -224,14 +219,14 @@ msgid ""
 "Created empty permissions for \"%s\". You must explicitly grant access to "
 "this backend now."
 msgstr ""
-"Se han creado privilegios vacíos para \"%s\". Ahora tiene que conceder el "
+"Se han creado permisos vacíos para \"%s\". Ahora tiene que conceder el "
 "acceso a este motor de forma explícita."
 
 #: templates/clipboard/clipboard.html:17
 msgid "Current directory:"
 msgstr "Carpeta actual:"
 
-#: clipboard.php:40 templates/manager/manager.html:117
+#: clipboard.php:41 templates/manager/manager.html:114
 msgid "Cut"
 msgstr "Cortar"
 
@@ -243,11 +238,11 @@ msgstr "Criterio de clasificaci
 msgid "Default sorting direction:"
 msgstr "Sentido de clasificación por omisión:"
 
-#: templates/manager/manager.html:120
+#: templates/manager/manager.html:117
 msgid "Delete"
 msgstr "Eliminar"
 
-#: config/.bak/prefs.php.dist:95
+#: config/.bak/prefs.php.dist:104
 msgid "Delete folders recursively?"
 msgstr "¿Eliminar carpetas de forma recursiva?"
 
@@ -255,15 +250,15 @@ msgstr "
 msgid "Descending"
 msgstr "Descendente"
 
-#: selectlist.php:101
+#: selectlist.php:100
 msgid "Done"
 msgstr "Terminado"
 
-#: manager.php:214
+#: manager.php:235
 msgid "Download"
 msgstr "Descargar"
 
-#: manager.php:384
+#: manager.php:440
 #, php-format
 msgid "Download %s"
 msgstr "Descargar %s"
@@ -272,6 +267,15 @@ msgstr "Descargar %s"
 msgid "ERROR:"
 msgstr "ERROR:"
 
+#: manager.php:234
+msgid "Edit"
+msgstr "Modificar"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Modificar %s"
+
 #: config/.bak/credentials.php.dist:28
 msgid "Email"
 msgstr "Correo"
@@ -280,7 +284,7 @@ msgstr "Correo"
 msgid "Execute"
 msgstr "Ejecución"
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:185
+#: templates/javascript_defs.php:28 templates/manager/manager.html:195
 msgid "File"
 msgstr "Archivo"
 
@@ -304,20 +308,36 @@ msgstr "Tama
 msgid "File Type"
 msgstr "Tipo de archivo"
 
-#: manager.php:76
+#: manager.php:96
 msgid "File deleted: "
 msgstr "Archivo eliminado: "
 
-#: manager.php:101
+#: manager.php:119
 #, php-format
 msgid "File received: %s"
 msgstr "Archivo recibido: %s"
 
-#: manager.php:78
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr "Los archivos se tienen que almacenar en un motor VFS."
+
+#: templates/manager/manager.html:127
+msgid "Filter"
+msgstr "Filtro"
+
+#: templates/manager/manager.html:126
+msgid "Filter:"
+msgstr "Filtro:"
+
+#: manager.php:88
 msgid "Folder removed: "
 msgstr "Carpeta eliminada: "
 
-#: templates/manager/manager.html:79
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr "Las carpetas se tienen que crear en un motor VFS."
+
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "Ir a:"
 
@@ -325,29 +345,35 @@ msgstr "Ir a:"
 msgid "Gollem Backend Permissions Administration"
 msgstr "Administración de permisos del motor de Gollem"
 
-#: manager.php:474 templates/manager/manager.html:10
+#: manager.php:535 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Grupo"
 
-#: lib/Gollem.php:770
-msgid "Home"
-msgstr "Inicio"
-
-#: manager.php:56
+#: manager.php:62
 msgid "Incorrect number of items."
 msgstr "Número de elementos incorrecto."
 
-#: manager.php:126
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Motor solicitado inválido: %s"
+
+#: manager.php:143
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "Se ha copiado el elemento al portapapeles: %s"
 
-#: manager.php:128
+#: manager.php:145
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr "Se ha cortado el elemento al portapapeles: %s"
 
-#: templates/login/login.html:67
+#: config/.bak/prefs.php.dist:90
+msgid "Items per page"
+msgstr "Elementos por página"
+
+#: templates/login/login.html:68
 msgid "Language"
 msgstr "Idioma"
 
@@ -355,47 +381,39 @@ msgstr "Idioma"
 msgid "List folders first?"
 msgstr "¿Listar primero las carpetas?"
 
-#: login.php:303
+#: login.php:307
 msgid "Login"
 msgstr "Iniciar sesión"
 
-#: quota.php:62
-msgid "MB free"
-msgstr "MB libres"
-
-#: quota.php:62
-msgid "MB used"
-msgstr "MB usados"
-
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "Listado del menú"
 
-#: manager.php:448
+#: manager.php:505
 msgid "Modified"
 msgstr "Modific."
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
 msgstr "Desplazar a la izquierda"
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
 msgstr "Desplazar a la derecha"
 
-#: manager.php:435
+#: manager.php:483
 msgid "Name"
 msgstr "Nombre"
 
-#: templates/manager/manager.html:49 templates/manager/manager.html:65
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "Nombre:"
 
-#: manager.php:35
+#: manager.php:41
 msgid "New folder created: "
 msgstr "Nueva carpeta creada: "
 
-#: config/.bak/prefs.php.dist:91
+#: config/.bak/prefs.php.dist:100
 msgid "No"
 msgstr "No"
 
@@ -403,11 +421,11 @@ msgstr "No"
 msgid "No quota found."
 msgstr "No se ha encontrado la quota."
 
-#: manager.php:259
+#: manager.php:286
 msgid "OK"
 msgstr "Aceptar"
 
-#: manager.php:468 templates/manager/manager.html:9
+#: manager.php:528 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "Propietario"
 
@@ -415,33 +433,34 @@ msgstr "Propietario"
 msgid "Password"
 msgstr "Contraseña"
 
-#: clipboard.php:39
+#: clipboard.php:40
 msgid "Paste"
 msgstr "Pegar"
 
-#: manager.php:462
+#: manager.php:521
 msgid "Permission"
-msgstr "Privilegios"
+msgstr "Permiso"
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
-msgstr "No dispone de privilegios para %s: %s"
+msgstr "No dispone de permisos para %s: %s"
 
-#: manager.php:200
+#: manager.php:220
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
-msgstr "No dispone de privilegios para la carpeta \"%s\": %s"
+msgstr "No dispone de permisos para la carpeta \"%s\": %s"
 
-#: lib/Gollem.php:783
-msgid "Permissions"
-msgstr "Privilegios"
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
+msgstr "No dispone de permisos para este motor."
 
-#: templates/login/javascript.inc:36
+#: templates/javascript_defs.php:19
 msgid "Please provide your password."
 msgstr "Introduzca su contraseña."
 
-#: templates/login/javascript.inc:31
+#: templates/javascript_defs.php:18
 msgid "Please provide your username."
 msgstr "Introduzca su nombre de usuario."
 
@@ -449,43 +468,51 @@ msgstr "Introduzca su nombre de usuario."
 msgid "Please select a backend:"
 msgstr "Seleccione un motor:"
 
-#: templates/manager/javascript.inc:132
+#: templates/javascript_defs.php:22
 msgid "Please select an item before this action."
 msgstr "Seleccione un elemento antes de esta acción."
 
-#: templates/manager/javascript.inc:456
+#: templates/javascript_defs.php:27
 msgid "Please specify at least one file to upload."
 msgstr "Indique al menos un archivo a cargar."
 
-#: quota.php:18 templates/quota/quota.html:2
+#: quota.php:19 templates/quota/quota.html:2
 msgid "Quota Display"
 msgstr "Formato de Quota"
 
-#: quota.php:61
-msgid "Quota Usage"
-msgstr "Quota disponible"
-
 #: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Lectura"
 
-#: manager.php:266
+#: manager.php:291
 msgid "Refresh"
 msgstr "Actualizar"
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
-msgstr "Quitar columna"
+msgstr "Eliminar columna"
 
-#: templates/manager/manager.html:47 templates/manager/manager.html:123
+#: templates/manager/manager.html:44 templates/manager/manager.html:120
 msgid "Rename"
-msgstr "Renombrar "
+msgstr "Renombrar"
+
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
+msgstr "El renombrado entre motores no está soportado."
+
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr "El renombrado de motores no está permitido."
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Limpiar"
+
+#: lib/Gollem.php:775 lib/Gollem.php:780
 msgid "Root"
 msgstr "Root"
 
-#: manager.php:257
+#: manager.php:284 templates/edit/edit.inc:11
 msgid "Save"
 msgstr "Guardar"
 
@@ -493,7 +520,7 @@ msgstr "Guardar"
 msgid "Selected Columns:"
 msgstr "Columnas seleccionadas:"
 
-#: templates/login/login.html:31
+#: templates/login/login.html:32
 msgid "Server"
 msgstr "Servidor"
 
@@ -505,31 +532,31 @@ msgstr "Opciones"
 msgid "Show dotfiles?"
 msgstr "¿Mostrar archivos cuyo nombre empiece por un punto?"
 
-#: manager.php:455
+#: manager.php:513
 msgid "Size"
 msgstr "Tamaño"
 
-#: manager.php:481
-msgid "Sort Direction"
-msgstr "Sentido de clasificación"
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
+msgstr "La carpeta de la aplicación no se puede eliminar."
 
-#: templates/manager/javascript.inc:202
-msgid "The following item(s) are folders: "
-msgstr "Los siguientes elementos son carpetas: "
+#: templates/javascript_defs.php:25
+msgid "The following item(s) are folders:"
+msgstr "Los siguiente(s) elemento(s) son carpetas:"
 
-#: templates/manager/javascript.inc:198
-msgid "The following items will be permanently deleted: "
-msgstr "Se eliminarán permanentemente los siguientes elementos: "
+#: templates/javascript_defs.php:23
+msgid "The following items will be permanently deleted:"
+msgstr "Se eliminarán permanentemente los siguientes elementos:"
 
-#: templates/selectlist/javascript.inc:9
+#: templates/javascript_defs.php:31
 msgid "The original opener window has been closed. Exiting."
 msgstr "Se ha cerrado la ventana de origen. Saliendo."
 
-#: login.php:150
+#: login.php:151
 msgid "There are no backends available for the current user."
 msgstr "El usuario actual no dispone de motores a los que conectarse."
 
-#: selectlist.php:193 templates/manager/manager.html:134
+#: selectlist.php:199 templates/manager/manager.html:138
 msgid "There are no files in this folder."
 msgstr "No hay archivos en esta carpeta."
 
@@ -549,21 +576,36 @@ msgstr ""
 "Para pegar elementos del portapapeles en la carpeta actual, seleccione la "
 "casilla junto al nombre del archivo y pulse &quot;Pegar&quot;."
 
-#: manager.php:428
+#: manager.php:475
 msgid "Type"
 msgstr "Tipo"
 
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr "No se puede crear la sesión Gollem"
+
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
-msgstr "No se pueden crear los privilegios en el motor: %s"
+msgstr "No se pueden crear los permisos en el motor: %s"
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: manager.php:93
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "No se puede eliminar el archivo %s: %s"
+
+#: manager.php:85
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "No se puede eliminar la carpeta %s: %s"
+
+#: lib/Gollem.php:780 lib/Gollem.php:790
 #, php-format
 msgid "Up to %s"
 msgstr "Subir a %s"
 
-#: manager.php:279
+#: manager.php:303
 msgid "Upload File(s)"
 msgstr "Cargar archivo(s)"
 
@@ -575,11 +617,11 @@ msgstr "Interfaz de usuario"
 msgid "Username"
 msgstr "Usuario"
 
-#: manager.php:274
+#: manager.php:298
 msgid "View Clipboard"
 msgstr "Ver Portapapeles"
 
-#: login.php:195
+#: login.php:201
 #, php-format
 msgid "Welcome to %s"
 msgstr "Bienvenido a %s"
@@ -588,27 +630,35 @@ msgstr "Bienvenido a %s"
 msgid "Write"
 msgstr "Escritura"
 
-#: config/.bak/prefs.php.dist:92
+#: config/.bak/prefs.php.dist:101
 msgid "Yes"
 msgstr "Sí"
 
 #: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
-msgstr "Para establecer privilegios necesita al menos definir un motor."
+msgstr "Para establecer permisos necesita al menos definir un motor."
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
 msgstr ""
 "Su navegador no admite la visualización en línea de este tipo de imagen."
 
-#: lib/Gollem.php:817 lib/Gollem.php:820
+#: lib/Gollem.php:850 lib/Gollem.php:853
 msgid "_Change Server"
 msgstr "_Cambiar servidor"
 
-#: manager.php:215 selectlist.php:74
+#: lib/Gollem.php:811
+msgid "_My Home"
+msgstr "_Inicio"
+
+#: lib/Gollem.php:816
+msgid "_Permissions"
+msgstr "_Permisos"
+
+#: selectlist.php:75 manager.php:236
 msgid "folder"
 msgstr "carpeta"
 
-#: manager.php:216 selectlist.php:75
+#: selectlist.php:76 manager.php:237
 msgid "symlink"
 msgstr "vínculo simbólico"
diff --git a/po/et_EE.po b/po/et_EE.po
new file mode 100644
index 0000000..65580a8
--- /dev/null
+++ b/po/et_EE.po
@@ -0,0 +1,671 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Gollem H3 (1.1-cvs)\n"
+"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
+"POT-Creation-Date: 2008-05-29 15:49+0300\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Alar SIng <alar.sing at err.ee>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-13\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Estonian\n"
+"X-Poedit-Country: ESTONIA\n"
+
+#: manager.php:53
+#, php-format
+msgid "\"%s\" renamed to \"%s\""
+msgstr "\"%s\" nimetati ümber \"%s\""
+
+#: quota.php:56
+#, php-format
+msgid "%.2fMB / %.2fMB  (%.2f%%)"
+msgstr "%.2fMB / %.2fMB  (%.2f%%)"
+
+#: manager.php:272
+#, php-format
+msgid "%d items"
+msgstr "%d asja"
+
+#: manager.php:434
+#, php-format
+msgid "%s Folders and %s Files (%s Kb)"
+msgstr "%s kausta ja %s faili (%s Kb)"
+
+#: manager.php:432
+#, php-format
+msgid "%s Folders and 1 File (%s Kb)"
+msgstr "%s kausta ja 1 fail (%s Kb)"
+
+#: login.php:144
+#, php-format
+msgid "%s Login"
+msgstr "%s Login"
+
+#: edit.php:35
+#, php-format
+msgid "%s successfully saved."
+msgstr "%s edukalt salvestatud."
+
+#: manager.php:168
+#, php-format
+msgid "%s was successfully pasted."
+msgstr "%s edukalt kleebitud."
+
+#: manager.php:429
+#, php-format
+msgid "1 Folder and %s Files (%s Kb)"
+msgstr "1 kaust ja %s faili (%s Kb)"
+
+#: manager.php:427
+#, php-format
+msgid "1 Folder and 1 File (%s Kb)"
+msgstr "1 kaust ja 1 fail (%s Kb)"
+
+#: manager.php:272
+msgid "1 item"
+msgstr "1 asi"
+
+#: templates/javascript_defs.php:14
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"Hüpik akent ei saanud avada. Võibolla sinu veebilehitseja blokeerib hüpik "
+"aknaid?"
+
+#: edit.php:33 edit.php:43 view.php:35 view.php:42
+#, php-format
+msgid "Access denied to %s"
+msgstr "%s juurdepääs keelatud"
+
+#: lib/Gollem.php:109 lib/Gollem.php:383 lib/Gollem.php:445 lib/Gollem.php:466
+#: lib/Gollem.php:483
+#, php-format
+msgid "Access denied to folder \"%s\"."
+msgstr "Kaustale \"%s\" juurdepääs keelatud."
+
+#: templates/manager/manager.html:124
+msgid "Actions:"
+msgstr "Tegevus:"
+
+#: selectlist.php:99
+msgid "Add"
+msgstr "Lisa"
+
+#: templates/prefs/columnselect.inc:43
+msgid "Add column"
+msgstr "Lisa veerg"
+
+#: templates/manager/manager.html:11
+msgid "All"
+msgstr "Kõik"
+
+#: templates/javascript_defs.php:25
+msgid "Are you sure you wish to continue?"
+msgstr "Oled kindel et soovid jätkata?"
+
+#: templates/javascript_defs.php:23
+msgid "Are you sure?"
+msgstr "Oled kindel?"
+
+#: config/prefs.php.dist:69
+msgid "Ascending"
+msgstr "Kasvav"
+
+#: config/prefs.php.dist:93
+msgid "Ask"
+msgstr "Küsi"
+
+#: templates/manager/manager.html:5
+msgid "Attributes"
+msgstr "Atribuudid"
+
+#: templates/prefs/columnselect.html:20
+msgid "Available Columns:"
+msgstr "Saadavad veerud:"
+
+#: lib/api.php:483
+msgid "Backends"
+msgstr "Alusrakendused"
+
+#: templates/clipboard/clipboard.html:11
+msgid "Below is the current contents of your clipboard."
+msgstr "Allpool on hetke lõikepuhver sisu."
+
+#: manager.php:267 clipboard.php:38 selectlist.php:101
+#: templates/edit/edit.inc:13
+msgid "Cancel"
+msgstr "Tühista"
+
+#: manager.php:73
+#, php-format
+msgid "Cannot chmod %s: %s"
+msgstr "Ei õnnestu muuta õigusi %s: %s"
+
+#: manager.php:142
+msgid "Cannot copy items onto clipboard."
+msgstr "Ei õnnestu kopeerida asju lõikepuhvrisse."
+
+#: manager.php:201
+#, php-format
+msgid "Cannot create home directory: %s"
+msgstr "Ei õnnestu luua kodu kataloogi: %s"
+
+#: manager.php:144
+msgid "Cannot cut items onto clipboard."
+msgstr "Ei saa lõigata asju lõikepuhvrisse."
+
+#: manager.php:166
+#, php-format
+msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
+msgstr "Ei saa kleepida \"%s\" (lõikepuhver on tühjendatud) :%s"
+
+#: templates/manager/manager.html:70
+msgid "Change Folder"
+msgstr "Vaheta kausta"
+
+#: templates/manager/manager.html:126
+msgid "Change Permissions"
+msgstr "Vaheta Õigusi"
+
+#: selectlist.php:109 lib/Gollem.php:816
+msgid "Change Server"
+msgstr "Vaheta serverit"
+
+#: lib/Gollem.php:773
+msgid "Change _Folder"
+msgstr "Vaheta _Kausta"
+
+#: config/prefs.php.dist:21
+msgid "Change file and folder handling settings."
+msgstr "Muuda faili ja kaustade kasutamisseadeid."
+
+#: config/prefs.php.dist:14
+msgid "Change your file sorting options."
+msgstr "Muuda failide sorteerimisseadeid."
+
+#: lib/Gollem.php:791
+msgid "Check Quota"
+msgstr "Kontrolli mahupiirangut"
+
+#: manager.php:525
+msgid "Check _All/None"
+msgstr "Vali _Kõik/midagi"
+
+#: manager.php:71
+msgid "Chmod done: "
+msgstr "Õigused muudetud:"
+
+#: templates/prefs/columnselect.html:12
+msgid "Choose the columns to display in the file manager."
+msgstr "Vali veerud mida näidata faili halduris."
+
+#: clipboard.php:39
+msgid "Clear"
+msgstr "Tühjenda"
+
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
+msgid "Clipboard"
+msgstr "Lõikepuhver"
+
+#: quota.php:32
+msgid "Close"
+msgstr "Sulge"
+
+#: login.php:258
+#, php-format
+msgid "Connect to: %s"
+msgstr "Ühendu: %s"
+
+#: clipboard.php:42 templates/manager/manager.html:129
+msgid "Copy"
+msgstr "Kopeeri"
+
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Ei õnnestunud salvestada malli faili '%s'."
+
+#: templates/manager/manager.html:58
+msgid "Create Folder"
+msgstr "Loo kaust"
+
+#: permissions.php:47
+#, php-format
+msgid ""
+"Created empty permissions for \"%s\". You must explicitly grant access to "
+"this backend now."
+msgstr "Teha ilma õigusteta \"%s\". Peab alusrakendusele andma selle õiguse. "
+
+#: templates/clipboard/clipboard.html:17
+msgid "Current directory:"
+msgstr "Hetke kaust:"
+
+#: clipboard.php:41 templates/manager/manager.html:130
+msgid "Cut"
+msgstr "Lõika"
+
+#: config/prefs.php.dist:59
+msgid "Default sorting criteria:"
+msgstr "Vaike sortimiskriteerium:"
+
+#: config/prefs.php.dist:72
+msgid "Default sorting direction:"
+msgstr "Vaike sortimissuund:"
+
+#: templates/manager/manager.html:133
+msgid "Delete"
+msgstr "Kustuta"
+
+#: config/prefs.php.dist:95
+msgid "Delete folders recursively?"
+msgstr "Kustuta kaustad rekursiivselt?"
+
+#: config/prefs.php.dist:70
+msgid "Descending"
+msgstr "Kahanev"
+
+#: selectlist.php:100
+msgid "Done"
+msgstr "Tehtud"
+
+#: manager.php:227
+msgid "Download"
+msgstr "Tõmba"
+
+#: manager.php:401
+#, php-format
+msgid "Download %s"
+msgstr "Tõmba %s"
+
+#: templates/quota/quota.html:7
+msgid "ERROR:"
+msgstr "VIGA:"
+
+#: manager.php:226
+msgid "Edit"
+msgstr "Muuda"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Muuda %s"
+
+#: config/credentials.php.dist:28
+msgid "Email"
+msgstr "Mail"
+
+#: templates/manager/manager.html:26
+msgid "Execute"
+msgstr "Käivita"
+
+#: templates/javascript_defs.php:27 templates/manager/manager.html:203
+msgid "File"
+msgstr "Fail"
+
+#: config/prefs.php.dist:13
+msgid "File Display"
+msgstr "Näita faili"
+
+#: config/prefs.php.dist:56
+msgid "File Modification Time"
+msgstr "Faili muutmise aeg"
+
+#: config/prefs.php.dist:55
+msgid "File Name"
+msgstr "Faili nimi"
+
+#: config/prefs.php.dist:57
+msgid "File Size"
+msgstr "Faili suurus"
+
+#: config/prefs.php.dist:54
+msgid "File Type"
+msgstr "Faili tüüp"
+
+#: manager.php:88
+msgid "File deleted: "
+msgstr "Fail kustutatud:"
+
+#: manager.php:110
+#, php-format
+msgid "File received: %s"
+msgstr "Fail saabunud: %s"
+
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr "Faili peab kirjutama VFS alusrakenduse sees."
+
+#: manager.php:81
+msgid "Folder removed: "
+msgstr "Kaust eemaldatud:"
+
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr "Kaust tuleb teha VFS alusrakenduse sees."
+
+#: templates/manager/manager.html:72
+msgid "Go to:"
+msgstr "Mine:"
+
+#: permissions.php:21
+msgid "Gollem Backend Permissions Administration"
+msgstr "Gollemi alusrakenduse õigusete administreerimine"
+
+#: manager.php:505 templates/manager/manager.html:10
+msgid "Group"
+msgstr "Grupp"
+
+#: manager.php:57
+msgid "Incorrect number of items."
+msgstr "Vale asjade arv."
+
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Vigane alusrakenduse päring: %s"
+
+#: manager.php:135
+#, php-format
+msgid "Item copied to clipboard: %s"
+msgstr "Asi kopeeritud lõikepuhvrisse: %s"
+
+#: manager.php:137
+#, php-format
+msgid "Item cut to clipboard: %s"
+msgstr "Asi lõigatud lõikepuhvrisse: %s"
+
+#: templates/login/login.html:68
+msgid "Language"
+msgstr "Keel"
+
+#: config/prefs.php.dist:81
+msgid "List folders first?"
+msgstr "Kaustad enne?"
+
+#: login.php:307
+msgid "Login"
+msgstr "Login"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menüü nimekiri"
+
+#: manager.php:475
+msgid "Modified"
+msgstr "Muudetud"
+
+#: templates/prefs/columnselect.inc:45
+msgid "Move left"
+msgstr "Liiguta vasakule"
+
+#: templates/prefs/columnselect.inc:46
+msgid "Move right"
+msgstr "Liiguta paremale"
+
+#: manager.php:453
+msgid "Name"
+msgstr "Nimi"
+
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
+msgid "Name:"
+msgstr "Nimi:"
+
+#: manager.php:36
+msgid "New folder created: "
+msgstr "Uus kaust tehtud:"
+
+#: config/prefs.php.dist:91
+msgid "No"
+msgstr "Ei"
+
+#: templates/quota/quota.html:12
+msgid "No quota found."
+msgstr "Quotat ei leitud."
+
+#: manager.php:268
+msgid "OK"
+msgstr "OK"
+
+#: manager.php:498 templates/manager/manager.html:9
+msgid "Owner"
+msgstr "Omanik"
+
+#: config/credentials.php.dist:23
+msgid "Password"
+msgstr "Parool"
+
+#: clipboard.php:40
+msgid "Paste"
+msgstr "Kleebi"
+
+#: manager.php:491
+msgid "Permission"
+msgstr "Õigus"
+
+#: selectlist.php:64
+#, php-format
+msgid "Permission denied to %s: %s"
+msgstr "Ligipääs keelatud %s: %s"
+
+#: manager.php:209
+#, php-format
+msgid "Permission denied to folder \"%s\": %s"
+msgstr "Kaustale \"%s\" ligipääs keelatud: %s"
+
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
+msgstr "Alusrakendusele ligipääs keelatud."
+
+#: templates/javascript_defs.php:18
+msgid "Please provide your password."
+msgstr "Palun sisesta oma parool."
+
+#: templates/javascript_defs.php:17
+msgid "Please provide your username."
+msgstr "Palun sisesta oma kasutaja."
+
+#: templates/prefs/columnselect.html:5
+msgid "Please select a backend:"
+msgstr "Palun vali alusrakendus:"
+
+#: templates/javascript_defs.php:21
+msgid "Please select an item before this action."
+msgstr "Palun tee valik enne tegevust."
+
+#: templates/javascript_defs.php:26
+msgid "Please specify at least one file to upload."
+msgstr "Palun vali vähemalt üks fail mida ülesse laadida."
+
+#: quota.php:19 templates/quota/quota.html:2
+msgid "Quota Display"
+msgstr "Näita mahupiirangut"
+
+#: templates/manager/manager.html:14
+msgid "Read"
+msgstr "Loe"
+
+#: manager.php:274
+msgid "Refresh"
+msgstr "Uuenda"
+
+#: templates/prefs/columnselect.inc:44
+msgid "Remove column"
+msgstr "Eemalda veerg"
+
+#: templates/manager/manager.html:44 templates/manager/manager.html:136
+msgid "Rename"
+msgstr "Nimeta ümber"
+
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
+msgstr "Ümber nimetamine üle alusrakenduste ei ole võimalik."
+
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr "Alusrakenduste ümbernimetamine ei ole lubatud."
+
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Tühjenda"
+
+#: lib/Gollem.php:730 lib/Gollem.php:735
+msgid "Root"
+msgstr "Juur"
+
+#: manager.php:266 templates/edit/edit.inc:11
+msgid "Save"
+msgstr "Salvesta"
+
+#: templates/prefs/columnselect.html:30
+msgid "Selected Columns:"
+msgstr "Vali veerg:"
+
+#: templates/login/login.html:32
+msgid "Server"
+msgstr "Server"
+
+#: config/prefs.php.dist:20
+msgid "Settings"
+msgstr "Seaded"
+
+#: config/prefs.php.dist:30
+msgid "Show dotfiles?"
+msgstr "Näita punktiga algavaid faile?"
+
+#: manager.php:483
+msgid "Size"
+msgstr "Suurus"
+
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
+msgstr "Rakenduse kausta ei saa kustutada."
+
+#: templates/javascript_defs.php:24
+msgid "The following item(s) are folders:"
+msgstr "Järgmised asjad on kaustades:"
+
+#: templates/javascript_defs.php:22
+msgid "The following items will be permanently deleted:"
+msgstr "Järgmised asjad kustutatakse igaveseks:"
+
+#: templates/javascript_defs.php:30
+msgid "The original opener window has been closed. Exiting."
+msgstr "Algnel avamisaken on suletud. Väljun."
+
+#: login.php:151
+msgid "There are no backends available for the current user."
+msgstr "Hetke kasutajale ei ole ühtegi alusrakendust."
+
+#: selectlist.php:199 templates/manager/manager.html:147
+msgid "There are no files in this folder."
+msgstr "Selles kaustas pole faile."
+
+#: templates/clipboard/clipboard.html:15
+msgid ""
+"To clear items from the clipboard, check the box next to the filename and "
+"click on &quot;Clear&quot;."
+msgstr ""
+"Lõikepuhvrist failide kustutamiseks vali linnuke faili nime järel ja vajuta "
+"&quot;Tühjenda&quot;."
+
+#: templates/clipboard/clipboard.html:13
+msgid ""
+"To paste items from the clipboard to the current directory, check the box "
+"next to the filename and click on &quot;Paste&quot;."
+msgstr ""
+"Asjade kleepimiseks lõikepuhvrisse hetke kaustast vali linnuke faili nime "
+"kõrval ja vajuta &quot;Kleebi&quot;."
+
+#: manager.php:445
+msgid "Type"
+msgstr "Tüüp"
+
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr "Ei õnnestunud luua Gollemi sessiooni"
+
+#: permissions.php:42
+#, php-format
+msgid "Unable to create backend permission: %s"
+msgstr "Ei õnnestunud luua alusrakenduse õigust: %s"
+
+#: manager.php:86
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "Faili %s ei õnnestunud kustutada: %s"
+
+#: manager.php:79
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "Kausta %s ei õnnestunud kustutada: %s"
+
+#: lib/Gollem.php:735 lib/Gollem.php:745
+#, php-format
+msgid "Up to %s"
+msgstr "Kuni %s"
+
+#: manager.php:287
+msgid "Upload File(s)"
+msgstr "Lae fail(e)"
+
+#: config/prefs.php.dist:12 config/prefs.php.dist:19
+msgid "User Interface"
+msgstr "Kasutajaliides"
+
+#: config/credentials.php.dist:18
+msgid "Username"
+msgstr "Kasutaja"
+
+#: manager.php:282
+msgid "View Clipboard"
+msgstr "Vaata lõikepuhvrit"
+
+#: login.php:201
+#, php-format
+msgid "Welcome to %s"
+msgstr "Tere tulemast: %s"
+
+#: templates/manager/manager.html:20
+msgid "Write"
+msgstr "Kirjuta"
+
+#: config/prefs.php.dist:92
+msgid "Yes"
+msgstr "Jah"
+
+#: permissions.php:25
+msgid "You need at least one backend defined to set permissions."
+msgstr "Vähemalt üks alusrakendus peab olema defineeritud et seada õigusi."
+
+#: lib/MIME/Viewer/images.php:35
+msgid "Your browser does not support inline display of this image type"
+msgstr "Sinu webi lehitseja ei toeta selle pildi tüübi näitamist"
+
+#: lib/Gollem.php:814 lib/Gollem.php:817
+msgid "_Change Server"
+msgstr "_Muuda serverit"
+
+#: lib/Gollem.php:770
+msgid "_Create Folder"
+msgstr "_Loo kaust"
+
+#: lib/Gollem.php:766
+msgid "_My Home"
+msgstr "_Minu kodu"
+
+#: lib/Gollem.php:780
+msgid "_Permissions"
+msgstr "Õ_igused"
+
+#: manager.php:228 selectlist.php:75
+msgid "folder"
+msgstr "Kaust"
+
+#: manager.php:229 selectlist.php:76
+msgid "symlink"
+msgstr "symlink"
diff --git a/po/gollem.pot b/po/eu_ES.po
similarity index 62%
copy from po/gollem.pot
copy to po/eu_ES.po
index 0ed957c..1a2db2a 100644
--- a/po/gollem.pot
+++ b/po/eu_ES.po
@@ -1,221 +1,222 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Horde Project
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Basque translations for Gollem.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the Gollem package.
+# Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta at ehu.es>, 2008.
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: Gollem H3 (1.0)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-11-03 23:12+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"POT-Creation-Date: 2008-01-16 09:33+0100\n"
+"PO-Revision-Date: 2008-07-17 14:28+0200\n"
+"Last-Translator: Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta at ehu."
+"es>\n"
+"Language-Team: Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta at ehu."
+"es>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: manager.php:52
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
-msgstr ""
+msgstr "\"%s\"izenaren ordez \"%s\" jarri da."
 
 #: quota.php:59
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
-msgstr ""
+msgstr "%.2fMB / %.2fMB  (%%%.2f)"
 
 #: manager.php:268
 #, php-format
 msgid "%d items"
-msgstr ""
+msgstr "%d elementu"
 
 #: manager.php:415
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
-msgstr ""
+msgstr "%s karpeta eta %s fitxategi (%s Kb)"
 
 #: manager.php:413
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
-msgstr ""
+msgstr "%s karpeta eta fitxategi bat (%s Kb)"
 
 #: login.php:143
 #, php-format
 msgid "%s Login"
-msgstr ""
+msgstr "%sren saio-hasiera"
 
 #: manager.php:159
 #, php-format
 msgid "%s was successfully pasted."
-msgstr ""
+msgstr "%s behar bezala itsatsi da."
 
 #: manager.php:410
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
-msgstr ""
+msgstr "Karpeta bat eta %s  fitxategi (%s Kb)"
 
 #: manager.php:408
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
-msgstr ""
+msgstr "Karpeta bat eta fitxategi bat (%s Kb)"
 
 #: manager.php:268
 msgid "1 item"
-msgstr ""
+msgstr "1 elementu"
 
 #: view.php:31
 #, php-format
 msgid "Access denied to %s"
-msgstr ""
+msgstr "%s(e)rako sarbidea ukatuta"
 
 #: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
 #: lib/Gollem.php:490
 #, php-format
 msgid "Access denied to folder \"%s\"."
-msgstr ""
+msgstr "\"%s\" karpetarako sarbidea ukatua."
 
 #: templates/manager/manager.html:111
 msgid "Actions:"
-msgstr ""
+msgstr "Ekintzak:"
 
 #: selectlist.php:91
 msgid "Add"
-msgstr ""
+msgstr "Gehitu"
 
 #: templates/prefs/columnselect.inc:42
 msgid "Add column"
-msgstr ""
+msgstr "Gehitu zutabea"
 
 #: templates/manager/manager.html:11
 msgid "All"
-msgstr ""
+msgstr "Denak"
 
 #: templates/manager/javascript.inc:202
 msgid "Are you sure you wish to continue?"
-msgstr ""
+msgstr "Ziur zaude jarraitu nahi duzula?"
 
 #: templates/manager/javascript.inc:198
 msgid "Are you sure?"
-msgstr ""
+msgstr "Ziur zaude?"
 
 #: config/prefs.php.dist:69
 msgid "Ascending"
-msgstr ""
+msgstr "Gorantz"
 
 #: config/prefs.php.dist:93
 msgid "Ask"
-msgstr ""
+msgstr "Galdetu"
 
 #: templates/manager/manager.html:5
 msgid "Attributes"
-msgstr ""
+msgstr "Atributuak"
 
 #: templates/prefs/columnselect.html:20
 msgid "Available Columns:"
-msgstr ""
+msgstr "Zutabe erabilgarriak:"
 
 #: lib/api.php:46
 msgid "Backends"
-msgstr ""
+msgstr "Moduluak"
 
 #: templates/clipboard/clipboard.html:11
 msgid "Below is the current contents of your clipboard."
-msgstr ""
+msgstr "Behean dago arbeleko uneko edukia."
 
-#: manager.php:263 selectlist.php:93 clipboard.php:37
+#: selectlist.php:93 manager.php:263 clipboard.php:37
 msgid "Cancel"
-msgstr ""
+msgstr "Utzi"
 
 #: manager.php:72
 #, php-format
 msgid "Cannot chmod %s"
-msgstr ""
+msgstr "Ezin da egin chmod %s"
 
 #: manager.php:133
 msgid "Cannot copy items onto clipboard."
-msgstr ""
+msgstr "Ezin dira kopiatu elementuak arbelean."
 
 #: manager.php:192
 #, php-format
 msgid "Cannot create home directory: %s"
-msgstr ""
+msgstr "Ezin da sortu home direktorioa: %s"
 
 #: manager.php:135
 msgid "Cannot cut items onto clipboard."
-msgstr ""
+msgstr "Ezin dira ebaki elementuak arbelera."
 
 #: manager.php:80
 #, php-format
 msgid "Cannot delete \"%s\": %s"
-msgstr ""
+msgstr "Ezin da ezabatu \"%s\": %s"
 
 #: manager.php:157
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr ""
+msgstr "Ezin da itsatsi \"%s\" (arbela hustuta): %s"
 
 #: lib/Gollem.php:777 templates/manager/manager.html:77
 msgid "Change Folder"
-msgstr ""
+msgstr "Aldatu karpeta"
 
 #: selectlist.php:101 lib/Gollem.php:821
 msgid "Change Server"
-msgstr ""
+msgstr "Aldatu zerbitzaria"
 
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
-msgstr ""
+msgstr "Aldatu fitxategiak eta karpetak maneiatzeko ezarpenak."
 
 #: config/prefs.php.dist:14
 msgid "Change your file sorting options."
-msgstr ""
+msgstr "Aldatu fitxategiak ordenatzeko aukerak."
 
 #: lib/Gollem.php:795
 msgid "Check Quota"
-msgstr ""
+msgstr "Egiaztatu kuota"
 
 #: manager.php:492
 msgid "Check _All/None"
-msgstr ""
+msgstr "Egiaztatu _guztiak/bat ere ez"
 
 #: templates/manager/manager.html:113
 msgid "Chmod"
-msgstr ""
+msgstr "Chmod"
 
 #: manager.php:70
 msgid "Chmod done: "
-msgstr ""
+msgstr "Chmod eginda: "
 
 #: templates/prefs/columnselect.html:12
 msgid "Choose the columns to display in the file manager."
-msgstr ""
+msgstr "Aukeratu fitxategi-kudeatzailean bistaratuko diren zutabeak."
 
 #: clipboard.php:38
 msgid "Clear"
-msgstr ""
+msgstr "Garbitu"
 
 #: clipboard.php:17 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
-msgstr ""
+msgstr "Arbela"
 
 #: quota.php:31
 msgid "Close"
-msgstr ""
+msgstr "Itxi"
 
 #: login.php:254
 #, php-format
 msgid "Connect to: %s"
-msgstr ""
+msgstr "Konektatu: %s"
 
 #: clipboard.php:41 templates/manager/manager.html:116
 msgid "Copy"
-msgstr ""
+msgstr "Kopiatu"
 
 #: lib/Gollem.php:774 templates/manager/manager.html:63
 msgid "Create Folder"
-msgstr ""
+msgstr "Sortu karpeta"
 
 #: permissions.php:47
 #, php-format
@@ -223,384 +224,391 @@ msgid ""
 "Created empty permissions for \"%s\". You must explicitly grant access to "
 "this backend now."
 msgstr ""
+"\"%s\"(r)en baimen hutsak sortu dira. Esplizituki eman behar diozu modulu "
+"honetarako sarrera orain."
 
 #: templates/clipboard/clipboard.html:17
 msgid "Current directory:"
-msgstr ""
+msgstr "Uneko direktorioa:"
 
 #: clipboard.php:40 templates/manager/manager.html:117
 msgid "Cut"
-msgstr ""
+msgstr "Ebaki"
 
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
-msgstr ""
+msgstr "Ordenatze-irizpide lehenetsia:"
 
 #: config/prefs.php.dist:72
 msgid "Default sorting direction:"
-msgstr ""
+msgstr "Ordenatze-noranzko lehenetsia:"
 
 #: templates/manager/manager.html:120
 msgid "Delete"
-msgstr ""
+msgstr "Ezabatu"
 
 #: config/prefs.php.dist:95
 msgid "Delete folders recursively?"
-msgstr ""
+msgstr "Ezabatu karpetak errekurtsiboki?"
 
 #: config/prefs.php.dist:70
 msgid "Descending"
-msgstr ""
+msgstr "Beherantz"
 
 #: selectlist.php:92
 msgid "Done"
-msgstr ""
+msgstr "Eginda"
 
 #: manager.php:214
 msgid "Download"
-msgstr ""
+msgstr "Deskargatu"
 
 #: manager.php:382
 #, php-format
 msgid "Download %s"
-msgstr ""
+msgstr "Deskargatu %s"
 
 #: templates/quota/quota.html:7
 msgid "ERROR:"
-msgstr ""
+msgstr "ERROREA:"
 
 #: config/credentials.php.dist:28
 msgid "Email"
-msgstr ""
+msgstr "Posta elektronikoa"
 
 #: templates/manager/manager.html:26
 msgid "Execute"
-msgstr ""
+msgstr "Exekutatu"
 
 #: templates/manager/javascript.inc:485 templates/manager/manager.html:183
 msgid "File"
-msgstr ""
+msgstr "Fitxategia"
 
 #: config/prefs.php.dist:13
 msgid "File Display"
-msgstr ""
+msgstr "Fitxategi-bistaratzea"
 
 #: config/prefs.php.dist:56
 msgid "File Modification Time"
-msgstr ""
+msgstr "Fitxategi-aldaketaren ordua"
 
 #: config/prefs.php.dist:55
 msgid "File Name"
-msgstr ""
+msgstr "Fitxategi-izena"
 
 #: config/prefs.php.dist:57
 msgid "File Size"
-msgstr ""
+msgstr "Fitxategi-tamaina"
 
 #: config/prefs.php.dist:54
 msgid "File Type"
-msgstr ""
+msgstr "Fitxategi mota"
 
 #: manager.php:76
 msgid "File deleted: "
-msgstr ""
+msgstr "Ezabatutako fitxategia: "
 
 #: manager.php:101
 #, php-format
 msgid "File received: %s"
-msgstr ""
+msgstr "Jasotako fitxategia: %s"
 
 #: manager.php:78
 msgid "Folder removed: "
-msgstr ""
+msgstr "Kendutako fitxategia: "
 
 #: templates/manager/manager.html:79
 msgid "Go to:"
-msgstr ""
+msgstr "Joan hona:"
 
 #: permissions.php:21
 msgid "Gollem Backend Permissions Administration"
-msgstr ""
+msgstr "Gollem-en moduluaren baimenen administrazioa"
 
 #: manager.php:472 templates/manager/manager.html:10
 msgid "Group"
-msgstr ""
+msgstr "Taldea"
 
 #: lib/Gollem.php:770
 msgid "Home"
-msgstr ""
+msgstr "Etxea"
 
 #: manager.php:56
 msgid "Incorrect number of items."
-msgstr ""
+msgstr "Elementu kopuru okerra."
 
 #: manager.php:126
 #, php-format
 msgid "Item copied to clipboard: %s"
-msgstr ""
+msgstr "Arbelera kopiatutako elementua: %s"
 
 #: manager.php:128
 #, php-format
 msgid "Item cut to clipboard: %s"
-msgstr ""
+msgstr "Arbelera ebakitako elementua: %s"
 
 #: templates/login/login.html:67
 msgid "Language"
-msgstr ""
+msgstr "Hizkuntza"
 
 #: config/prefs.php.dist:81
 msgid "List folders first?"
-msgstr ""
+msgstr "Karpetak zerrendatu lehendabizi?"
 
 #: login.php:303
 msgid "Login"
-msgstr ""
+msgstr "Saioa hasi"
 
 #: quota.php:62
 msgid "MB free"
-msgstr ""
+msgstr "MB libre"
 
 #: quota.php:62
 msgid "MB used"
-msgstr ""
+msgstr "MB erabilita"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
-msgstr ""
+msgstr "Menu-zerrenda"
 
 #: manager.php:446
 msgid "Modified"
-msgstr ""
+msgstr "Aldatuta"
 
 #: templates/prefs/columnselect.inc:44
 msgid "Move left"
-msgstr ""
+msgstr "Eraman ezkerrera"
 
 #: templates/prefs/columnselect.inc:45
 msgid "Move right"
-msgstr ""
+msgstr "Eraman eskuinera"
 
 #: manager.php:433
 msgid "Name"
-msgstr ""
+msgstr "Izena"
 
 #: templates/manager/manager.html:49 templates/manager/manager.html:65
 msgid "Name:"
-msgstr ""
+msgstr "Izena:"
 
 #: manager.php:35
 msgid "New folder created: "
-msgstr ""
+msgstr "Sortutako karpeta berria: "
 
 #: config/prefs.php.dist:91
 msgid "No"
-msgstr ""
+msgstr "Ez"
 
 #: templates/quota/quota.html:12
 msgid "No quota found."
-msgstr ""
+msgstr "Ez da kuotarik aurkitu."
 
 #: manager.php:264
 msgid "OK"
-msgstr ""
+msgstr "Ados"
 
 #: manager.php:466 templates/manager/manager.html:9
 msgid "Owner"
-msgstr ""
+msgstr "Jabea"
 
 #: config/credentials.php.dist:23
 msgid "Password"
-msgstr ""
+msgstr "Pasahitza"
 
 #: clipboard.php:39
 msgid "Paste"
-msgstr ""
+msgstr "Itsatsi"
 
 #: manager.php:460
 msgid "Permission"
-msgstr ""
+msgstr "Baimena"
 
 #: selectlist.php:63
 #, php-format
 msgid "Permission denied to %s: %s"
-msgstr ""
+msgstr "Baimena ukatu da karpeta honetarako: %s: %s"
 
 #: manager.php:200
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
-msgstr ""
+msgstr "Baimena ukatu da karpeta honetarako: \"%s\": %s"
 
 #: lib/Gollem.php:784
 msgid "Permissions"
-msgstr ""
+msgstr "Baimenak"
 
 #: templates/login/javascript.inc:36
 msgid "Please provide your password."
-msgstr ""
+msgstr "Sartu zure pasahitza."
 
 #: templates/login/javascript.inc:31
 msgid "Please provide your username."
-msgstr ""
+msgstr "Sartu zure erabiltzaile-izena."
 
 #: templates/prefs/columnselect.html:5
 msgid "Please select a backend:"
-msgstr ""
+msgstr "Hautatu modulu bat:"
 
 #: templates/manager/javascript.inc:132
 msgid "Please select an item before this action."
-msgstr ""
+msgstr "Hautatu elementu bat ekintza honen aurretik."
 
 #: templates/manager/javascript.inc:456
 msgid "Please specify at least one file to upload."
-msgstr ""
+msgstr "Zehaztu kargatzeko fitxategi bat gutxienez."
 
 #: quota.php:18 templates/quota/quota.html:2
 msgid "Quota Display"
-msgstr ""
+msgstr "Kuota-bistaratzea"
 
 #: quota.php:61
 msgid "Quota Usage"
-msgstr ""
+msgstr "Kuota-erabilera"
 
 #: templates/manager/manager.html:14
 msgid "Read"
-msgstr ""
+msgstr "Irakurri"
 
 #: manager.php:270
 msgid "Refresh"
-msgstr ""
+msgstr "Freskatu"
 
 #: templates/prefs/columnselect.inc:43
 msgid "Remove column"
-msgstr ""
+msgstr "Kendu zutabea"
 
 #: templates/manager/manager.html:47 templates/manager/manager.html:123
 msgid "Rename"
-msgstr ""
+msgstr "Izena aldatu"
 
 #: lib/Gollem.php:734 lib/Gollem.php:739
 msgid "Root"
-msgstr ""
+msgstr "Root"
 
 #: manager.php:262
 msgid "Save"
-msgstr ""
+msgstr "Gorde"
 
 #: templates/prefs/columnselect.html:30
 msgid "Selected Columns:"
-msgstr ""
+msgstr "Hautatutako zutabeak:"
 
 #: templates/login/login.html:31
 msgid "Server"
-msgstr ""
+msgstr "Zerbitzaria"
 
 #: config/prefs.php.dist:20
 msgid "Settings"
-msgstr ""
+msgstr "Ezarpenak"
 
 #: config/prefs.php.dist:30
 msgid "Show dotfiles?"
-msgstr ""
+msgstr "Erakutsi dot fitxategiak?"
 
 #: manager.php:453
 msgid "Size"
-msgstr ""
+msgstr "Tamaina"
 
 #: manager.php:479
 msgid "Sort Direction"
-msgstr ""
+msgstr "Ordenatzeko noranzkoa"
 
 #: templates/manager/javascript.inc:202
 msgid "The following item(s) are folders: "
-msgstr ""
+msgstr "Elementu hauek karpetak dira: "
 
 #: templates/manager/javascript.inc:198
 msgid "The following items will be permanently deleted: "
-msgstr ""
+msgstr "Elementu hauek betiko borratuko dira: "
 
 #: templates/selectlist/javascript.inc:9
 msgid "The original opener window has been closed. Exiting."
-msgstr ""
+msgstr "Jatorrizko hasierako leihoa itxi egin da. Irteten."
 
 #: login.php:150
 msgid "There are no backends available for the current user."
-msgstr ""
+msgstr "Ez dago modulurik erabilgarri uneko erabiltzailearentzat."
 
 #: selectlist.php:185 templates/manager/manager.html:134
 msgid "There are no files in this folder."
-msgstr ""
+msgstr "Ez dago fitxategirik karpeta honetan."
 
 #: templates/clipboard/clipboard.html:15
 msgid ""
 "To clear items from the clipboard, check the box next to the filename and "
 "click on &quot;Clear&quot;."
 msgstr ""
+"Kendu elementuak arbeletik, hautatu fitxategi-izenaren ondoko koadroa eta "
+"egin klik &quot;Garbitu&quot; botoian."
 
 #: templates/clipboard/clipboard.html:13
 msgid ""
 "To paste items from the clipboard to the current directory, check the box "
 "next to the filename and click on &quot;Paste&quot;."
 msgstr ""
+"Elementuak itsasteko arbeletik uneko direktoriora, hautatu fitxategi-"
+"izenaren ondoko koadroa eta egin klik &quot;Itsatsi&quot; botoian."
 
 #: manager.php:426
 msgid "Type"
-msgstr ""
+msgstr "Mota"
 
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
-msgstr ""
+msgstr "Ezin da sortu moduluaren baimena: %s"
 
 #: lib/Gollem.php:739 lib/Gollem.php:749
 #, php-format
 msgid "Up to %s"
-msgstr ""
+msgstr "Hona: %s"
 
 #: manager.php:283
 msgid "Upload File(s)"
-msgstr ""
+msgstr "Kargatu fitxategia(k)"
 
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
-msgstr ""
+msgstr "Erabiltzailearen interfazea"
 
 #: config/credentials.php.dist:18
 msgid "Username"
-msgstr ""
+msgstr "Erabiltzaile-izena"
 
 #: manager.php:278
 msgid "View Clipboard"
-msgstr ""
+msgstr "Ikusi arbela"
 
 #: login.php:195
 #, php-format
 msgid "Welcome to %s"
-msgstr ""
+msgstr "%s. Ongi etorri!"
 
 #: templates/manager/manager.html:20
 msgid "Write"
-msgstr ""
+msgstr "Idatzi"
 
 #: config/prefs.php.dist:92
 msgid "Yes"
-msgstr ""
+msgstr "Bai"
 
 #: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
-msgstr ""
+msgstr "Gutxienez modulu bat eduki behar duzu definituta baimenak ezartzeko."
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
 msgstr ""
+"Zure arakatzaileak ez du onartzen mota honetako irudiak barnean bistaratzea"
 
 #: lib/Gollem.php:819 lib/Gollem.php:822
 msgid "_Change Server"
-msgstr ""
+msgstr "_Aldatu zerbitzaria"
 
-#: manager.php:215 selectlist.php:74
+#: selectlist.php:74 manager.php:215
 msgid "folder"
-msgstr ""
+msgstr "karpeta"
 
-#: manager.php:216 selectlist.php:75
+#: selectlist.php:75 manager.php:216
 msgid "symlink"
-msgstr ""
+msgstr "esteka sinbolikoa"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 234db63..4ab464d 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -1,13 +1,13 @@
 # Finnish translation for Gollem.
-# Copyright (C)
-# Leena Heino <liinu at uta.fi>, 2005-2006.
+# Copyright
+# Leena Heino <liinu at uta.fi>, 2005-2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem 1.0-cvs\n"
+"Project-Id-Version: Gollem 1.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-10-10 12:59+0300\n"
-"PO-Revision-Date: 2006-03-24 12:59+0300\n"
+"POT-Creation-Date: 2008-11-03 12:17+0200\n"
+"PO-Revision-Date: 2008-12-02 12:59+0200\n"
 "Last-Translator: Leena Heino <liinu at uta.fi>\n"
 "Language-Team: Finnish <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
@@ -15,87 +15,81 @@ msgstr ""
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: manager.php:52
+#: manager.php:57
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
 msgstr "\"%s\" uudelleennimettiin \"%s\""
 
-#: quota.php:59
+#: quota.php:56
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
 msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:268
+#: manager.php:560
 #, php-format
-msgid "%d items"
+msgid "%d item"
 msgstr "%d objekti"
 
-#: manager.php:415
-#, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr "%s hakemistoa ja %s tiedostoa (%s Kb)"
-
-#: manager.php:413
+#: manager.php:560
 #, php-format
-msgid "%s Folders and 1 File (%s Kb)"
-msgstr "%s hakemistoa ja 1 tiedosto (%s Kb)"
+msgid "%d items"
+msgstr "%d objektia"
 
-#: login.php:143
+#: login.php:144
 #, php-format
 msgid "%s Login"
 msgstr "%s sisäänkirjautuminen"
 
-#: manager.php:159
-#, php-format
-msgid "%s was successfully pasted."
-msgstr "%s:n liittäminen onnistui."
-
-#: manager.php:410
+#: edit.php:35
 #, php-format
-msgid "1 Folder and %s Files (%s Kb)"
-msgstr "1 hakemisto ja %s tiedostoa (%s Kb)"
+msgid "%s successfully saved."
+msgstr "%s: tallennus onnistui."
 
-#: manager.php:408
+#: manager.php:179
 #, php-format
-msgid "1 Folder and 1 File (%s Kb)"
-msgstr "1 hakemisto ja 1 tiedosto (%s Kb)"
+msgid "%s was successfully pasted."
+msgstr "%s:n liittäminen onnistui."
 
-#: manager.php:268
-msgid "1 item"
-msgstr "1 objekti"
+#: templates/javascript_defs.php:15
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"Ponnahdusikkunaa ei voitu aukaista. Ehkä selaimessasi on päällä esto "
+"ponnahdusikkunoille?"
 
-#: view.php:31
+#: edit.php:33 edit.php:43 view.php:35 view.php:42
 #, php-format
 msgid "Access denied to %s"
 msgstr "%s pääsy estetty"
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
-#: lib/Gollem.php:490
+#: lib/Gollem.php:109 lib/Gollem.php:431 lib/Gollem.php:493 lib/Gollem.php:514
+#: lib/Gollem.php:531
 #, php-format
 msgid "Access denied to folder \"%s\"."
 msgstr "Pääsy kansioon \"%s\" on estetty."
 
-#: templates/manager/manager.html:111
+#: templates/manager/manager.html:108
 msgid "Actions:"
 msgstr "Toiminnot:"
 
-#: selectlist.php:91
+#: selectlist.php:99
 msgid "Add"
 msgstr "Lisää"
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
-msgstr "Lisää sarake"
+msgstr "Lisää saraket"
 
 #: templates/manager/manager.html:11
 msgid "All"
 msgstr "Kaikki"
 
-#: templates/manager/javascript.inc:202
+#: templates/javascript_defs.php:26
 msgid "Are you sure you wish to continue?"
 msgstr "Oletko varma että haluat jatkaa?"
 
-#: templates/manager/javascript.inc:198
+#: templates/javascript_defs.php:24
 msgid "Are you sure?"
 msgstr "Oletko varma?"
 
@@ -103,7 +97,7 @@ msgstr "Oletko varma?"
 msgid "Ascending"
 msgstr "Nouseva"
 
-#: config/prefs.php.dist:93
+#: config/prefs.php.dist:102
 msgid "Ask"
 msgstr "Kysy"
 
@@ -115,7 +109,7 @@ msgstr "Lis
 msgid "Available Columns:"
 msgstr "Käytettävissä olevat sarakkeet:"
 
-#: lib/api.php:46
+#: lib/api.php:483
 msgid "Backends"
 msgstr "Taustajärjestelmät"
 
@@ -123,43 +117,43 @@ msgstr "Taustaj
 msgid "Below is the current contents of your clipboard."
 msgstr "Alla on leikepöydän nykyinen sisältö."
 
-#: clipboard.php:37 manager.php:263 selectlist.php:93
+#: clipboard.php:38 manager.php:285 selectlist.php:101
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr "Peru"
 
-#: manager.php:72
+#: manager.php:79
 #, php-format
-msgid "Cannot chmod %s"
-msgstr "Ei voi suorittaa chmod %s"
+msgid "Cannot chmod %s: %s"
+msgstr "Ei voi suorittaa chmod %s: %s"
 
-#: manager.php:133
+#: manager.php:150
 msgid "Cannot copy items onto clipboard."
 msgstr "Ei voi kopioida objekteja leikepöydälle."
 
-#: manager.php:192
+#: manager.php:212
 #, php-format
 msgid "Cannot create home directory: %s"
 msgstr "Ei voi luoda kotihakemistoa: %s"
 
-#: manager.php:135
+#: manager.php:152
 msgid "Cannot cut items onto clipboard."
 msgstr "Ei voi leikata objekteja leikepöydälle."
 
-#: manager.php:80
-#, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr "Ei voi poistaa \"%s\": %s"
-
-#: manager.php:157
+#: manager.php:173
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr "Ei voi liittää \"%s\" (tiedosto on poistettu leikepöydältä: %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:77
+#: manager.php:313 templates/manager/manager.html:70
 msgid "Change Folder"
 msgstr "Vaihda hakemistoa"
 
-#: selectlist.php:101 lib/Gollem.php:821
+#: templates/manager/manager.html:110
+msgid "Change Permissions"
+msgstr "Muuta oikeuksia"
+
+#: selectlist.php:109 lib/Gollem.php:852
 msgid "Change Server"
 msgstr "Vaihda palvelinta"
 
@@ -171,19 +165,15 @@ msgstr "Voit vaihtaa tiedostojen ja kansioiden k
 msgid "Change your file sorting options."
 msgstr "Voit vaihtaa tiedostojen järjestyksen asetuksia."
 
-#: lib/Gollem.php:795
+#: lib/Gollem.php:827
 msgid "Check Quota"
 msgstr "Tarkista kiintiö"
 
-#: manager.php:492
+#: manager.php:556
 msgid "Check _All/None"
 msgstr "Valitse _kaikki/ei mitään"
 
-#: templates/manager/manager.html:113
-msgid "Chmod"
-msgstr "Chmod"
-
-#: manager.php:70
+#: manager.php:77
 msgid "Chmod done: "
 msgstr "Chmod suoritettu: "
 
@@ -191,28 +181,33 @@ msgstr "Chmod suoritettu: "
 msgid "Choose the columns to display in the file manager."
 msgstr "Voit valita tiedostohallinnassa näytettävät sarakkeet."
 
-#: clipboard.php:38
+#: clipboard.php:39 templates/manager/manager.html:129
 msgid "Clear"
 msgstr "Tyhjennä"
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
 msgstr "Leikepöytä"
 
-#: quota.php:31
+#: quota.php:32
 msgid "Close"
 msgstr "Sulje"
 
-#: login.php:254
+#: login.php:258
 #, php-format
 msgid "Connect to: %s"
 msgstr "Yhdistä: %s"
 
-#: clipboard.php:41 templates/manager/manager.html:116
+#: clipboard.php:42 templates/manager/manager.html:113
 msgid "Copy"
 msgstr "Kopioi"
 
-#: lib/Gollem.php:774 templates/manager/manager.html:63
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Ei voitu tallentaa käännettyä kaavatiedostoa '%s'."
+
+#: manager.php:306 templates/manager/manager.html:58
 msgid "Create Folder"
 msgstr "Luo hakemisto"
 
@@ -222,14 +217,14 @@ msgid ""
 "Created empty permissions for \"%s\". You must explicitly grant access to "
 "this backend now."
 msgstr ""
-"Luotiin tyhjät oikeudet \"%s\":lle. Sinun pitää nyt antaa eksplisiittisesti "
-"oikeudet tälle taustajärjestelmälle."
+"Luotiin tyhjä oikeus \"%s\":lle. Sinun pitää erikseen antaa oikeudet tälle "
+"taustajärjestelmälle."
 
 #: templates/clipboard/clipboard.html:17
 msgid "Current directory:"
 msgstr "Nykyinen hakemisto:"
 
-#: clipboard.php:40 templates/manager/manager.html:117
+#: clipboard.php:41 templates/manager/manager.html:114
 msgid "Cut"
 msgstr "Leikkaa"
 
@@ -241,11 +236,11 @@ msgstr "Oletusj
 msgid "Default sorting direction:"
 msgstr "Oletusjärjestyksensuunta:"
 
-#: templates/manager/manager.html:120
+#: templates/manager/manager.html:117
 msgid "Delete"
 msgstr "Poista"
 
-#: config/prefs.php.dist:95
+#: config/prefs.php.dist:104
 msgid "Delete folders recursively?"
 msgstr "Poista hakemistot rekursiivisesti."
 
@@ -253,16 +248,16 @@ msgstr "Poista hakemistot rekursiivisesti."
 msgid "Descending"
 msgstr "Laskeva"
 
-#: selectlist.php:92
+#: selectlist.php:100
 msgid "Done"
 msgstr "Valmis"
 
-#: manager.php:214
+#: manager.php:235
 msgid "Download"
 msgstr "Tallenna"
 
 # php-format
-#: manager.php:382
+#: manager.php:440
 #, php-format
 msgid "Download %s"
 msgstr "Tallenna %s"
@@ -271,6 +266,15 @@ msgstr "Tallenna %s"
 msgid "ERROR:"
 msgstr "VIRHE:"
 
+#: manager.php:234
+msgid "Edit"
+msgstr "Muokkaa"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Muokkaa %s"
+
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "Sähköposti"
@@ -279,7 +283,7 @@ msgstr "S
 msgid "Execute"
 msgstr "Suorita"
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:183
+#: templates/javascript_defs.php:28 templates/manager/manager.html:195
 msgid "File"
 msgstr "Tiedosto"
 
@@ -303,20 +307,36 @@ msgstr "Tiedoston koko"
 msgid "File Type"
 msgstr "Tiedoston tyyppi"
 
-#: manager.php:76
+#: manager.php:96
 msgid "File deleted: "
 msgstr "Tiedosto poistettiin: "
 
-#: manager.php:101
+#: manager.php:119
 #, php-format
 msgid "File received: %s"
 msgstr "Tiedosto vastaanotettiin: %s"
 
-#: manager.php:78
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr "Tiedostot pitää kirjoittaa VFS-taustajärjestään."
+
+#: templates/manager/manager.html:127
+msgid "Filter"
+msgstr "Suodata"
+
+#: templates/manager/manager.html:126
+msgid "Filter:"
+msgstr "Suodatin:"
+
+#: manager.php:88
 msgid "Folder removed: "
 msgstr "Kansio poistettiin: "
 
-#: templates/manager/manager.html:79
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr "Kansiot pitää tehdä VFS-taustajärjestelmään."
+
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "Mene:"
 
@@ -324,29 +344,35 @@ msgstr "Mene:"
 msgid "Gollem Backend Permissions Administration"
 msgstr "Gollem taustajärjestelmien oikeuksien hallinta"
 
-#: manager.php:472 templates/manager/manager.html:10
+#: manager.php:535 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Ryhmä"
 
-#: lib/Gollem.php:770
-msgid "Home"
-msgstr "Koti"
-
-#: manager.php:56
+#: manager.php:62
 msgid "Incorrect number of items."
 msgstr "Objektien lukumäärä on väärä."
 
-#: manager.php:126
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Epäkelpo taustajärjestelmäpyyntö: %s"
+
+#: manager.php:143
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "Objekti kopioitiin leikepöydälle: %s"
 
-#: manager.php:128
+#: manager.php:145
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr "Objekti leikattiin leikepöydälle: %s"
 
-#: templates/login/login.html:67
+#: config/prefs.php.dist:90
+msgid "Items per page"
+msgstr "Objekteja per sivu"
+
+#: templates/login/login.html:68
 msgid "Language"
 msgstr "Kieli"
 
@@ -354,47 +380,39 @@ msgstr "Kieli"
 msgid "List folders first?"
 msgstr "Listaa ensin hakemistot."
 
-#: login.php:303
+#: login.php:307
 msgid "Login"
 msgstr "Kirjaudu sisään"
 
-#: quota.php:62
-msgid "MB free"
-msgstr "MB vapaana"
-
-#: quota.php:62
-msgid "MB used"
-msgstr "MB käytetty"
-
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "Valikkolista"
 
-#: manager.php:446
+#: manager.php:505
 msgid "Modified"
 msgstr "Muokattu"
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
 msgstr "Siirrä vasemmalle"
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
 msgstr "Siirrä oikealle"
 
-#: manager.php:433
+#: manager.php:483
 msgid "Name"
 msgstr "Nimi"
 
-#: templates/manager/manager.html:49 templates/manager/manager.html:65
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "Nimi:"
 
-#: manager.php:35
+#: manager.php:41
 msgid "New folder created: "
 msgstr "Luotiin uusi kansio: "
 
-#: config/prefs.php.dist:91
+#: config/prefs.php.dist:100
 msgid "No"
 msgstr "Ei"
 
@@ -402,11 +420,11 @@ msgstr "Ei"
 msgid "No quota found."
 msgstr "Kiintiötä ei löytynyt."
 
-#: manager.php:264
+#: manager.php:286
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:466 templates/manager/manager.html:9
+#: manager.php:528 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "Omistaja"
 
@@ -414,33 +432,34 @@ msgstr "Omistaja"
 msgid "Password"
 msgstr "Salasana"
 
-#: clipboard.php:39
+#: clipboard.php:40
 msgid "Paste"
 msgstr "Liitä"
 
-#: manager.php:460
+#: manager.php:521
 msgid "Permission"
 msgstr "Oikeus"
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "Käyttö estetty %s: %s"
 
-#: manager.php:200
+#: manager.php:220
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
 msgstr "Kansion \"%s\" käyttö estetty: %s"
 
-#: lib/Gollem.php:784
-msgid "Permissions"
-msgstr "Oikeudet"
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
+msgstr "Tämän taustajärjestelmän käyttö on estetty."
 
-#: templates/login/javascript.inc:36
+#: templates/javascript_defs.php:19
 msgid "Please provide your password."
 msgstr "Anna salasanasi."
 
-#: templates/login/javascript.inc:31
+#: templates/javascript_defs.php:18
 msgid "Please provide your username."
 msgstr "Anna käyttäjätunnuksesi."
 
@@ -448,43 +467,51 @@ msgstr "Anna k
 msgid "Please select a backend:"
 msgstr "Valitse taustajärjestelmä:"
 
-#: templates/manager/javascript.inc:132
+#: templates/javascript_defs.php:22
 msgid "Please select an item before this action."
 msgstr "Valitse objekti ennen tätä toimintoa."
 
-#: templates/manager/javascript.inc:456
+#: templates/javascript_defs.php:27
 msgid "Please specify at least one file to upload."
-msgstr "Valitso ainakin yksi tiedosto tuotavaksi."
+msgstr "Valitso ainakin yksi tiedosto tuotavaksi palvelimelle."
 
-#: quota.php:18 templates/quota/quota.html:2
+#: quota.php:19 templates/quota/quota.html:2
 msgid "Quota Display"
 msgstr "Kiintiönäkymä"
 
-#: quota.php:61
-msgid "Quota Usage"
-msgstr "Kiintiön käyttö"
-
 #: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Luku"
 
-#: manager.php:270
+#: manager.php:291
 msgid "Refresh"
 msgstr "Päivitä"
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
 msgstr "Poista sarake"
 
-#: templates/manager/manager.html:47 templates/manager/manager.html:123
+#: templates/manager/manager.html:44 templates/manager/manager.html:120
 msgid "Rename"
 msgstr "Nimeä uudelleen"
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
+msgstr "Uudelleen nimeäminen eri taustajärjestelmien välillä ei ole tuettu."
+
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr "Taustajärjestelmien uudelleennimeäminen ei ole sallittu."
+
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Palauta"
+
+#: lib/Gollem.php:775 lib/Gollem.php:780
 msgid "Root"
 msgstr "juuri"
 
-#: manager.php:262
+#: manager.php:284 templates/edit/edit.inc:11
 msgid "Save"
 msgstr "Talleta"
 
@@ -492,7 +519,7 @@ msgstr "Talleta"
 msgid "Selected Columns:"
 msgstr "Valitut sarakkeet:"
 
-#: templates/login/login.html:31
+#: templates/login/login.html:32
 msgid "Server"
 msgstr "Palvelin"
 
@@ -504,31 +531,31 @@ msgstr "Asetukset"
 msgid "Show dotfiles?"
 msgstr "Näytä pistetiedostot."
 
-#: manager.php:453
+#: manager.php:513
 msgid "Size"
 msgstr "Koko"
 
-#: manager.php:479
-msgid "Sort Direction"
-msgstr "Järjestyksen suunta"
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
+msgstr "Ohjelmakansiota ei voi poistaa."
 
-#: templates/manager/javascript.inc:202
-msgid "The following item(s) are folders: "
+#: templates/javascript_defs.php:25
+msgid "The following item(s) are folders:"
 msgstr "Seuraavat objektit ovat kansioissa: "
 
-#: templates/manager/javascript.inc:198
-msgid "The following items will be permanently deleted: "
-msgstr "Seuraavat objektit poistetaan lopullisesti: "
+#: templates/javascript_defs.php:23
+msgid "The following items will be permanently deleted:"
+msgstr "Seuraavat objektit poistetaan lopullisesti:"
 
-#: templates/selectlist/javascript.inc:9
+#: templates/javascript_defs.php:31
 msgid "The original opener window has been closed. Exiting."
 msgstr "Alkuperäinen aukaisuikkuna on suljettu. Poistutaan."
 
-#: login.php:150
+#: login.php:151
 msgid "There are no backends available for the current user."
 msgstr "Tämänhetkiselle käyttäjälle ei ole taustajärjestelmiä käytettävissä."
 
-#: selectlist.php:185 templates/manager/manager.html:134
+#: selectlist.php:199 templates/manager/manager.html:138
 msgid "There are no files in this folder."
 msgstr "Tässä hakemistossa ei ole tiedostoja."
 
@@ -549,23 +576,38 @@ msgstr ""
 "tiedostonnimen vieressä valintalaatikko ja napsauta &quot;Liitä&quot;-"
 "painiketta."
 
-#: manager.php:426
+#: manager.php:475
 msgid "Type"
 msgstr "Tyyppi"
 
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr "Ei voida luoda Gollem-istuntoa"
+
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
-msgstr "Ei voida luoda taustajärjestelmän oikeuksia: %s"
+msgstr "Ei voida luoda taustajärjestelmäoikeutta: %s"
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: manager.php:93
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "Ei voi poistaa tiedostoa %s: %s"
+
+#: manager.php:85
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "Ei voi poistaa kansiota %s: %s"
+
+#: lib/Gollem.php:780 lib/Gollem.php:790
 #, php-format
 msgid "Up to %s"
 msgstr "Ylöspäin %s"
 
-#: manager.php:283
+#: manager.php:303
 msgid "Upload File(s)"
-msgstr "Tuo tiedostoja"
+msgstr "Tuo tiedostot palvelimelle"
 
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
@@ -575,11 +617,11 @@ msgstr "K
 msgid "Username"
 msgstr "Käyttäjätunnus"
 
-#: manager.php:278
+#: manager.php:298
 msgid "View Clipboard"
 msgstr "Näytä leikepöytä"
 
-#: login.php:195
+#: login.php:201
 #, php-format
 msgid "Welcome to %s"
 msgstr "Tervetuloa ohjelmaan %s"
@@ -588,7 +630,7 @@ msgstr "Tervetuloa ohjelmaan %s"
 msgid "Write"
 msgstr "Kirjoitus"
 
-#: config/prefs.php.dist:92
+#: config/prefs.php.dist:101
 msgid "Yes"
 msgstr "Kyllä"
 
@@ -602,14 +644,22 @@ msgstr ""
 msgid "Your browser does not support inline display of this image type"
 msgstr "Käyttämäsi selain ei tue tämän kuvatyypin näyttämistä sisällytettynä"
 
-#: lib/Gollem.php:819 lib/Gollem.php:822
+#: lib/Gollem.php:850 lib/Gollem.php:853
 msgid "_Change Server"
 msgstr "_Vaihda palvelinta"
 
-#: manager.php:215 selectlist.php:74
+#: lib/Gollem.php:811
+msgid "_My Home"
+msgstr "_Oma koti"
+
+#: lib/Gollem.php:816
+msgid "_Permissions"
+msgstr "_Oikeudet"
+
+#: manager.php:236 selectlist.php:75
 msgid "folder"
 msgstr "kansio"
 
-#: manager.php:216 selectlist.php:75
+#: manager.php:237 selectlist.php:76
 msgid "symlink"
 msgstr "symbolinen linkki"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 5ca9d87..4faeae7 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -1,17 +1,17 @@
 # translation of fr_FR.po to French
-# Gollem 1.0 French translation.
-# Copyright (C) 2001 Rémi Cohen-Scali.
-# Copyright (C) 2004 Benoit St-André
-# Copyright (C) 2005 Thierry Thomas
+# Gollem 1.1-cvs French translation.
+# Copyright 2001 Rémi Cohen-Scali.
+# Copyright 2004 Benoit St-André
+# Copyright 2005 Thierry Thomas
 # Rémi Cohen-Scali <Remi at cohen-scali.com>, 2001.
 # Benoit St-André <ben at benoitst-andre.net>, 2004.
-# Thierry Thomas <thierry at horde.org>, 2005.
+# Thierry Thomas <thierry at horde.org>, 2005, 2007.
 msgid ""
 msgstr ""
 "Project-Id-Version: fr_FR\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-06-12 23:02+0200\n"
-"PO-Revision-Date: 2005-06-12 22:52+0400\n"
+"POT-Creation-Date: 2007-02-22 23:39+0100\n"
+"PO-Revision-Date: 2007-02-23 21:23+0100\n"
 "Last-Translator: Thierry Thomas <thierry at horde.org>\n"
 "Language-Team: French <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
@@ -19,82 +19,100 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: templates/manager/header.inc:639
+#: manager.php:52
+#, php-format
+msgid "\"%s\" renamed to \"%s\""
+msgstr "« %s » renommé en « %s »"
+
+#: quota.php:56
+#, php-format
+msgid "%.2fMB / %.2fMB  (%.2f%%)"
+msgstr "%.2fMo / %.2fMo  (%.2f%%)"
+
+#: manager.php:271
 #, php-format
 msgid "%d items"
 msgstr "%d éléments"
 
-#: templates/manager/file_headers.inc:22
+#: manager.php:437
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s dossiers et %s fichiers (%s Ko)"
 
-#: templates/manager/file_headers.inc:20
+#: manager.php:435
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s dossiers et 1 fichier (%s Ko)"
 
-#: templates/xppublish/backend.inc:10 templates/login/login.inc:72
+#: login.php:144
 #, php-format
 msgid "%s Login"
 msgstr "Connexion à %s"
 
-#: manager.php:171
+#: edit.php:35
 #, php-format
-msgid "%s was successfully pasted."
-msgstr "%s a été copié avec succès."
+msgid "%s successfully saved."
+msgstr "%s a été enregistré avec succès."
 
-#: manager.php:67
+#: manager.php:167
 #, php-format
-msgid "'%s' renamed to '%s'"
-msgstr "« %s » renommé en « %s »"
+msgid "%s was successfully pasted."
+msgstr "%s a été copié avec succès."
 
-#: templates/manager/file_headers.inc:17
+#: manager.php:432
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 dossier et %s fichiers (%s Ko)"
 
-#: templates/manager/file_headers.inc:15
+#: manager.php:430
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 dossier et 1 fichier (%s Ko)"
 
-#: templates/manager/header.inc:639
+#: manager.php:271
 msgid "1 item"
 msgstr "1 élément"
 
-#: view.php:23
+#: gollem.js.php:44
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"Une nouvelle fenêtre ne peut être ouverte. Est-il possible que vous ayez "
+"activé le blocage des fenêtres surgissantes ?"
+
+#: edit.php:33 edit.php:43 view.php:33
 #, php-format
 msgid "Access denied to %s"
 msgstr "Accès à %s refusé"
 
-#: lib/Gollem.php:119 lib/Gollem.php:413 lib/Gollem.php:448 lib/Gollem.php:471
-#: lib/Gollem.php:490
+#: lib/Gollem.php:109 lib/Gollem.php:383 lib/Gollem.php:445 lib/Gollem.php:466
+#: lib/Gollem.php:483
 #, php-format
 msgid "Access denied to folder \"%s\"."
 msgstr "Accès refusé au dossier « %s »."
 
-#: templates/manager/header.inc:660
-msgid "Actions"
-msgstr "Actions"
+#: templates/manager/manager.html:124
+msgid "Actions:"
+msgstr "Actions :"
 
-#: templates/selectlist/footer.inc:3
+#: selectlist.php:99
 msgid "Add"
 msgstr "Ajouter"
 
-#: templates/prefs/columnselect.inc:234
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
 msgstr "Ajouter un champ"
 
-#: templates/manager/header.inc:499
+#: templates/manager/manager.html:11
 msgid "All"
 msgstr "Tout"
 
-#: templates/manager/header.inc:180
+#: gollem.js.php:55
 msgid "Are you sure you wish to continue?"
 msgstr "Êtes-vous réellement certain de vouloir continuer ?"
 
-#: templates/manager/header.inc:176
+#: gollem.js.php:53
 msgid "Are you sure?"
 msgstr "Êtes-vous certain ?"
 
@@ -102,69 +120,70 @@ msgstr "
 msgid "Ascending"
 msgstr "Croissant"
 
-#: config/prefs.php.dist:94
+#: config/prefs.php.dist:93
 msgid "Ask"
 msgstr "Demander"
 
-#: templates/manager/header.inc:493
+#: templates/manager/manager.html:5
 msgid "Attributes"
 msgstr "Propriétés"
 
-#: templates/prefs/columnselect.inc:230
+#: templates/prefs/columnselect.html:20
 msgid "Available Columns:"
 msgstr "Champs disponibles :"
 
-#: lib/api.php:46
+#: lib/api.php:50
 msgid "Backends"
 msgstr "Dorsaux"
 
-#: templates/xppublish/browse.inc:7
-msgid "Browse to the folder to upload files to"
-msgstr "Aller au dossier dans lequel télécharger les fichiers"
+#: templates/clipboard/clipboard.html:11
+msgid "Below is the current contents of your clipboard."
+msgstr "Voir ci-dessous le contenu de votre presse-papiers."
 
-#: templates/manager/header.inc:521 templates/manager/header.inc:554
-#: templates/manager/header.inc:586 templates/manager/header.inc:618
-#: templates/selectlist/footer.inc:5
+#: clipboard.php:38 manager.php:266 selectlist.php:101
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr "Annuler"
 
-#: manager.php:89
+#: manager.php:72
 #, php-format
-msgid "Cannot chmod %s"
-msgstr "Impossible d'altérer les permissions de %s"
+msgid "Cannot chmod %s: %s"
+msgstr "Impossible de modifier les permissions de %s : %s"
 
-#: manager.php:147
+#: manager.php:141
 msgid "Cannot copy items onto clipboard."
 msgstr "Impossible de copier les éléments dans le presse-papiers"
 
-#: manager.php:194
+#: manager.php:200
 #, php-format
 msgid "Cannot create home directory: %s"
 msgstr "Impossible de créer le dossier d'accueil : %s"
 
-#: manager.php:149
+#: manager.php:143
 msgid "Cannot cut items onto clipboard."
 msgstr "Impossible de couper les éléments vers le presse-papiers"
 
-#: manager.php:97
+#: manager.php:165
 #, php-format
-msgid "Cannot delete '%s': %s"
-msgstr "Impossible de supprimer « %s » : %s"
-
-#: manager.php:169
-#, php-format
-msgid "Cannot paste '%s' (clipboard cleared): %s"
+msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr "Impossible de coller « %s » (presse-papiers vidé) : %s"
 
-#: templates/manager/header.inc:599 templates/manager/header.inc:662
-#: lib/Gollem.php:751
+#: templates/manager/manager.html:70
 msgid "Change Folder"
 msgstr "Changer de dossier"
 
-#: templates/menu.inc:8 templates/selectlist/header.inc:17
+#: templates/manager/manager.html:126
+msgid "Change Permissions"
+msgstr "Modifier les permissions"
+
+#: selectlist.php:109 lib/Gollem.php:813
 msgid "Change Server"
 msgstr "Changer de serveur"
 
+#: lib/Gollem.php:770
+msgid "Change _Folder"
+msgstr "Changer de _dossier"
+
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
 msgstr "Modifier les préférences de gestion des fichiers et des dossiers"
@@ -173,39 +192,68 @@ msgstr "Modifier les pr
 msgid "Change your file sorting options."
 msgstr "Changer vos critères de tri de fichiers."
 
-#: templates/manager/file_headers.inc:28
+#: lib/Gollem.php:788
+msgid "Check Quota"
+msgstr "Vérifier les quotas"
+
+#: manager.php:528
 msgid "Check _All/None"
 msgstr "Cocher _Tout/Rien"
 
-#: templates/manager/header.inc:675
-msgid "Chmod Items"
-msgstr "Altération du mode des éléments (permissions)"
-
-#: manager.php:87
+#: manager.php:70
 msgid "Chmod done: "
 msgstr "Altération du mode (permissions) effectué : "
 
-#: templates/prefs/columnselect.inc:224
+#: templates/prefs/columnselect.html:12
 msgid "Choose the columns to display in the file manager."
 msgstr "Choisir les champs à afficher dans le gestionnaire de fichiers."
 
-#: templates/xppublish/backend.inc:33 templates/login/login.inc:95
+#: clipboard.php:39
+msgid "Clear"
+msgstr "Effacer"
+
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
+msgid "Clipboard"
+msgstr "Presse-papiers"
+
+#: quota.php:32
+msgid "Close"
+msgstr "Fermer"
+
+#: login.php:256
 #, php-format
 msgid "Connect to: %s"
 msgstr "Se connecter à : %s"
 
-#: templates/manager/header.inc:678
-msgid "Copy Items"
-msgstr "Copier les éléments"
+#: clipboard.php:42 templates/manager/manager.html:129
+msgid "Copy"
+msgstr "Copier"
 
-#: templates/manager/header.inc:567 templates/manager/header.inc:665
-#: lib/Gollem.php:748
+#: lib/Template.php:235
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Impossible d'enregistrer le fichier de gabarit compilé « %s »."
+
+#: templates/manager/manager.html:58
 msgid "Create Folder"
 msgstr "Créer un dossier"
 
-#: templates/manager/header.inc:677
-msgid "Cut Items"
-msgstr "Couper les éléments"
+#: permissions.php:47
+#, php-format
+msgid ""
+"Created empty permissions for \"%s\". You must explicitly grant access to "
+"this backend now."
+msgstr ""
+"Permissions vierges créées pour « %s ». Vous devez maintenant explicitement "
+"attribuer des permissions sur ce module."
+
+#: templates/clipboard/clipboard.html:17
+msgid "Current directory:"
+msgstr "Répertoire courant :"
+
+#: clipboard.php:41 templates/manager/manager.html:130
+msgid "Cut"
+msgstr "Couper"
 
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
@@ -215,11 +263,11 @@ msgstr "Crit
 msgid "Default sorting direction:"
 msgstr "Sens de tri par défaut :"
 
-#: templates/manager/header.inc:672
-msgid "Delete Items"
-msgstr "Supprimer les élément(s)"
+#: templates/manager/manager.html:133
+msgid "Delete"
+msgstr "Supprimer"
 
-#: config/prefs.php.dist:96
+#: config/prefs.php.dist:95
 msgid "Delete folders recursively?"
 msgstr "Supprimer les dossiers récursivement ?"
 
@@ -227,28 +275,41 @@ msgstr "Supprimer les dossiers r
 msgid "Descending"
 msgstr "Décroissant"
 
-#: templates/selectlist/footer.inc:4
+#: selectlist.php:100
 msgid "Done"
 msgstr "Terminé"
 
-#: manager.php:222 templates/manager/file_headers.inc:42
+#: manager.php:226
 msgid "Download"
 msgstr "Télécharger"
 
-#: xppublish.php:138
+#: manager.php:404
 #, php-format
-msgid "ERROR: %s"
-msgstr "ERREUR : %s"
+msgid "Download %s"
+msgstr "Télécharger %s"
+
+#: templates/quota/quota.html:7
+msgid "ERROR:"
+msgstr "ERREUR :"
+
+#: manager.php:225
+msgid "Edit"
+msgstr "Éditer"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Éditer %s"
 
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "Courriel"
 
-#: templates/manager/header.inc:514
+#: templates/manager/manager.html:26
 msgid "Execute"
 msgstr "Exécuter"
 
-#: templates/manager/header.inc:464 templates/manager/header.inc:649
+#: gollem.js.php:57 templates/manager/manager.html:203
 msgid "File"
 msgstr "Fichier"
 
@@ -272,186 +333,180 @@ msgstr "Taille du fichier"
 msgid "File Type"
 msgstr "Type de fichier"
 
-#: templates/xppublish/javascript.inc:63
-msgid "File Upload"
-msgstr "Téléchargement de fichier"
-
-#: manager.php:93
+#: manager.php:87
 msgid "File deleted: "
 msgstr "Fichier supprimé : "
 
-#: manager.php:120
+#: manager.php:109
 #, php-format
 msgid "File received: %s"
 msgstr "Fichier reçu : %s"
 
-#: manager.php:95
+#: manager.php:80
 msgid "Folder removed: "
 msgstr "Dossier supprimé : "
 
-#: templates/manager/header.inc:607
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "Allez à :"
 
-#: templates/manager/file_headers.inc:64 templates/manager/header.inc:498
+#: permissions.php:21
+msgid "Gollem Backend Permissions Administration"
+msgstr "Module Gollem d'administration des permissions"
+
+#: manager.php:508 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Groupe"
 
-#: lib/Gollem.php:744
-msgid "Home"
-msgstr "Accueil"
-
-#: manager.php:71
+#: manager.php:56
 msgid "Incorrect number of items."
 msgstr "Nombre d'éléments incorrect."
 
-#: manager.php:140
+#: manager.php:134
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "Élément copié dans le presse-papiers : %s"
 
-#: manager.php:142
+#: manager.php:136
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr "Élément coupé vers le presse-papiers : %s"
 
+#: templates/login/login.html:67
+msgid "Language"
+msgstr "Langue"
+
 #: config/prefs.php.dist:81
 msgid "List folders first?"
 msgstr "Afficher les dossiers en premier ?"
 
-#: templates/login/login.inc:119
-msgid "Log in"
+#: login.php:305
+msgid "Login"
 msgstr "Connexion"
 
-#: templates/xppublish/login.inc:2
-#, php-format
-msgid "Login to %s"
-msgstr "Connexion à %s"
-
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "Menu"
 
-#: templates/manager/file_headers.inc:47
+#: manager.php:478
 msgid "Modified"
 msgstr "Modifié"
 
-#: templates/prefs/columnselect.inc:244
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
 msgstr "Vers la gauche"
 
-#: templates/prefs/columnselect.inc:246
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
 msgstr "Vers la droite"
 
-#: templates/manager/file_headers.inc:38
+#: manager.php:456
 msgid "Name"
 msgstr "Nom"
 
-#: templates/manager/header.inc:543 templates/manager/header.inc:575
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "Nom :"
 
-#: manager.php:48
+#: manager.php:35
 msgid "New folder created: "
 msgstr "Nouveau dossier créé : "
 
-#: config/prefs.php.dist:92
+#: config/prefs.php.dist:91
 msgid "No"
 msgstr "Non"
 
-#: templates/manager/header.inc:553 templates/manager/header.inc:585
-#: templates/manager/header.inc:617
+#: templates/quota/quota.html:12
+msgid "No quota found."
+msgstr "Pas de quota trouvé."
+
+#: manager.php:267
 msgid "OK"
 msgstr "OK"
 
-#: templates/manager/file_headers.inc:60 templates/manager/header.inc:497
+#: manager.php:501 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "Propriétaire"
 
-#: templates/xppublish/login.inc:14 config/credentials.php.dist:23
+#: config/credentials.php.dist:23
 msgid "Password"
 msgstr "Mot de passe"
 
-#: templates/manager/header.inc:684
-msgid "Paste Items"
-msgstr "Coller les éléments"
+#: clipboard.php:40
+msgid "Paste"
+msgstr "Coller"
 
-#: templates/manager/file_headers.inc:56
+#: manager.php:494
 msgid "Permission"
 msgstr "Permission"
 
-#: selectlist.php:65 templates/xppublish/browse.inc:28
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "Accès refusé à %s : %s"
 
-#: manager.php:202
+#: manager.php:208
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
 msgstr "Accès refusé au dossier « %s » : %s"
 
-#: xppublish.php:55
-msgid "Please enter your Username and Password."
-msgstr "Veuillez saisir votre nom d'utilisateur et votre mot de passe."
-
-#: templates/login/login.inc:36
+#: gollem.js.php:48
 msgid "Please provide your password."
 msgstr "Veuillez saisir votre mot de passe."
 
-#: templates/login/login.inc:31
+#: gollem.js.php:47
 msgid "Please provide your username."
 msgstr "Veuillez saisir votre nom d'utilisateur."
 
-#: templates/prefs/columnselect.inc:215
+#: templates/prefs/columnselect.html:5
 msgid "Please select a backend:"
 msgstr "Veuillez choisir un dorsal :"
 
-#: templates/manager/header.inc:109
+#: gollem.js.php:51
 msgid "Please select an item before this action."
 msgstr "Veuillez sélectionner un élément pour exécuter cette action."
 
-#: templates/manager/header.inc:435
+#: gollem.js.php:56
 msgid "Please specify at least one file to upload."
 msgstr "Veuillez indiquer au moins un fichier à envoyer."
 
-#: templates/manager/header.inc:502
+#: quota.php:19 templates/quota/quota.html:2
+msgid "Quota Display"
+msgstr "Affichage du quota"
+
+#: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Lire"
 
-#: templates/manager/header.inc:642
+#: manager.php:273
 msgid "Refresh"
 msgstr "Rafraîchir"
 
-#: templates/prefs/columnselect.inc:236
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
 msgstr "Retirer le champ"
 
-#: templates/manager/header.inc:535
+#: templates/manager/manager.html:44 templates/manager/manager.html:136
 msgid "Rename"
 msgstr "Renommer"
 
-#: templates/manager/header.inc:669
-msgid "Rename Items"
-msgstr "Renommer les éléments"
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "RÀZ"
 
-#: lib/Gollem.php:710 lib/Gollem.php:715
+#: lib/Gollem.php:727 lib/Gollem.php:732
 msgid "Root"
 msgstr "Racine"
 
-#: templates/manager/header.inc:520
+#: manager.php:265 templates/edit/edit.inc:11
 msgid "Save"
 msgstr "Enregistrer"
 
-#: templates/xppublish/backend.inc:27
-msgid "Select"
-msgstr "Sélectionner"
-
-#: templates/prefs/columnselect.inc:240
+#: templates/prefs/columnselect.html:30
 msgid "Selected Columns:"
 msgstr "Colonnes sélectionnées :"
 
-#: templates/xppublish/backend.inc:22 templates/login/login.inc:85
+#: templates/login/login.html:31
 msgid "Server"
 msgstr "Serveur"
 
@@ -463,138 +518,128 @@ msgstr "Param
 msgid "Show dotfiles?"
 msgstr "Afficher les fichiers précédés d'un point ?"
 
-#: templates/manager/file_headers.inc:52
+#: manager.php:486
 msgid "Size"
 msgstr "Taille"
 
-#: templates/manager/file_headers.inc:32 templates/manager/file_headers.inc:37
-#: templates/manager/file_headers.inc:46 templates/manager/file_headers.inc:51
-msgid "Sort Direction"
-msgstr "Sens du tri"
+#: gollem.js.php:54
+msgid "The following item(s) are folders:"
+msgstr "Les éléments suivants sont des dossiers :"
 
-#: templates/manager/header.inc:180
-msgid "The following item(s) are folders: "
-msgstr "Les éléments suivants sont des dossiers : "
+#: gollem.js.php:52
+msgid "The following items will be permanently deleted:"
+msgstr "Les éléments suivants seront supprimés définitivement :"
 
-#: templates/manager/header.inc:176
-msgid "The following items will be permanently deleted: "
-msgstr "Les éléments suivants seront supprimés définitivement : "
+#: gollem.js.php:60
+msgid "The original opener window has been closed. Exiting."
+msgstr "La fenêtre de départ s'est fermée. Sortie."
 
-#: templates/manager/empty_dir.inc:1 templates/selectlist/empty_dir.inc:2
+#: login.php:151
+msgid "There are no backends available for the current user."
+msgstr "Aucun module n'est disponible pour l'utilisateur courant."
+
+#: selectlist.php:199 templates/manager/manager.html:147
 msgid "There are no files in this folder."
 msgstr "Il n'y a aucun fichier dans ce dossier."
 
-#: templates/xppublish/browse.inc:74
+#: templates/clipboard/clipboard.html:15
 msgid ""
-"There are no folders in the current folder; click 'Next' if you want to "
-"upload files to this folder."
+"To clear items from the clipboard, check the box next to the filename and "
+"click on &quot;Clear&quot;."
 msgstr ""
-"Il n'y a pas de dossiers dans le dossier actuel ; cliquez « Suivant » si "
-"vous voulez télécharger des fichiers dans ce dossier."
+"Pour retirer des éléments du presse-papiers, cochez la case à coté du nom du "
+"fichier et cliquez sur « Effacer »."
 
-#: templates/manager/file_headers.inc:33
+#: templates/clipboard/clipboard.html:13
+msgid ""
+"To paste items from the clipboard to the current directory, check the box "
+"next to the filename and click on &quot;Paste&quot;."
+msgstr ""
+"Pour copier des éléments du presse-papiers vers le répertoire courant, "
+"cochez la case à coté du nom du fichier et cliquez sur « Coller »."
+
+#: manager.php:448
 msgid "Type"
 msgstr "Type"
 
-#: lib/Gollem.php:715 lib/Gollem.php:725
+#: permissions.php:42
 #, php-format
-msgid "Up to %s"
-msgstr "Aller à %s"
+msgid "Unable to create backend permission: %s"
+msgstr "Impossible de créer le module des permissions : %s"
 
-#: templates/manager/header.inc:654
-msgid "Upload File(s)"
-msgstr "Envoyer fichier(s)"
-
-#: templates/xppublish/javascript.inc:63
+#: manager.php:85
 #, php-format
-msgid "Upload Files to %s"
-msgstr "Envoyer fichiers vers %s"
+msgid "Unable to delete file %s: %s"
+msgstr "Suppression impossible du fichier %s : %s"
 
-#: xppublish.php:37
+#: manager.php:78
 #, php-format
-msgid "Upload to %s"
-msgstr "Télécharger vers %s"
+msgid "Unable to delete folder %s: %s"
+msgstr "Suppression impossible du dossier %s : %s"
 
-#: xppublish.php:25
+#: lib/Gollem.php:732 lib/Gollem.php:742
 #, php-format
-msgid "Upload your files to %s on %s."
-msgstr "Télécharger vos fichiers vers %s sur %s."
+msgid "Up to %s"
+msgstr "Aller à %s"
+
+#: manager.php:286
+msgid "Upload File(s)"
+msgstr "Envoyer fichier(s)"
 
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
 msgstr "Interface utilisateur"
 
-#: templates/xppublish/login.inc:11 config/credentials.php.dist:18
+#: config/credentials.php.dist:18
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
-#: xppublish.php:51
-msgid "Username and Password are incorrect."
-msgstr "Nom d'utilisateur et mot de passe incorrects."
+#: manager.php:281
+msgid "View Clipboard"
+msgstr "Afficher le presse-papiers"
 
-#: login.php:167
+#: login.php:200
 #, php-format
 msgid "Welcome to %s"
 msgstr "Bienvenue à %s"
 
-#: templates/xppublish/browse.inc:10
-msgid ""
-"When you are inside the folder you wish to upload to, click the 'Next' "
-"button to upload files."
-msgstr ""
-"Lorsque vous êtes dans le dossier destination, cliquez sur le bouton "
-"« Suivant » pour envoyer les fichiers."
-
-#: templates/manager/header.inc:508
+#: templates/manager/manager.html:20
 msgid "Write"
 msgstr "Écrire"
 
-#: config/prefs.php.dist:93
+#: config/prefs.php.dist:92
 msgid "Yes"
 msgstr "Oui"
 
-#: manager.php:52
-msgid "You do not have permission to create this folder."
-msgstr "Vous n'avez pas l'autorisation de créer ce dossier."
-
-#: manager.php:153
-msgid "You do not have permission to cut/copy items."
-msgstr "Vous n'avez pas l'autorisation de couper/copier des éléments."
-
-#: manager.php:103
-msgid "You do not have permission to delete or change permissions on items."
+#: permissions.php:25
+msgid "You need at least one backend defined to set permissions."
 msgstr ""
-"Vous n'avez pas l'autorisation d'effacer ou de changer les permissions des "
-"éléments."
-
-#: manager.php:179
-msgid "You do not have permission to paste items."
-msgstr "Vous n'avez pas l'autorisation de coller des éléments."
-
-#: manager.php:74
-msgid "You do not have permission to rename items."
-msgstr "Vous n'avez pas l'autorisation de renommer des éléments."
-
-#: manager.php:125
-msgid "You do not have permission to upload items."
-msgstr "Vous n'avez pas l'autorisation de télécharger des éléments."
+"Il faut avoir défini au moins un module pour attribuer des permissions."
 
-#: lib/MIME/Viewer/images.php:39
+#: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
 msgstr "Votre navigateur ne supporte pas l'affichage de ce type d'image"
 
-#: lib/Gollem.php:183 lib/Gollem.php:194
-msgid "[home]"
-msgstr "[accueil]"
-
-#: templates/menu.inc:6 templates/menu.inc:19
+#: lib/Gollem.php:811 lib/Gollem.php:814
 msgid "_Change Server"
 msgstr "_Changer de serveur"
 
-#: manager.php:223 selectlist.php:76
+#: lib/Gollem.php:767
+msgid "_Create Folder"
+msgstr "_Créer un dossier"
+
+#: lib/Gollem.php:763
+msgid "_My Home"
+msgstr "Accue_il"
+
+#: lib/Gollem.php:777
+msgid "_Permissions"
+msgstr "_Permissions"
+
+#: manager.php:227 selectlist.php:75
 msgid "folder"
 msgstr "dossier"
 
-#: manager.php:224 selectlist.php:77
+#: manager.php:228 selectlist.php:76
 msgid "symlink"
 msgstr "lien symbolique"
diff --git a/po/gollem.pot b/po/gollem.pot
index 0ed957c..a25cf20 100644
--- a/po/gollem.pot
+++ b/po/gollem.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-11-03 23:12+0100\n"
+"POT-Creation-Date: 2009-03-19 10:37+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -16,75 +16,67 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: manager.php:52
+#: manager.php:57
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
 msgstr ""
 
-#: quota.php:59
+#: quota.php:56
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
 msgstr ""
 
-#: manager.php:268
+#: manager.php:560
 #, php-format
-msgid "%d items"
+msgid "%d item"
 msgstr ""
 
-#: manager.php:415
+#: manager.php:560
 #, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr ""
-
-#: manager.php:413
-#, php-format
-msgid "%s Folders and 1 File (%s Kb)"
+msgid "%d items"
 msgstr ""
 
-#: login.php:143
+#: login.php:144
 #, php-format
 msgid "%s Login"
 msgstr ""
 
-#: manager.php:159
-#, php-format
-msgid "%s was successfully pasted."
-msgstr ""
-
-#: manager.php:410
+#: edit.php:35
 #, php-format
-msgid "1 Folder and %s Files (%s Kb)"
+msgid "%s successfully saved."
 msgstr ""
 
-#: manager.php:408
+#: manager.php:179
 #, php-format
-msgid "1 Folder and 1 File (%s Kb)"
+msgid "%s was successfully pasted."
 msgstr ""
 
-#: manager.php:268
-msgid "1 item"
+#: templates/javascript_defs.php:15
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
 msgstr ""
 
-#: view.php:31
+#: edit.php:33 edit.php:43 view.php:35 view.php:42
 #, php-format
 msgid "Access denied to %s"
 msgstr ""
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
-#: lib/Gollem.php:490
+#: lib/Gollem.php:109 lib/Gollem.php:431 lib/Gollem.php:493 lib/Gollem.php:514
+#: lib/Gollem.php:531
 #, php-format
 msgid "Access denied to folder \"%s\"."
 msgstr ""
 
-#: templates/manager/manager.html:111
+#: templates/manager/manager.html:108
 msgid "Actions:"
 msgstr ""
 
-#: selectlist.php:91
+#: selectlist.php:99
 msgid "Add"
 msgstr ""
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
 msgstr ""
 
@@ -92,11 +84,11 @@ msgstr ""
 msgid "All"
 msgstr ""
 
-#: templates/manager/javascript.inc:202
+#: templates/javascript_defs.php:26
 msgid "Are you sure you wish to continue?"
 msgstr ""
 
-#: templates/manager/javascript.inc:198
+#: templates/javascript_defs.php:24
 msgid "Are you sure?"
 msgstr ""
 
@@ -104,7 +96,7 @@ msgstr ""
 msgid "Ascending"
 msgstr ""
 
-#: config/prefs.php.dist:93
+#: config/prefs.php.dist:102
 msgid "Ask"
 msgstr ""
 
@@ -116,7 +108,7 @@ msgstr ""
 msgid "Available Columns:"
 msgstr ""
 
-#: lib/api.php:46
+#: lib/api.php:483
 msgid "Backends"
 msgstr ""
 
@@ -124,43 +116,43 @@ msgstr ""
 msgid "Below is the current contents of your clipboard."
 msgstr ""
 
-#: manager.php:263 selectlist.php:93 clipboard.php:37
+#: manager.php:285 selectlist.php:101 clipboard.php:38
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr ""
 
-#: manager.php:72
+#: manager.php:79
 #, php-format
-msgid "Cannot chmod %s"
+msgid "Cannot chmod %s: %s"
 msgstr ""
 
-#: manager.php:133
+#: manager.php:150
 msgid "Cannot copy items onto clipboard."
 msgstr ""
 
-#: manager.php:192
+#: manager.php:212
 #, php-format
 msgid "Cannot create home directory: %s"
 msgstr ""
 
-#: manager.php:135
+#: manager.php:152
 msgid "Cannot cut items onto clipboard."
 msgstr ""
 
-#: manager.php:80
-#, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr ""
-
-#: manager.php:157
+#: manager.php:173
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr ""
 
-#: lib/Gollem.php:777 templates/manager/manager.html:77
+#: manager.php:313 templates/manager/manager.html:70
 msgid "Change Folder"
 msgstr ""
 
-#: selectlist.php:101 lib/Gollem.php:821
+#: templates/manager/manager.html:110
+msgid "Change Permissions"
+msgstr ""
+
+#: selectlist.php:109 lib/Gollem.php:853
 msgid "Change Server"
 msgstr ""
 
@@ -172,19 +164,15 @@ msgstr ""
 msgid "Change your file sorting options."
 msgstr ""
 
-#: lib/Gollem.php:795
+#: lib/Gollem.php:828
 msgid "Check Quota"
 msgstr ""
 
-#: manager.php:492
+#: manager.php:556
 msgid "Check _All/None"
 msgstr ""
 
-#: templates/manager/manager.html:113
-msgid "Chmod"
-msgstr ""
-
-#: manager.php:70
+#: manager.php:77
 msgid "Chmod done: "
 msgstr ""
 
@@ -192,28 +180,33 @@ msgstr ""
 msgid "Choose the columns to display in the file manager."
 msgstr ""
 
-#: clipboard.php:38
+#: clipboard.php:39 templates/manager/manager.html:129
 msgid "Clear"
 msgstr ""
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
 msgstr ""
 
-#: quota.php:31
+#: quota.php:32
 msgid "Close"
 msgstr ""
 
-#: login.php:254
+#: login.php:258
 #, php-format
 msgid "Connect to: %s"
 msgstr ""
 
-#: clipboard.php:41 templates/manager/manager.html:116
+#: clipboard.php:42 templates/manager/manager.html:113
 msgid "Copy"
 msgstr ""
 
-#: lib/Gollem.php:774 templates/manager/manager.html:63
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr ""
+
+#: manager.php:306 templates/manager/manager.html:58
 msgid "Create Folder"
 msgstr ""
 
@@ -228,7 +221,7 @@ msgstr ""
 msgid "Current directory:"
 msgstr ""
 
-#: clipboard.php:40 templates/manager/manager.html:117
+#: clipboard.php:41 templates/manager/manager.html:114
 msgid "Cut"
 msgstr ""
 
@@ -240,11 +233,11 @@ msgstr ""
 msgid "Default sorting direction:"
 msgstr ""
 
-#: templates/manager/manager.html:120
+#: templates/manager/manager.html:117
 msgid "Delete"
 msgstr ""
 
-#: config/prefs.php.dist:95
+#: config/prefs.php.dist:104
 msgid "Delete folders recursively?"
 msgstr ""
 
@@ -252,15 +245,15 @@ msgstr ""
 msgid "Descending"
 msgstr ""
 
-#: selectlist.php:92
+#: selectlist.php:100
 msgid "Done"
 msgstr ""
 
-#: manager.php:214
+#: manager.php:235
 msgid "Download"
 msgstr ""
 
-#: manager.php:382
+#: manager.php:440
 #, php-format
 msgid "Download %s"
 msgstr ""
@@ -269,6 +262,15 @@ msgstr ""
 msgid "ERROR:"
 msgstr ""
 
+#: manager.php:234
+msgid "Edit"
+msgstr ""
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr ""
+
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr ""
@@ -277,7 +279,7 @@ msgstr ""
 msgid "Execute"
 msgstr ""
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:183
+#: templates/javascript_defs.php:28 templates/manager/manager.html:195
 msgid "File"
 msgstr ""
 
@@ -301,20 +303,36 @@ msgstr ""
 msgid "File Type"
 msgstr ""
 
-#: manager.php:76
+#: manager.php:96
 msgid "File deleted: "
 msgstr ""
 
-#: manager.php:101
+#: manager.php:119
 #, php-format
 msgid "File received: %s"
 msgstr ""
 
-#: manager.php:78
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr ""
+
+#: templates/manager/manager.html:127
+msgid "Filter"
+msgstr ""
+
+#: templates/manager/manager.html:126
+msgid "Filter:"
+msgstr ""
+
+#: manager.php:88
 msgid "Folder removed: "
 msgstr ""
 
-#: templates/manager/manager.html:79
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr ""
+
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr ""
 
@@ -322,29 +340,35 @@ msgstr ""
 msgid "Gollem Backend Permissions Administration"
 msgstr ""
 
-#: manager.php:472 templates/manager/manager.html:10
+#: manager.php:535 templates/manager/manager.html:10
 msgid "Group"
 msgstr ""
 
-#: lib/Gollem.php:770
-msgid "Home"
+#: manager.php:62
+msgid "Incorrect number of items."
 msgstr ""
 
-#: manager.php:56
-msgid "Incorrect number of items."
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
 msgstr ""
 
-#: manager.php:126
+#: manager.php:143
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr ""
 
-#: manager.php:128
+#: manager.php:145
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr ""
 
-#: templates/login/login.html:67
+#: config/prefs.php.dist:90
+msgid "Items per page"
+msgstr ""
+
+#: templates/login/login.html:68
 msgid "Language"
 msgstr ""
 
@@ -352,47 +376,39 @@ msgstr ""
 msgid "List folders first?"
 msgstr ""
 
-#: login.php:303
+#: login.php:307
 msgid "Login"
 msgstr ""
 
-#: quota.php:62
-msgid "MB free"
-msgstr ""
-
-#: quota.php:62
-msgid "MB used"
-msgstr ""
-
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr ""
 
-#: manager.php:446
+#: manager.php:505
 msgid "Modified"
 msgstr ""
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
 msgstr ""
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
 msgstr ""
 
-#: manager.php:433
+#: manager.php:483
 msgid "Name"
 msgstr ""
 
-#: templates/manager/manager.html:49 templates/manager/manager.html:65
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr ""
 
-#: manager.php:35
+#: manager.php:41
 msgid "New folder created: "
 msgstr ""
 
-#: config/prefs.php.dist:91
+#: config/prefs.php.dist:100
 msgid "No"
 msgstr ""
 
@@ -400,11 +416,11 @@ msgstr ""
 msgid "No quota found."
 msgstr ""
 
-#: manager.php:264
+#: manager.php:286
 msgid "OK"
 msgstr ""
 
-#: manager.php:466 templates/manager/manager.html:9
+#: manager.php:528 templates/manager/manager.html:9
 msgid "Owner"
 msgstr ""
 
@@ -412,33 +428,34 @@ msgstr ""
 msgid "Password"
 msgstr ""
 
-#: clipboard.php:39
+#: clipboard.php:40
 msgid "Paste"
 msgstr ""
 
-#: manager.php:460
+#: manager.php:521
 msgid "Permission"
 msgstr ""
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr ""
 
-#: manager.php:200
+#: manager.php:220
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
 msgstr ""
 
-#: lib/Gollem.php:784
-msgid "Permissions"
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
 msgstr ""
 
-#: templates/login/javascript.inc:36
+#: templates/javascript_defs.php:19
 msgid "Please provide your password."
 msgstr ""
 
-#: templates/login/javascript.inc:31
+#: templates/javascript_defs.php:18
 msgid "Please provide your username."
 msgstr ""
 
@@ -446,43 +463,47 @@ msgstr ""
 msgid "Please select a backend:"
 msgstr ""
 
-#: templates/manager/javascript.inc:132
+#: templates/javascript_defs.php:22
 msgid "Please select an item before this action."
 msgstr ""
 
-#: templates/manager/javascript.inc:456
+#: templates/javascript_defs.php:27
 msgid "Please specify at least one file to upload."
 msgstr ""
 
-#: quota.php:18 templates/quota/quota.html:2
+#: quota.php:19 templates/quota/quota.html:2
 msgid "Quota Display"
 msgstr ""
 
-#: quota.php:61
-msgid "Quota Usage"
-msgstr ""
-
 #: templates/manager/manager.html:14
 msgid "Read"
 msgstr ""
 
-#: manager.php:270
+#: manager.php:291
 msgid "Refresh"
 msgstr ""
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
 msgstr ""
 
-#: templates/manager/manager.html:47 templates/manager/manager.html:123
+#: templates/manager/manager.html:44 templates/manager/manager.html:120
 msgid "Rename"
 msgstr ""
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
-msgid "Root"
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
 msgstr ""
 
-#: manager.php:262
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr ""
+
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr ""
+
+#: manager.php:284 templates/edit/edit.inc:11
 msgid "Save"
 msgstr ""
 
@@ -490,7 +511,7 @@ msgstr ""
 msgid "Selected Columns:"
 msgstr ""
 
-#: templates/login/login.html:31
+#: templates/login/login.html:32
 msgid "Server"
 msgstr ""
 
@@ -502,31 +523,31 @@ msgstr ""
 msgid "Show dotfiles?"
 msgstr ""
 
-#: manager.php:453
+#: manager.php:513
 msgid "Size"
 msgstr ""
 
-#: manager.php:479
-msgid "Sort Direction"
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
 msgstr ""
 
-#: templates/manager/javascript.inc:202
-msgid "The following item(s) are folders: "
+#: templates/javascript_defs.php:25
+msgid "The following item(s) are folders:"
 msgstr ""
 
-#: templates/manager/javascript.inc:198
-msgid "The following items will be permanently deleted: "
+#: templates/javascript_defs.php:23
+msgid "The following items will be permanently deleted:"
 msgstr ""
 
-#: templates/selectlist/javascript.inc:9
+#: templates/javascript_defs.php:31
 msgid "The original opener window has been closed. Exiting."
 msgstr ""
 
-#: login.php:150
+#: login.php:151
 msgid "There are no backends available for the current user."
 msgstr ""
 
-#: selectlist.php:185 templates/manager/manager.html:134
+#: selectlist.php:199 templates/manager/manager.html:138
 msgid "There are no files in this folder."
 msgstr ""
 
@@ -542,21 +563,36 @@ msgid ""
 "next to the filename and click on &quot;Paste&quot;."
 msgstr ""
 
-#: manager.php:426
+#: manager.php:475
 msgid "Type"
 msgstr ""
 
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr ""
+
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
 msgstr ""
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: manager.php:93
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr ""
+
+#: manager.php:85
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr ""
+
+#: lib/Gollem.php:781 lib/Gollem.php:791
 #, php-format
 msgid "Up to %s"
 msgstr ""
 
-#: manager.php:283
+#: manager.php:303
 msgid "Upload File(s)"
 msgstr ""
 
@@ -568,11 +604,11 @@ msgstr ""
 msgid "Username"
 msgstr ""
 
-#: manager.php:278
+#: manager.php:298
 msgid "View Clipboard"
 msgstr ""
 
-#: login.php:195
+#: login.php:201
 #, php-format
 msgid "Welcome to %s"
 msgstr ""
@@ -581,7 +617,7 @@ msgstr ""
 msgid "Write"
 msgstr ""
 
-#: config/prefs.php.dist:92
+#: config/prefs.php.dist:101
 msgid "Yes"
 msgstr ""
 
@@ -593,14 +629,22 @@ msgstr ""
 msgid "Your browser does not support inline display of this image type"
 msgstr ""
 
-#: lib/Gollem.php:819 lib/Gollem.php:822
+#: lib/Gollem.php:851 lib/Gollem.php:854
 msgid "_Change Server"
 msgstr ""
 
-#: manager.php:215 selectlist.php:74
+#: lib/Gollem.php:812
+msgid "_My Home"
+msgstr ""
+
+#: lib/Gollem.php:817
+msgid "_Permissions"
+msgstr ""
+
+#: manager.php:236 selectlist.php:75
 msgid "folder"
 msgstr ""
 
-#: manager.php:216 selectlist.php:75
+#: manager.php:237 selectlist.php:76
 msgid "symlink"
 msgstr ""
diff --git a/po/hu_HU.po b/po/hu_HU.po
index 16c8284..62cf899 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -1,19 +1,22 @@
 # Gollem Hungarian translation file.
-# Copyright (C) 2005-2006 Laszlo L. Tornoci
+# Copyright 2005-2008 Laszlo L. Tornoci
 # This file is distributed under the same license as the Gollem package.
 # Latest versions: ftp://xenia.sote.hu/pub/linux/horde/
 #
+# Laszlo L. Tornoci <torlasz at xenia.sote.hu>, 2008.
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem 1.0.2\n"
+"Project-Id-Version: Gollem-H3-1.0.3\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-02-24 09:34+0100\n"
-"PO-Revision-Date: 2006-02-24 09:41+0100\n"
+"POT-Creation-Date: 2006-11-03 23:12+0100\n"
+"PO-Revision-Date: 2008-01-26 15:06+0100\n"
 "Last-Translator: Laszlo L. Tornoci <torlasz at xenia.sote.hu>\n"
 "Language-Team: Hungarian <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
 #: manager.php:52
 #, php-format
@@ -25,17 +28,17 @@ msgstr "A \"%s\" 
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
 msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:260
+#: manager.php:268
 #, php-format
 msgid "%d items"
 msgstr "%d állomány"
 
-#: manager.php:414
+#: manager.php:415
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s alkönyvtár és %s fájl (%s Kb)"
 
-#: manager.php:412
+#: manager.php:413
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s alkönyvtár és 1 fájl (%s Kb)"
@@ -50,17 +53,17 @@ msgstr "%s Login"
 msgid "%s was successfully pasted."
 msgstr "%s-t sikeresen beillesztettük."
 
-#: manager.php:409
+#: manager.php:410
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 mappa és %s fájl (%s Kb)"
 
-#: manager.php:407
+#: manager.php:408
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 mappa és 1 fájl (%s Kb)"
 
-#: manager.php:260
+#: manager.php:268
 msgid "1 item"
 msgstr "1 db"
 
@@ -76,11 +79,11 @@ msgid "Access denied to folder \"%s\"."
 msgstr ""
 "A(z) %s mappába való belépéshez nem rendelkezik megfelelõ jogosultsággal."
 
-#: templates/manager/manager.html:105
-msgid "Actions"
-msgstr "Mûveletek"
+#: templates/manager/manager.html:111
+msgid "Actions:"
+msgstr "Mûveletek:"
 
-#: selectlist.php:100
+#: selectlist.php:91
 msgid "Add"
 msgstr "Bevitel"
 
@@ -88,15 +91,15 @@ msgstr "Bevitel"
 msgid "Add column"
 msgstr "Új oszlop hozzáadása"
 
-#: templates/manager/manager.html:9
+#: templates/manager/manager.html:11
 msgid "All"
 msgstr "Mindenki"
 
-#: templates/manager/javascript.inc:204
+#: templates/manager/javascript.inc:202
 msgid "Are you sure you wish to continue?"
 msgstr "Biztos, hogy folytatni kívánja?"
 
-#: templates/manager/javascript.inc:200
+#: templates/manager/javascript.inc:198
 msgid "Are you sure?"
 msgstr "Biztos ebben?"
 
@@ -108,7 +111,7 @@ msgstr "n
 msgid "Ask"
 msgstr "Kérdezzen meg a gép"
 
-#: templates/manager/manager.html:3
+#: templates/manager/manager.html:5
 msgid "Attributes"
 msgstr "Tulajdonságok"
 
@@ -124,7 +127,7 @@ msgstr "T
 msgid "Below is the current contents of your clipboard."
 msgstr "Alább látható a vágóasztal jelenlegi tartalma."
 
-#: clipboard.php:36 manager.php:254 selectlist.php:102
+#: manager.php:263 selectlist.php:93 clipboard.php:37
 msgid "Cancel"
 msgstr "Mégse"
 
@@ -156,11 +159,11 @@ msgstr "Nem siker
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr "Nem sikerült \"%s\"-t beilleszteni (a vágóasztal üres): %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:71
+#: lib/Gollem.php:777 templates/manager/manager.html:77
 msgid "Change Folder"
 msgstr "Mappaváltás"
 
-#: selectlist.php:110 lib/Gollem.php:819
+#: selectlist.php:101 lib/Gollem.php:821
 msgid "Change Server"
 msgstr "Szerverváltás"
 
@@ -172,7 +175,7 @@ msgstr "A f
 msgid "Change your file sorting options."
 msgstr "Az állományok sorbarendezési beállításai."
 
-#: lib/Gollem.php:793
+#: lib/Gollem.php:795
 msgid "Check Quota"
 msgstr "Ellenõrizzük a kvótát"
 
@@ -181,7 +184,7 @@ msgid "Check _All/None"
 msgstr "Jelöljük ki mind/egyiket sem"
 
 #: templates/manager/manager.html:113
-msgid "Chmod Items"
+msgid "Chmod"
 msgstr "Jogosultság változtatás"
 
 #: manager.php:70
@@ -192,7 +195,7 @@ msgstr "Az el
 msgid "Choose the columns to display in the file manager."
 msgstr "Melyik oszlopok jelenjenek meg a fájl menedzserben."
 
-#: clipboard.php:37
+#: clipboard.php:38
 msgid "Clear"
 msgstr "Törlés"
 
@@ -209,15 +212,11 @@ msgstr "Bez
 msgid "Connect to: %s"
 msgstr "Kapcsolat %s szerverrel"
 
-#: clipboard.php:40
+#: clipboard.php:41 templates/manager/manager.html:116
 msgid "Copy"
 msgstr "Másoljuk át"
 
-#: templates/manager/manager.html:116
-msgid "Copy Items"
-msgstr "Másolás a vágóasztalra"
-
-#: lib/Gollem.php:774 templates/manager/manager.html:57
+#: lib/Gollem.php:774 templates/manager/manager.html:63
 msgid "Create Folder"
 msgstr "Új mappa létrehozása"
 
@@ -230,19 +229,14 @@ msgstr ""
 "\"%s\" számára nincsenek meghatározva az elérési jogosultságok. Ezeket most "
 "közvetlenül meg kell adnia."
 
-#: clipboard.php:41
-#, php-format
-msgid "Current directory: %s"
-msgstr "A jelenlegi alkönyvtár: %s"
+#: templates/clipboard/clipboard.html:17
+msgid "Current directory:"
+msgstr "A jelenlegi alkönyvtár:"
 
-#: clipboard.php:39
+#: clipboard.php:40 templates/manager/manager.html:117
 msgid "Cut"
 msgstr "Kivágás"
 
-#: templates/manager/manager.html:115
-msgid "Cut Items"
-msgstr "Áthelyezés a vágóasztalra"
-
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
 msgstr "A sorbarendezés alapértelmezés szerinti szempontja:"
@@ -251,8 +245,8 @@ msgstr "A sorbarendez
 msgid "Default sorting direction:"
 msgstr "A sorbarendezés alapértelmezés szerinti iránya:"
 
-#: templates/manager/manager.html:110
-msgid "Delete Items"
+#: templates/manager/manager.html:120
+msgid "Delete"
 msgstr "Törlés"
 
 #: config/prefs.php.dist:95
@@ -263,7 +257,7 @@ msgstr "A mapp
 msgid "Descending"
 msgstr "csökkenõ"
 
-#: selectlist.php:101
+#: selectlist.php:92
 msgid "Done"
 msgstr "Kész"
 
@@ -271,7 +265,7 @@ msgstr "K
 msgid "Download"
 msgstr "Letöltés"
 
-#: manager.php:381
+#: manager.php:382
 #, php-format
 msgid "Download %s"
 msgstr "Töltsük le %s-t"
@@ -284,11 +278,11 @@ msgstr "HIBA:"
 msgid "Email"
 msgstr "Email"
 
-#: templates/manager/manager.html:24
+#: templates/manager/manager.html:26
 msgid "Execute"
 msgstr "Végrehajtás"
 
-#: templates/manager/javascript.inc:487 templates/manager/manager.html:179
+#: templates/manager/javascript.inc:485 templates/manager/manager.html:183
 msgid "File"
 msgstr "Fájl"
 
@@ -325,7 +319,7 @@ msgstr "A f
 msgid "Folder removed: "
 msgstr "A mappát töröltük:"
 
-#: templates/manager/manager.html:73
+#: templates/manager/manager.html:79
 msgid "Go to:"
 msgstr "Hova:"
 
@@ -333,7 +327,7 @@ msgstr "Hova:"
 msgid "Gollem Backend Permissions Administration"
 msgstr "A Gollem tároló alrendszerek elérési jogainak adminisztrációja"
 
-#: manager.php:471 templates/manager/manager.html:8
+#: manager.php:472 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Csoport"
 
@@ -379,7 +373,7 @@ msgstr "MB foglalt"
 msgid "Menu List"
 msgstr "Menülista"
 
-#: manager.php:445
+#: manager.php:446
 msgid "Modified"
 msgstr "Módosítva"
 
@@ -391,11 +385,11 @@ msgstr "balra"
 msgid "Move right"
 msgstr "jobbra"
 
-#: manager.php:432
+#: manager.php:433
 msgid "Name"
 msgstr "Név"
 
-#: templates/manager/manager.html:45 templates/manager/manager.html:59
+#: templates/manager/manager.html:49 templates/manager/manager.html:65
 msgid "Name:"
 msgstr "Név:"
 
@@ -411,11 +405,11 @@ msgstr "Nem"
 msgid "No quota found."
 msgstr "Nincs kvóta adat."
 
-#: manager.php:255
+#: manager.php:264
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:465 templates/manager/manager.html:7
+#: manager.php:466 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "Tulajdonos"
 
@@ -423,11 +417,11 @@ msgstr "Tulajdonos"
 msgid "Password"
 msgstr "Jelszó"
 
-#: clipboard.php:38
+#: clipboard.php:39
 msgid "Paste"
 msgstr "Beillesztés"
 
-#: manager.php:459
+#: manager.php:460
 msgid "Permission"
 msgstr "Jogosultság"
 
@@ -441,7 +435,7 @@ msgstr "A hozz
 msgid "Permission denied to folder \"%s\": %s"
 msgstr "A hozzáférés megtagadva \"%s\" mappához: %s"
 
-#: lib/Gollem.php:783
+#: lib/Gollem.php:784
 msgid "Permissions"
 msgstr "Jogosultság"
 
@@ -457,11 +451,11 @@ msgstr "K
 msgid "Please select a backend:"
 msgstr "Kérem válasszon egy tároló alrendszert:"
 
-#: templates/manager/javascript.inc:134
+#: templates/manager/javascript.inc:132
 msgid "Please select an item before this action."
 msgstr "Kérem elõbb válasszon ki egy állományt."
 
-#: templates/manager/javascript.inc:458
+#: templates/manager/javascript.inc:456
 msgid "Please specify at least one file to upload."
 msgstr "Kérem jelöljön ki legalább egy feltöltendõ fájlt."
 
@@ -473,11 +467,11 @@ msgstr "A kv
 msgid "Quota Usage"
 msgstr "Kvóta kihasználtság"
 
-#: templates/manager/manager.html:12
+#: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Olvasás"
 
-#: manager.php:262
+#: manager.php:270
 msgid "Refresh"
 msgstr "Frissítés"
 
@@ -485,19 +479,15 @@ msgstr "Friss
 msgid "Remove column"
 msgstr "Oszlop törlése"
 
-#: templates/manager/manager.html:43
+#: templates/manager/manager.html:47 templates/manager/manager.html:123
 msgid "Rename"
 msgstr "Átnevezés"
 
-#: templates/manager/manager.html:107
-msgid "Rename Items"
-msgstr "Átnevezés"
-
 #: lib/Gollem.php:734 lib/Gollem.php:739
 msgid "Root"
 msgstr "Tõmappa"
 
-#: manager.php:253
+#: manager.php:262
 msgid "Save"
 msgstr "Mentés"
 
@@ -517,19 +507,19 @@ msgstr "Be
 msgid "Show dotfiles?"
 msgstr "Mutassuk a rejtett fájlokat?"
 
-#: manager.php:452
+#: manager.php:453
 msgid "Size"
 msgstr "Méret"
 
-#: manager.php:478
+#: manager.php:479
 msgid "Sort Direction"
 msgstr "A sorbarendezés iránya"
 
-#: templates/manager/javascript.inc:204
+#: templates/manager/javascript.inc:202
 msgid "The following item(s) are folders: "
 msgstr "A következõ állomány(ok) mappa(k): "
 
-#: templates/manager/javascript.inc:200
+#: templates/manager/javascript.inc:198
 msgid "The following items will be permanently deleted: "
 msgstr "A következõ állományokat véglegesen töröljük: "
 
@@ -543,7 +533,7 @@ msgid "There are no backends available for the current user."
 msgstr ""
 "A felhasználó számára semmilyen tároló alrendszer nem áll rendelkezésre."
 
-#: selectlist.php:193 templates/manager/manager.html:128
+#: selectlist.php:185 templates/manager/manager.html:134
 msgid "There are no files in this folder."
 msgstr "Ebben a mappában nincsenek fájlok."
 
@@ -565,7 +555,7 @@ msgstr ""
 "alkönyvtárba, hogy kijelöljük a megfelelõ állomány(ok) neve melletti ki "
 "négyzet(ek)et, majd a &quot;Beillesztés&quot;-re kattintunk."
 
-#: manager.php:425
+#: manager.php:426
 msgid "Type"
 msgstr "Típus"
 
@@ -579,7 +569,7 @@ msgstr "A t
 msgid "Up to %s"
 msgstr "%s-re"
 
-#: manager.php:274
+#: manager.php:283
 msgid "Upload File(s)"
 msgstr "Fájlfeltöltés"
 
@@ -591,7 +581,7 @@ msgstr "A program haszn
 msgid "Username"
 msgstr "Felhasználói név"
 
-#: manager.php:269
+#: manager.php:278
 msgid "View Clipboard"
 msgstr "A vágóasztal tartalma"
 
@@ -600,7 +590,7 @@ msgstr "A v
 msgid "Welcome to %s"
 msgstr "Üdvözöljük: %s"
 
-#: templates/manager/manager.html:18
+#: templates/manager/manager.html:20
 msgid "Write"
 msgstr "Írás"
 
@@ -619,7 +609,7 @@ msgid "Your browser does not support inline display of this image type"
 msgstr ""
 "Az Ön böngészõprogramja nem képes ezt a képtípust közvetlenül megjeleníteni"
 
-#: lib/Gollem.php:817 lib/Gollem.php:820
+#: lib/Gollem.php:819 lib/Gollem.php:822
 msgid "_Change Server"
 msgstr "Szerver változtatás"
 
@@ -629,4 +619,4 @@ msgstr "mappa"
 
 #: manager.php:216 selectlist.php:75
 msgid "symlink"
-msgstr ""
+msgstr "szimbolikus link"
diff --git a/po/it_IT.po b/po/it_IT.po
index b9755ec..bc73b02 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -1,90 +1,103 @@
-# Italian translations for horde package.
-# Copyright (C) 2006 Horde Project
-# This file is distributed under the same license as the horde package.
-# Automatically generated, 2006.
+# Gollem Italian translation.
+# Copyright 2006-2009 The Horde Project
+# This file is distributed under the same license as the Gollem package.
+# Fabio Pedretti <fabio.pedretti at ing.unibs.it>, 2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: horde 3.1.1\n"
+"Project-Id-Version: Gollem 1.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-04-13 14:17+0200\n"
-"PO-Revision-Date: 2006-04-13 14:17+0200\n"
-"Last-Translator: Marco Pirovano <marco.pirovano at unibocconi.it>\n"
-"Language-Team: i18n at lists.horde.org\n"
+"POT-Creation-Date: 2008-06-24 11:07+0200\n"
+"PO-Revision-Date: 2008-06-24 14:57+0200\n"
+"Last-Translator: Fabio Pedretti <fabio.pedretti at ing.unibs.it>\n"
+"Language-Team: Horde i18n <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: manager.php:52
+#: manager.php:53
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
 msgstr "\"%s\" rinominato in \"%s\""
 
-#: quota.php:59
+#: quota.php:56
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
-msgstr ""
+msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:264
+#: manager.php:272
 #, php-format
 msgid "%d items"
 msgstr "%d voci"
 
-#: manager.php:417
+#: manager.php:434
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s Cartelle e %s File (%s Kb)"
 
-#: manager.php:415
+#: manager.php:432
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s Cartelle e 1 File (%s Kb)"
 
-#: login.php:143
+#: login.php:144
 #, php-format
 msgid "%s Login"
-msgstr "%s Accesso"
+msgstr "%s Login"
+
+#: edit.php:35
+#, php-format
+msgid "%s successfully saved."
+msgstr "%s salvato con successo."
 
-#: manager.php:159
+#: manager.php:168
 #, php-format
 msgid "%s was successfully pasted."
 msgstr "%s è stato incollato con successo."
 
-#: manager.php:412
+#: manager.php:429
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
-msgstr "1 Cartella e %s Files (%s Kb)"
+msgstr "1 Cartella e %s File (%s Kb)"
 
-#: manager.php:410
+#: manager.php:427
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
-msgstr "! Cartella e 1 File (%s Kb)"
+msgstr "1 Cartella e 1 File (%s Kb)"
 
-#: manager.php:264
+#: manager.php:272
 msgid "1 item"
-msgstr "1 numero"
+msgstr "1 oggetto"
 
-#: view.php:31
+#: templates/javascript_defs.php:14
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"La finestra di composizione non può essere aperta. Probabilmente il tuo "
+"browser è impostato per bloccare i popup"
+
+#: edit.php:33 edit.php:43 view.php:35 view.php:42
 #, php-format
 msgid "Access denied to %s"
 msgstr "Accesso negato a %s"
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
-#: lib/Gollem.php:490
+#: lib/Gollem.php:109 lib/Gollem.php:383 lib/Gollem.php:445 lib/Gollem.php:466
+#: lib/Gollem.php:483
 #, php-format
 msgid "Access denied to folder \"%s\"."
 msgstr "Accesso negato alla cartella \"%s\"."
 
-#: templates/manager/manager.html:111
+#: templates/manager/manager.html:124
 msgid "Actions:"
 msgstr "Azioni:"
 
-#: selectlist.php:100
+#: selectlist.php:99
 msgid "Add"
 msgstr "Aggiungi"
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
 msgstr "Aggiungi colonna"
 
@@ -92,17 +105,17 @@ msgstr "Aggiungi colonna"
 msgid "All"
 msgstr "Tutti"
 
-#: templates/manager/javascript.inc:202
+#: templates/javascript_defs.php:25
 msgid "Are you sure you wish to continue?"
 msgstr "Sei sicuro di voler continuare?"
 
-#: templates/manager/javascript.inc:198
+#: templates/javascript_defs.php:23
 msgid "Are you sure?"
-msgstr "Sei cicuro?"
+msgstr "Sei sicuro?"
 
 #: config/prefs.php.dist:69
 msgid "Ascending"
-msgstr "Ascendente"
+msgstr "Crescente"
 
 #: config/prefs.php.dist:93
 msgid "Ask"
@@ -116,75 +129,75 @@ msgstr "Attributi"
 msgid "Available Columns:"
 msgstr "Colonne disponibili:"
 
-#: lib/api.php:46
+#: lib/api.php:483
 msgid "Backends"
-msgstr ""
+msgstr "Backend"
 
 #: templates/clipboard/clipboard.html:11
 msgid "Below is the current contents of your clipboard."
-msgstr "Sotto è il contenuto attuale della tua clipboard."
+msgstr "Qui sotto c'è il contenuto degli appunti."
 
-#: clipboard.php:37 manager.php:258 selectlist.php:102
+#: clipboard.php:38 manager.php:267 selectlist.php:101
+#: templates/edit/edit.inc:13
 msgid "Cancel"
-msgstr "Cancella"
+msgstr "Annulla"
 
-#: manager.php:72
+#: manager.php:73
 #, php-format
-msgid "Cannot chmod %s"
-msgstr "Impossibile chmod %s"
+msgid "Cannot chmod %s: %s"
+msgstr "Impossibile cambiare i permessi di %s: %s"
 
-#: manager.php:133
+#: manager.php:142
 msgid "Cannot copy items onto clipboard."
-msgstr "Impossibile copiare la voce nella clipboard"
+msgstr "Impossibile copiare gli oggetti negli appunti."
 
-#: manager.php:192
+#: manager.php:201
 #, php-format
 msgid "Cannot create home directory: %s"
-msgstr "Impossibile creare la home directory: %s"
+msgstr "Impossibile creare la cartella principale: %s"
 
-#: manager.php:135
+#: manager.php:144
 msgid "Cannot cut items onto clipboard."
-msgstr "Impossibile tagliare le voci nella clipboard."
-
-#: manager.php:80
-#, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr "Impossibile eliminare \"%s\": %s"
+msgstr "Impossibile tagliare gli oggetti negli appunti."
 
-#: manager.php:157
+#: manager.php:166
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr "Impossibile incollare \"%s\" (file azzerato dalla clipboard): %s"
+msgstr "Impossibile incollare \"%s\" (file rimosso dagli appunti): %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:77
+#: templates/manager/manager.html:70
 msgid "Change Folder"
 msgstr "Cambia Cartella"
 
-#: selectlist.php:110 lib/Gollem.php:819
+#: templates/manager/manager.html:126
+msgid "Change Permissions"
+msgstr "Cambia Permessi"
+
+#: selectlist.php:109 lib/Gollem.php:816
 msgid "Change Server"
 msgstr "Cambia Server"
 
+#: lib/Gollem.php:773
+msgid "Change _Folder"
+msgstr "Cambia _Cartella"
+
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
-msgstr "Cambia le impostazioni del file e della cartella."
+msgstr "Modifica le impostazioni di file e cartelle."
 
 #: config/prefs.php.dist:14
 msgid "Change your file sorting options."
-msgstr "Cambia le opzioni di ordinamento del file."
+msgstr "Cambia le opzioni di ordinamento dei file."
 
-#: lib/Gollem.php:793
+#: lib/Gollem.php:791
 msgid "Check Quota"
-msgstr "Controlla la quota"
+msgstr "Spazio Disponibile"
 
-#: manager.php:495
+#: manager.php:525
 msgid "Check _All/None"
-msgstr "Controlla _Tutti/Nessuno"
+msgstr "Seleziona _Tutti/Nessuno"
 
-#: templates/manager/manager.html:113
-msgid "Chmod"
-msgstr ""
-
-#: manager.php:70
+#: manager.php:71
 msgid "Chmod done: "
 msgstr "Chmod fatto: "
 
@@ -192,30 +205,35 @@ msgstr "Chmod fatto: "
 msgid "Choose the columns to display in the file manager."
 msgstr "Scegli le colonne da visualizzare nella gestione file."
 
-#: clipboard.php:38
+#: clipboard.php:39
 msgid "Clear"
 msgstr "Azzera"
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
-msgstr ""
+msgstr "Appunti"
 
-#: quota.php:31
+#: quota.php:32
 msgid "Close"
 msgstr "Chiudi"
 
-#: login.php:254
+#: login.php:258
 #, php-format
 msgid "Connect to: %s"
 msgstr "Connetti a: %s"
 
-#: clipboard.php:41 templates/manager/manager.html:116
+#: clipboard.php:42 templates/manager/manager.html:129
 msgid "Copy"
 msgstr "Copia"
 
-#: lib/Gollem.php:774 templates/manager/manager.html:63
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Impossibile salvare teplate file '%s'."
+
+#: templates/manager/manager.html:58
 msgid "Create Folder"
-msgstr "Crea cartella"
+msgstr "Crea Cartella"
 
 #: permissions.php:47
 #, php-format
@@ -223,69 +241,78 @@ msgid ""
 "Created empty permissions for \"%s\". You must explicitly grant access to "
 "this backend now."
 msgstr ""
-"Sono stati creati i permessi vuoti per \"%s\". Devi esplicitare i diritti di "
-"accesso a questo backend ora."
+"Permessi vuoti creati per \"%s\". Ora devi esplicitamente assegnare "
+"l'accesso a questo backend."
 
 #: templates/clipboard/clipboard.html:17
 msgid "Current directory:"
-msgstr "Directory corrente:"
+msgstr "Cartella corrente:"
 
-#: clipboard.php:40 templates/manager/manager.html:117
+#: clipboard.php:41 templates/manager/manager.html:130
 msgid "Cut"
 msgstr "Taglia"
 
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
-msgstr "Criterio di ordinamento standard:"
+msgstr "Criterio predefinito di ordinamento:"
 
 #: config/prefs.php.dist:72
 msgid "Default sorting direction:"
-msgstr "Criterio di direzione standard:"
+msgstr "Direzione di ordinamento predefinita:"
 
-#: templates/manager/manager.html:120
+#: templates/manager/manager.html:133
 msgid "Delete"
 msgstr "Elimina"
 
 #: config/prefs.php.dist:95
 msgid "Delete folders recursively?"
-msgstr "Cancellare le cartelle in modo ricorsivo?"
+msgstr "Cancellare tutte le sottocartelle?"
 
 #: config/prefs.php.dist:70
 msgid "Descending"
-msgstr "Discendente"
+msgstr "Decrescente"
 
-#: selectlist.php:101
+#: selectlist.php:100
 msgid "Done"
 msgstr "Fatto"
 
-#: manager.php:214
+#: manager.php:227
 msgid "Download"
 msgstr "Scarica"
 
-#: manager.php:384
+#: manager.php:401
 #, php-format
 msgid "Download %s"
 msgstr "Scarica %s"
 
 #: templates/quota/quota.html:7
 msgid "ERROR:"
-msgstr ""
+msgstr "ERRORE:"
+
+#: manager.php:226
+msgid "Edit"
+msgstr "Modifica"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Modifica %s"
 
 #: config/credentials.php.dist:28
 msgid "Email"
-msgstr ""
+msgstr "Posta"
 
 #: templates/manager/manager.html:26
 msgid "Execute"
 msgstr "Esegui"
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:185
+#: templates/javascript_defs.php:27 templates/manager/manager.html:203
 msgid "File"
-msgstr ""
+msgstr "File"
 
 #: config/prefs.php.dist:13
 msgid "File Display"
-msgstr "Visualizza File"
+msgstr "Visualizzazione File"
 
 #: config/prefs.php.dist:56
 msgid "File Modification Time"
@@ -303,144 +330,147 @@ msgstr "Dimensione File"
 msgid "File Type"
 msgstr "Tipo File"
 
-#: manager.php:76
+#: manager.php:88
 msgid "File deleted: "
-msgstr ""
+msgstr "File eliminato: "
 
-#: manager.php:101
+#: manager.php:110
 #, php-format
 msgid "File received: %s"
 msgstr "File ricevuto: %s"
 
-#: manager.php:78
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr "I file devono essere scritti all'interno di un backend VFS."
+
+#: manager.php:81
 msgid "Folder removed: "
-msgstr "Cartella rimossa: "
+msgstr "Cartella eliminata: "
 
-#: templates/manager/manager.html:79
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr "Le cartelle devono essere create all'interno di un backend VFS."
+
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "Vai a:"
 
 #: permissions.php:21
 msgid "Gollem Backend Permissions Administration"
-msgstr ""
+msgstr "Amministrazione Permessi di Gollem"
 
-#: manager.php:474 templates/manager/manager.html:10
+#: manager.php:505 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Gruppo"
 
-#: lib/Gollem.php:770
-msgid "Home"
-msgstr ""
-
-#: manager.php:56
+#: manager.php:57
 msgid "Incorrect number of items."
-msgstr "Numero di voci non corretto"
+msgstr "Numero di elementi errato."
 
-#: manager.php:126
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Richiesto un backend invalido: %s"
+
+#: manager.php:135
 #, php-format
 msgid "Item copied to clipboard: %s"
-msgstr "Voce copiata nella clipboard: %s"
+msgstr "Oggetto copiato negli appunti: %s"
 
-#: manager.php:128
+#: manager.php:137
 #, php-format
 msgid "Item cut to clipboard: %s"
-msgstr "Voce tagliata dalla clipboard: %s"
+msgstr "Oggetto tagliato negli appunti: %s"
 
-#: templates/login/login.html:67
+#: templates/login/login.html:68
 msgid "Language"
 msgstr "Lingua"
 
 #: config/prefs.php.dist:81
 msgid "List folders first?"
-msgstr "Elenco cartelle prima?"
+msgstr "Elenca prima le cartelle?"
 
-#: login.php:303
+#: login.php:307
 msgid "Login"
-msgstr ""
-
-#: quota.php:62
-msgid "MB free"
-msgstr "MB liberi"
-
-#: quota.php:62
-msgid "MB used"
-msgstr "MB usati"
+msgstr "Entra"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "Lista Menu"
 
-#: manager.php:448
+#: manager.php:475
 msgid "Modified"
 msgstr "Modificato"
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
-msgstr "Muovi a sinistra"
+msgstr "Sposta a sinistra"
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
-msgstr "Muovi a destra"
+msgstr "Sposta a destra"
 
-#: manager.php:435
+#: manager.php:453
 msgid "Name"
 msgstr "Nome"
 
-#: templates/manager/manager.html:49 templates/manager/manager.html:65
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "Nome:"
 
-#: manager.php:35
+#: manager.php:36
 msgid "New folder created: "
 msgstr "Nuova cartella creata: "
 
 #: config/prefs.php.dist:91
 msgid "No"
-msgstr ""
+msgstr "No"
 
 #: templates/quota/quota.html:12
 msgid "No quota found."
-msgstr "Quota non trovata"
+msgstr "Limiti allo spazio disponibile non impostati."
 
-#: manager.php:259
+#: manager.php:268
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
-#: manager.php:468 templates/manager/manager.html:9
+#: manager.php:498 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "Proprietario"
 
 #: config/credentials.php.dist:23
 msgid "Password"
-msgstr ""
+msgstr "Password"
 
-#: clipboard.php:39
+#: clipboard.php:40
 msgid "Paste"
 msgstr "Incolla"
 
-#: manager.php:462
+#: manager.php:491
 msgid "Permission"
 msgstr "Permessi"
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "Permesso negato a %s: %s"
 
-#: manager.php:200
+#: manager.php:209
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
 msgstr "Permesso negato alla cartella \"%s\": %s"
 
-#: lib/Gollem.php:783
-msgid "Permissions"
-msgstr "Permessi"
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
+msgstr "Permesso negato a questo backend."
 
-#: templates/login/javascript.inc:36
+#: templates/javascript_defs.php:18
 msgid "Please provide your password."
 msgstr "Si prega di inserire la propria password."
 
-#: templates/login/javascript.inc:31
+#: templates/javascript_defs.php:17
 msgid "Please provide your username."
 msgstr "Si prega di inserire il proprio nome utente."
 
@@ -448,53 +478,61 @@ msgstr "Si prega di inserire il proprio nome utente."
 msgid "Please select a backend:"
 msgstr "Si prega di selezionare un backend:"
 
-#: templates/manager/javascript.inc:132
+#: templates/javascript_defs.php:21
 msgid "Please select an item before this action."
 msgstr "Si prega di selezionare una voce prima di questa azione."
 
-#: templates/manager/javascript.inc:456
+#: templates/javascript_defs.php:26
 msgid "Please specify at least one file to upload."
 msgstr "Si prega di specificare almeno un file da caricare."
 
-#: quota.php:18 templates/quota/quota.html:2
+#: quota.php:19 templates/quota/quota.html:2
 msgid "Quota Display"
-msgstr "Visualizza Quota"
-
-#: quota.php:61
-msgid "Quota Usage"
-msgstr "Uso della Quota"
+msgstr "Visualizza Spazio Disponibile"
 
 #: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Leggi"
 
-#: manager.php:266
+#: manager.php:274
 msgid "Refresh"
 msgstr "Aggiorna"
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
-msgstr "Rimuovi la colonna"
+msgstr "Rimuovi colonna"
 
-#: templates/manager/manager.html:47 templates/manager/manager.html:123
+#: templates/manager/manager.html:44 templates/manager/manager.html:136
 msgid "Rename"
 msgstr "Rinomina"
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
+msgstr "Rinominare tra backend non è supportato."
+
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr "Rinominare i backend non è supportato."
+
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Resetta"
+
+#: lib/Gollem.php:730 lib/Gollem.php:735
 msgid "Root"
-msgstr ""
+msgstr "Root"
 
-#: manager.php:257
+#: manager.php:266 templates/edit/edit.inc:11
 msgid "Save"
-msgstr "salva"
+msgstr "Salva"
 
 #: templates/prefs/columnselect.html:30
 msgid "Selected Columns:"
-msgstr "Colonne selezionate:"
+msgstr "Colonne Selezionate:"
 
-#: templates/login/login.html:31
+#: templates/login/login.html:32
 msgid "Server"
-msgstr ""
+msgstr "Server"
 
 #: config/prefs.php.dist:20
 msgid "Settings"
@@ -502,69 +540,84 @@ msgstr "Impostazioni"
 
 #: config/prefs.php.dist:30
 msgid "Show dotfiles?"
-msgstr "Viualizza i file che iniziano col '.'?"
+msgstr "Mostra file preceduti dal punto?"
 
-#: manager.php:455
+#: manager.php:483
 msgid "Size"
 msgstr "Dimensione"
 
-#: manager.php:481
-msgid "Sort Direction"
-msgstr "Direzione di ordinamento"
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
+msgstr "La cartella applicazioni non può essere eliminata."
 
-#: templates/manager/javascript.inc:202
-msgid "The following item(s) are folders: "
-msgstr "La seguente voce(i) è(sono) cartelle: "
+#: templates/javascript_defs.php:24
+msgid "The following item(s) are folders:"
+msgstr "I seguenti oggetti sono cartelle:"
 
-#: templates/manager/javascript.inc:198
-msgid "The following items will be permanently deleted: "
-msgstr "Le seguenti voci verranno eliminate in modo permanente: "
+#: templates/javascript_defs.php:22
+msgid "The following items will be permanently deleted:"
+msgstr "I seguenti oggetti saranno definitivamente eliminati:"
 
-#: templates/selectlist/javascript.inc:9
+#: templates/javascript_defs.php:30
 msgid "The original opener window has been closed. Exiting."
-msgstr "La finestra di apertura originale è stata chiusa. Uscire."
+msgstr "La finestra originale è stata chiusa. Uscire."
 
-#: login.php:150
+#: login.php:151
 msgid "There are no backends available for the current user."
 msgstr "Non ci sono backend disponibili per l'utente corrente."
 
-#: selectlist.php:193 templates/manager/manager.html:134
+#: selectlist.php:199 templates/manager/manager.html:147
 msgid "There are no files in this folder."
-msgstr "Non ci sono files in questa cartella."
+msgstr "Non ci sono file in questa cartella."
 
 #: templates/clipboard/clipboard.html:15
 msgid ""
 "To clear items from the clipboard, check the box next to the filename and "
 "click on &quot;Clear&quot;."
 msgstr ""
-"Per azzerare le voci dalla clipboard, spunta la casella vicina al nome file "
-"e clicca su &quot;Azzera&quot;."
+"Per rimuovere oggetti dagli appunti, seleziona la casella accanto al nome "
+"del file e clicca su &quot;Rimuovi&quot;."
 
 #: templates/clipboard/clipboard.html:13
 msgid ""
 "To paste items from the clipboard to the current directory, check the box "
 "next to the filename and click on &quot;Paste&quot;."
 msgstr ""
-"Per incollare voci dalla clipboard nella directory corrente, spunta la "
-"casella vicina al nome file e clicca su &quot;Incolla&quot;."
+"Per incollare oggetti dagli appunti alla cartella corrente, seleziona la "
+"casella accanto al nome del file e clicca su &quot;Incolla&quot;."
 
-#: manager.php:428
+#: manager.php:445
 msgid "Type"
 msgstr "Tipo"
 
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr "Impossibile creare la sessione Gollem"
+
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
-msgstr "Impossibile creare i permessi del backend: %s"
+msgstr "Impossibile creare permessi del backend: %s"
+
+#: manager.php:86
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "Impossibile eliminare il file %s: %s"
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: manager.php:79
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "Impossibile eliminare la cartella %s: %s"
+
+#: lib/Gollem.php:735 lib/Gollem.php:745
 #, php-format
 msgid "Up to %s"
 msgstr "Fino a %s"
 
-#: manager.php:279
+#: manager.php:287
 msgid "Upload File(s)"
-msgstr "Carica file(s)"
+msgstr "Carica file"
 
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
@@ -572,13 +625,13 @@ msgstr "Interfaccia Utente"
 
 #: config/credentials.php.dist:18
 msgid "Username"
-msgstr "Nome utente"
+msgstr "Nome Utente"
 
-#: manager.php:274
+#: manager.php:282
 msgid "View Clipboard"
-msgstr "Visualizza la clipboard"
+msgstr "Visualizza Appunti"
 
-#: login.php:195
+#: login.php:201
 #, php-format
 msgid "Welcome to %s"
 msgstr "Benvenuto a %s"
@@ -593,22 +646,35 @@ msgstr "Si"
 
 #: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
-msgstr "Necessiti di almeno un backend definito per impostare i permessi."
+msgstr ""
+"E' necessario aver definito almeno un backend per impostare i permessi."
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
 msgstr ""
-"Il tuo browser non supporta la visualizzazione inline di questo tipo di "
+"Il tuo browser non supporta la visualizzazione in linea di questo tipo di "
 "immagine"
 
-#: lib/Gollem.php:817 lib/Gollem.php:820
+#: lib/Gollem.php:814 lib/Gollem.php:817
 msgid "_Change Server"
 msgstr "_Cambia Server"
 
-#: manager.php:215 selectlist.php:74
+#: lib/Gollem.php:770
+msgid "_Create Folder"
+msgstr "C_rea Cartella"
+
+#: lib/Gollem.php:766
+msgid "_My Home"
+msgstr "Cartella _Iniziale"
+
+#: lib/Gollem.php:780
+msgid "_Permissions"
+msgstr "_Permessi"
+
+#: manager.php:228 selectlist.php:75
 msgid "folder"
 msgstr "cartella"
 
-#: manager.php:216 selectlist.php:75
+#: manager.php:229 selectlist.php:76
 msgid "symlink"
-msgstr ""
+msgstr "collegamento simbolico"
diff --git a/po/ko_KR.po b/po/ko_KR.po
index fd70ef6..44110cf 100644
--- a/po/ko_KR.po
+++ b/po/ko_KR.po
@@ -1,12 +1,11 @@
 # Gollem Korean translation.
-# Copyright (C) 2001 J.I Kim.
+# Copyright 2001 J.I Kim.
 # J.I Kim <aporie at netian.com>, 2001.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Gollem 0.0.1-cvs\n"
-"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-13 17:13+0200\n"
+"POT-Creation-Date: 2001-12-31 13:59+0900\n"
 "PO-Revision-Date: 2001-11-09 16:29+0900\n"
 "Last-Translator: J.I Kim <aporie at netian.com>\n"
 "Language-Team: Korean <dev at lists.horde.org>\n"
@@ -14,581 +13,306 @@ msgstr ""
 "Content-Type: text/plain; charset=EUC-KR\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: manager.php:52
-#, fuzzy, php-format
-msgid "\"%s\" renamed to \"%s\""
-msgstr "%s´Â %s·Î À̸§ º¯°æµÇ¾ú½À´Ï´Ù."
+msgid " to: "
+msgstr "ÀÇ ÆÄÀÏÀ̸§ º¯°æ:"
 
-#: templates/manager/header.inc:576
-#, fuzzy, php-format
-msgid "%d items"
+#, c-format
+msgid "%d items in %s"
 msgstr "%d Ç׸ñ (%s)"
 
-#: manager.php:356
-#, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr ""
-
-#: manager.php:354
-#, php-format
-msgid "%s Folders and 1 File (%s Kb)"
-msgstr ""
-
-#: templates/login/login.inc:88
-#, fuzzy, php-format
-msgid "%s Login"
-msgstr "·Î±×ÀÎ"
-
-#: manager.php:157
-#, php-format
-msgid "%s was successfully pasted."
-msgstr ""
-
-#: manager.php:351
-#, php-format
-msgid "1 Folder and %s Files (%s Kb)"
-msgstr ""
-
-#: manager.php:349
-#, php-format
-msgid "1 Folder and 1 File (%s Kb)"
-msgstr ""
-
-#: templates/manager/header.inc:576
-msgid "1 item"
-msgstr ""
-
-#: view.php:31
-#, fuzzy, php-format
-msgid "Access denied to %s"
+#, c-format
+msgid "%s renamed to %s"
 msgstr "%s´Â %s·Î À̸§ º¯°æµÇ¾ú½À´Ï´Ù."
 
-#: lib/Gollem.php:115 lib/Gollem.php:389 lib/Gollem.php:442 lib/Gollem.php:463
-#: lib/Gollem.php:480
-#, php-format
-msgid "Access denied to folder \"%s\"."
-msgstr ""
-
-#: templates/manager/header.inc:601
-#, fuzzy
-msgid "Actions"
-msgstr "¿É¼Ç"
+msgid "<b>Note:</b> These settings won't take effect until your next login."
+msgstr "<b>ÂüÁ¶:</b> ÀÌ ¼³Á¤°ªÀº ´ÙÀ½ ·Î±×Àνÿ¡ ¹Ý¿µµË´Ï´Ù."
 
-#: selectlist.php:100
-msgid "Add"
-msgstr ""
+msgid "An illegal value was specified."
+msgstr "À߸øµÈ °ªÀÔ´Ï´Ù."
 
-#: templates/prefs/columnselect.inc:229
-msgid "Add column"
-msgstr ""
-
-#: templates/manager/header.inc:493
-msgid "All"
-msgstr ""
-
-#: templates/manager/header.inc:180
-msgid "Are you sure you wish to continue?"
-msgstr ""
-
-#: templates/manager/header.inc:176
 msgid "Are you sure?"
 msgstr "È®½ÇÇմϱî?"
 
-#: config/prefs.php.dist:69
 msgid "Ascending"
 msgstr "¿À¸§Â÷¼ø"
 
-#: config/prefs.php.dist:93
-msgid "Ask"
-msgstr ""
-
-#: templates/manager/header.inc:487
-msgid "Attributes"
-msgstr ""
-
-#: templates/prefs/columnselect.inc:225
-msgid "Available Columns:"
-msgstr ""
-
-#: lib/api.php:46
-msgid "Backends"
-msgstr ""
-
-#: templates/clipboard/clipboard.html:11
-msgid "Below is the current contents of your clipboard."
-msgstr ""
-
-#: selectlist.php:102 clipboard.php:35 templates/manager/header.inc:515
-#: templates/manager/header.inc:533 templates/manager/header.inc:546
-#: templates/manager/header.inc:559
-msgid "Cancel"
-msgstr ""
-
-#: manager.php:72
-#, php-format
+#, c-format
 msgid "Cannot chmod %s"
 msgstr "%sÀÇ Á¢±Ù¼³Á¤À» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù."
 
-#: manager.php:132
-msgid "Cannot copy items onto clipboard."
-msgstr ""
-
-#: manager.php:190
-#, fuzzy, php-format
-msgid "Cannot create home directory: %s"
-msgstr "µð·ºÅ丮°¡ ¾ø½À´Ï´Ù: "
-
-#: manager.php:134
-msgid "Cannot cut items onto clipboard."
-msgstr ""
-
-#: manager.php:80
-#, fuzzy, php-format
-msgid "Cannot delete \"%s\": %s"
+#, c-format
+msgid "Cannot delete %s"
 msgstr "%s¸¦ »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù."
 
-#: manager.php:155
-#, php-format
-msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr ""
-
-#: templates/manager/header.inc:553 lib/Gollem.php:793
-#, fuzzy
-msgid "Change Folder"
-msgstr "»õ·Î¿î Æú´õ ¸¸µé±â"
-
-#: selectlist.php:110 templates/menu.inc:8
-#, fuzzy
-msgid "Change Server"
-msgstr "¼­¹ö"
-
-#: config/prefs.php.dist:21
-#, fuzzy
-msgid "Change file and folder handling settings."
-msgstr "ÆÄÀÏ Á¤·Ä ¿É¼Ç º¯°æ"
-
-#: config/prefs.php.dist:14
 msgid "Change your file sorting options."
 msgstr "ÆÄÀÏ Á¤·Ä ¿É¼Ç º¯°æ"
 
-#: manager.php:438
-msgid "Check _All/None"
-msgstr ""
+msgid "Checkbox"
+msgstr "üũ¹Ú½º"
 
-#: templates/manager/header.inc:609
 msgid "Chmod Items"
 msgstr "Á¢±Ù¼³Á¤°ª º¯°æ"
 
-#: manager.php:70
 msgid "Chmod done: "
 msgstr "Á¢±Ù¼³Á¤°ª º¯°æ ¿Ï·á: "
 
-#: templates/prefs/columnselect.inc:218
-msgid "Choose the columns to display in the file manager."
-msgstr ""
-
-#: clipboard.php:36
-msgid "Clear"
-msgstr ""
-
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr ""
-
-#: templates/login/login.inc:111
-#, fuzzy, php-format
-msgid "Connect to: %s"
-msgstr "%sÀÇ Á¢±Ù¼³Á¤À» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù."
-
-#: clipboard.php:39
-msgid "Copy"
-msgstr ""
-
-#: templates/manager/header.inc:611
-#, fuzzy
-msgid "Copy Items"
-msgstr "Á¢±Ù¼³Á¤°ª º¯°æ"
+msgid "Choose Action:"
+msgstr "¸í·É¾î ¼±ÅÃ:"
 
-#: templates/manager/header.inc:540 lib/Gollem.php:790
 msgid "Create Folder"
 msgstr "»õ·Î¿î Æú´õ ¸¸µé±â"
 
-#: permissions.php:48
-#, php-format
-msgid "Created default permissions for backend \"%s\"."
-msgstr ""
-
-#: clipboard.php:40
-#, fuzzy, php-format
-msgid "Current directory: %s"
-msgstr "µð·ºÅ丮°¡ ¾ø½À´Ï´Ù: "
-
-#: clipboard.php:38
-msgid "Cut"
-msgstr ""
-
-#: templates/manager/header.inc:610
-#, fuzzy
-msgid "Cut Items"
-msgstr "Á¢±Ù¼³Á¤°ª º¯°æ"
-
-#: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
 msgstr "±âº» Á¤·Ä ¹üÁÖ:"
 
-#: config/prefs.php.dist:72
 msgid "Default sorting direction:"
 msgstr "±âº» Á¤·Ä ¹æÇâ:"
 
-#: templates/manager/header.inc:606
 msgid "Delete Items"
 msgstr "ÆÄÀÏ »èÁ¦"
 
-#: config/prefs.php.dist:95
-msgid "Delete folders recursively?"
-msgstr ""
-
-#: config/prefs.php.dist:70
 msgid "Descending"
 msgstr "³»¸²Â÷¼ø"
 
-#: selectlist.php:101
-msgid "Done"
-msgstr ""
+msgid "Directory removed: "
+msgstr "µð·ºÅ丮 »èÁ¦: "
 
-#: manager.php:218
-msgid "Download"
-msgstr ""
+msgid "Display Options"
+msgstr "È­¸é Ãâ·Â ¿É¼Ç"
 
-#: manager.php:323
-#, php-format
-msgid "Download %s"
+msgid ""
+"Either you have logged in incorrectly or your login has expired. Please "
+"login again."
 msgstr ""
+"Á¤È®ÇÏ°Ô ·Î±×ÀÎÇÏÁö ¾Ê¾Ò°Å³ª ·Î±×ÀÎÀÌ ¸¸·á µÇ¾ú½À´Ï´Ù. ´Ù½Ã ·Î±×ÀÎÇϼ¼¿ä."
 
-#: config/credentials.php.dist:28
-msgid "Email"
-msgstr ""
+msgid "Error creating new folder: "
+msgstr "»õ·Î¿î Æú´õ ¸¸µé±â ¿À·ù: "
 
-#: templates/manager/header.inc:508
-msgid "Execute"
-msgstr ""
+msgid "Error renaming: "
+msgstr "ÆÄÀÏ À̸§ º¯°æ ¿À·ù: "
 
-#: templates/manager/header.inc:464 templates/manager/header.inc:589
-#, fuzzy
-msgid "File"
-msgstr "ÆÄÀÏ À̸§"
+msgid "Error uploading file: "
+msgstr "ÆÄÀÏ ¾÷·Îµå ¿À·ù: "
 
-#: config/prefs.php.dist:13
-msgid "File Display"
-msgstr ""
+msgid "Error"
+msgstr "¿À·ù"
 
-#: config/prefs.php.dist:56
 msgid "File Modification Time"
 msgstr "ÆÄÀÏ º¯°æ ½Ã°£"
 
-#: config/prefs.php.dist:55
 msgid "File Name"
 msgstr "ÆÄÀÏ À̸§"
 
-#: config/prefs.php.dist:57
 msgid "File Size"
 msgstr "ÆÄÀÏ Å©±â"
 
-#: config/prefs.php.dist:54
 msgid "File Type"
 msgstr "ÆÄÀÏ À¯Çü"
 
-#: manager.php:76
 msgid "File deleted: "
 msgstr "ÆÄÀÏ »èÁ¦: "
 
-#: manager.php:101
-#, fuzzy, php-format
-msgid "File received: %s"
+msgid "File received: "
 msgstr "ÆÄÀÏ ¿Ã¸®±â: "
 
-#: manager.php:78
-#, fuzzy
-msgid "Folder removed: "
-msgstr "ÆÄÀÏ ¿Ã¸®±â: "
-
-#: templates/manager/header.inc:555
-#, fuzzy
-msgid "Go to:"
-msgstr "ÀÇ ÆÄÀÏÀ̸§ º¯°æ:"
-
-#: permissions.php:25
-msgid "Gollem Backend Permissions Administration"
-msgstr ""
+msgid "Gollem is not properly configured"
+msgstr "GollemÀÌ Á¤»ó ¼³Á¤µÇÁö ¾Ê¾Ò½À´Ï´Ù."
 
-#: manager.php:413 templates/manager/header.inc:492
 msgid "Group"
 msgstr "±×·ì"
 
-#: lib/Gollem.php:786
+msgid "Help"
+msgstr "µµ¿ò¸»"
+
 msgid "Home"
 msgstr "Ȩ"
 
-#: manager.php:56
 msgid "Incorrect number of items."
 msgstr "À߸øµÈ Ç׸ñ¼ö"
 
-#: manager.php:125
-#, php-format
-msgid "Item copied to clipboard: %s"
-msgstr ""
-
-#: manager.php:127
-#, php-format
-msgid "Item cut to clipboard: %s"
-msgstr ""
-
-#: templates/login/login.inc:136
 msgid "Language"
 msgstr "¾ð¾î"
 
-#: config/prefs.php.dist:81
-msgid "List folders first?"
-msgstr ""
-
-#: templates/login/login.inc:145
 msgid "Log in"
 msgstr "·Î±×ÀÎ"
 
-#: lib/Block/tree_menu.php:3
-msgid "Menu List"
+msgid ""
+"Login failed for some reason. Most likely your username or password was "
+"entered incorrectly."
 msgstr ""
+"¾î¶² ÀÌÀ¯·Î ·Î±×ÀÎÀÌ ½ÇÆÐÇß½À´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì »ç¿ëÀÚÀ̸§ ¶Ç´Â ºñ¹Ð¹øÈ£°¡ "
+"¿Ã¹Ù¸£Áö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù."
 
-#: manager.php:387
-msgid "Modified"
-msgstr "º¯°æÀÏÀÚ"
+msgid "Logout"
+msgstr "Á¾·á"
 
-#: templates/prefs/columnselect.inc:239
-msgid "Move left"
-msgstr ""
+msgid "Message"
+msgstr "¸Þ¼¼Áö"
 
-#: templates/prefs/columnselect.inc:241
-msgid "Move right"
-msgstr ""
+msgid "Modified"
+msgstr "º¯°æÀÏÀÚ"
 
-#: manager.php:374
 msgid "Name"
 msgstr "À̸§"
 
-#: templates/manager/header.inc:529 templates/manager/header.inc:542
-#, fuzzy
-msgid "Name:"
-msgstr "À̸§"
+msgid "New User Introduction"
+msgstr "»õ·Î¿î »ç¿ëÀÚ¸¦ À§ÇÑ µµ¿ò¸»"
 
-#: manager.php:35
 msgid "New folder created: "
 msgstr "»õ·Î¿î Æú´õ »ý¼º: "
 
-#: config/prefs.php.dist:91
-msgid "No"
-msgstr ""
+msgid "No such directory: "
+msgstr "µð·ºÅ丮°¡ ¾ø½À´Ï´Ù: "
 
-#: templates/manager/header.inc:532 templates/manager/header.inc:545
-#: templates/manager/header.inc:558
-msgid "OK"
-msgstr ""
+msgid "Options"
+msgstr "¿É¼Ç"
+
+msgid "Other Options"
+msgstr "´Ù¸¥ ¿É¼Ç"
 
-#: manager.php:407 templates/manager/header.inc:491
 msgid "Owner"
 msgstr "¼ÒÀ¯ÀÚ"
 
-#: config/credentials.php.dist:23
 msgid "Password"
 msgstr "ºñ¹Ð ¹øÈ£"
 
-#: clipboard.php:37
-msgid "Paste"
-msgstr ""
-
-#: manager.php:401
 msgid "Permission"
 msgstr "ÆÄÀÏÁ¢±Ù¸ðµå"
 
-#: selectlist.php:63
-#, php-format
-msgid "Permission denied to %s: %s"
-msgstr ""
+msgid "Please enter the mode in numeric format:"
+msgstr "¼ýÀÚÇü½ÄÀ¸·Î ÀÔ·ÂÇϼ¼¿ä:"
 
-#: manager.php:198
-#, php-format
-msgid "Permission denied to folder \"%s\": %s"
-msgstr ""
-
-#: lib/Gollem.php:798
-#, fuzzy
-msgid "Permissions"
-msgstr "ÆÄÀÏÁ¢±Ù¸ðµå"
+msgid "Please enter the name of the new folder:"
+msgstr "»õ·Î¿î Æú´õÀÇ À̸§À» ÀÔ·ÂÇϼ¼¿ä:"
 
-#: templates/login/login.inc:49
 msgid "Please provide your password."
 msgstr "ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇϼ¼¿ä."
 
-#: templates/login/login.inc:44
 msgid "Please provide your username."
 msgstr "»ç¿ëÀÚÀ̸§À» ÀÔ·ÂÇϼ¼¿ä."
 
-#: templates/prefs/columnselect.inc:211
-#, fuzzy
-msgid "Please select a backend:"
-msgstr "½ÇÇàÇÒ Ç׸ñÀ» ¼±ÅÃÇϼ¼¿ä"
-
-#: templates/manager/header.inc:109
 msgid "Please select an item before this action."
 msgstr "½ÇÇàÇÒ Ç׸ñÀ» ¼±ÅÃÇϼ¼¿ä"
 
-#: templates/manager/header.inc:435
-#, fuzzy
-msgid "Please specify at least one file to upload."
+msgid "Please specify a file to upload."
 msgstr "¾÷·ÎµåÇÒ ÆÄÀÏÀ» ¼±ÅÃÇϼ¼¿ä."
 
-#: templates/manager/header.inc:496
-msgid "Read"
-msgstr ""
+msgid "Problem?"
+msgstr "¹®Á¦?"
 
-#: templates/manager/header.inc:579
 msgid "Refresh"
 msgstr "´Ù½Ã Àбâ"
 
-#: templates/prefs/columnselect.inc:231
-msgid "Remove column"
-msgstr ""
-
-#: templates/manager/header.inc:527
-#, fuzzy
-msgid "Rename"
+msgid "Rename "
 msgstr "À̸§ º¯°æ "
 
-#: templates/manager/header.inc:603
 msgid "Rename Items"
 msgstr "ÆÄÀÏ À̸§ º¯°æ"
 
-#: lib/Gollem.php:754 lib/Gollem.php:759
-#, fuzzy
-msgid "Root"
-msgstr "Á¾·á"
+msgid "Select your preferred language:"
+msgstr "ÀÚÁÖ »ç¿ëÇÏ´Â ¾ð¾î¸¦ ¼±ÅÃÇϼ¼¿ä:"
 
-#: templates/manager/header.inc:514
-#, fuzzy
-msgid "Save"
-msgstr "¼­¹ö"
-
-#: templates/prefs/columnselect.inc:235
-msgid "Selected Columns:"
-msgstr ""
-
-#: templates/login/login.inc:101
 msgid "Server"
 msgstr "¼­¹ö"
 
-#: config/prefs.php.dist:20
-msgid "Settings"
-msgstr ""
-
-#: config/prefs.php.dist:30
-msgid "Show dotfiles?"
-msgstr ""
+msgid "Set the language that menu items, explanations, and help are in."
+msgstr "¸Þ´º, ¼³¸í, µµ¿ò¸»À» Ç¥½ÃÇÒ ¾ð¾î¸¦ ¼±ÅÃÇϼ¼¿ä."
 
-#: manager.php:394
 msgid "Size"
 msgstr "Å©±â"
 
-#: manager.php:420
+msgid "Some of Gollem's configuration files are missing:"
+msgstr "ÀϺΠGollemÀÇ ¼³Á¤ÆÄÀÏÀÌ ¾ø½À´Ï´Ù:"
+
 msgid "Sort Direction"
 msgstr "Á¤·Ä ¼ø¼­"
 
-#: templates/manager/header.inc:180
-#, fuzzy
-msgid "The following item(s) are folders: "
-msgstr "´ÙÀ½ÀÇ Ç׸ñÀÌ ¿µ±¸ »èÁ¦µÉ°ÍÀÔ´Ï´Ù:"
+msgid "Success"
+msgstr "¿Ï·á"
 
-#: templates/manager/header.inc:176
-#, fuzzy
-msgid "The following items will be permanently deleted: "
+msgid "The following items will be permenantly deleted: "
 msgstr "´ÙÀ½ÀÇ Ç׸ñÀÌ ¿µ±¸ »èÁ¦µÉ°ÍÀÔ´Ï´Ù:"
 
-#: templates/selectlist/javascript.inc:9
-msgid "The original opener window has been closed. Exiting."
-msgstr ""
-
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
-#, fuzzy
-msgid "There are no files in this folder."
+msgid "There are no files in this directory."
 msgstr "µð·ºÅ丮¿¡ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù."
 
-#: templates/clipboard/clipboard.html:15
 msgid ""
-"To clear items from the clipboard, check the box next to the filename and "
-"click on &quot;Clear&quot;."
+"This file controls the default preferences for Gollem, and also controls "
+"which preferences users can alter."
 msgstr ""
+"ÀÌÆÄÀÏÀº GollemÀÇ ±âº» ȯ°æ¼³Á¤°ú »ç¿ëÀÚ°¡ º¯°æÇÒ ¼ö Àִ ȯ°æ ¼³Á¤À» Á¦¾îÇÕ"
+"´Ï´Ù."
 
-#: templates/clipboard/clipboard.html:13
 msgid ""
-"To paste items from the clipboard to the current directory, check the box "
-"next to the filename and click on &quot;Paste&quot;."
+"This file controls the default settings for Gollem, and also defines the "
+"list of available servers if you are using the server list."
+msgstr "ÀÌÆÄÀÏÀº GollemÀÇ ±âº» ¼³Á¤°ª°ú »ç¿ë°¡´ÉÇÑ ¼­¹ö ¸ñ·ÏÀ» ¸í½ÃÇÕ´Ï´Ù."
+
+msgid ""
+"This is the main Gollem configuration file. It contains paths and options "
+"for the Gollem scripts."
 msgstr ""
+"ÀÌÆÄÀÏÀº ±âº» Gollemȯ°æ¼³Á¤ ÆÄÀÏÀÔ´Ï´Ù. Gollem ½ºÅ©¸³Æ®ÀÇ °æ·Î¿Í ¿É¼ÇÀ» °®"
+"°í ÀÖ½À´Ï´Ù."
+
+msgid "This number must be at least one."
+msgstr "ÃÖ¼ÒÇÑ 1ÀÌ»óÀÇ °ªÀ̾î¾ß ÇÕ´Ï´Ù."
+
+msgid "This value must be a number."
+msgstr "¼ýÀÚ·Î µÈ °ªÀ̾î¾ß ÇÕ´Ï´Ù."
 
-#: manager.php:367
 msgid "Type"
 msgstr "Á¾·ù"
 
-#: lib/Gollem.php:759 lib/Gollem.php:769
-#, fuzzy, php-format
-msgid "Up to %s"
-msgstr "ÀÇ ÆÄÀÏÀ̸§ º¯°æ:"
+msgid "Up to parent"
+msgstr "»óÀ§·Î"
 
-#: templates/manager/header.inc:594
-#, fuzzy
-msgid "Upload File(s)"
+msgid "Upload File"
 msgstr "ÆÄÀÏ ¿Ã¸®±â"
 
-#: config/prefs.php.dist:12 config/prefs.php.dist:19
-#, fuzzy
-msgid "User Interface"
-msgstr "»ç¿ëÀÚ À̸§"
+msgid "User Preferences"
+msgstr "»ç¿ëÀÚ È¯°æ¼³Á¤"
 
-#: config/credentials.php.dist:18
 msgid "Username"
 msgstr "»ç¿ëÀÚ À̸§"
 
-#: templates/manager/header.inc:581
-msgid "View Clipboard"
-msgstr ""
+msgid "Warning"
+msgstr "°æ°í"
+
+#, c-format
+msgid "Warning: %s requires Javascript to perform certain functions."
+msgstr "°æ°í: %s°¡ ½ÇÇàµÇ±â À§Çؼ­´Â ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù."
 
-#: login.php:174
-#, php-format
+#, c-format
 msgid "Welcome to %s"
 msgstr "ȯ¿µÇÕ´Ï´Ù. %s ÀÔ´Ï´Ù."
 
-#: templates/manager/header.inc:502
-msgid "Write"
-msgstr ""
+msgid "Welcome"
+msgstr "ȯ¿µÇÕ´Ï´Ù."
 
-#: config/prefs.php.dist:92
-msgid "Yes"
+#, c-format
+msgid ""
+"You have been logged out of %s. Thank you for using the system. If you wish "
+"to log in again, please use the form below."
 msgstr ""
+"%s¿¡¼­ ·Î±×¾Æ¿ôÇϼ̽À´Ï´Ù. ÀÌ ½Ã½ºÅÛÀ» »ç¿ëÇØÁּż­ °¨»çÇÕ´Ï´Ù. ´Ù½Ã ·Î±×ÀÎÇÏ"
+"½Ã·Á¸é, ¾Æ·¡ÀÇ ÆûÀ» »ç¿ëÇϽñ⠹ٶø´Ï´Ù."
 
-#: permissions.php:28
-msgid "You need at least one backend defined to set permissions."
-msgstr ""
+msgid "Your Information"
+msgstr "»ç¿ëÀÚ Á¤º¸"
 
-#: lib/MIME/Viewer/images.php:35
-msgid "Your browser does not support inline display of this image type"
-msgstr ""
+msgid "Your preferences have been updated."
+msgstr "ȯ°æ¼³Á¤ÀÌ ÀúÀåµÇ¾ú½À´Ï´Ù."
 
-#: templates/menu.inc:6 templates/menu.inc:19
-#, fuzzy
-msgid "_Change Server"
-msgstr "¼­¹ö"
+msgid "Your preferred FTP server:"
+msgstr "ÀÚÁÖ »ç¿ëÇÏ´Â FTP ¼­¹ö:"
+
+msgid "[home]"
+msgstr "[Ȩ]"
 
-#: manager.php:219 selectlist.php:74
 msgid "folder"
 msgstr "Æú´õ"
 
-#: manager.php:220 selectlist.php:75
 msgid "symlink"
 msgstr "½Éº¼ ¸µÅ©"
diff --git a/po/lv_LV.po b/po/lv_LV.po
index a4a8501..4f42838 100644
--- a/po/lv_LV.po
+++ b/po/lv_LV.po
@@ -1,5 +1,5 @@
 # Latvian translations for Gollem package.
-# Copyright (C) 2004 Horde Project
+# Copyright 2004-2009 The Horde Project
 # This file is distributed under the same license as the Gollem package.
 # Automatically generated, 2004.
 #
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Gollem 1.0-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-13 17:13+0200\n"
+"POT-Creation-Date: 2004-11-27 13:13+0200\n"
 "PO-Revision-Date: 2005-04-14 17:42+0200\n"
 "Last-Translator: Janis Eisaks <jancs at dv.lv>\n"
 "Language-Team: i18n at lists.horde.org\n"
@@ -17,77 +17,58 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
 "2);\n"
 
-#: manager.php:52
-#, fuzzy, php-format
-msgid "\"%s\" renamed to \"%s\""
-msgstr "'%s' pârdçvçts par '%s'"
-
-#: templates/manager/header.inc:576
+#: templates/manager/header.inc:580
 #, php-format
 msgid "%d items"
 msgstr "%d objekti"
 
-#: manager.php:356
+#: templates/manager/file_footers.inc:15
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s mapes un %s objekti (%s Kb)"
 
-#: manager.php:354
+#: templates/manager/file_footers.inc:13
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s mapes un 1 objekts (%s Kb)"
 
-#: templates/login/login.inc:88
-#, fuzzy, php-format
-msgid "%s Login"
-msgstr "Pieslçgties"
-
-#: manager.php:157
+#: manager.php:170
 #, php-format
 msgid "%s was successfully pasted."
 msgstr "%s veiksmîgi ievilkts."
 
-#: manager.php:351
+#: manager.php:67
+#, php-format
+msgid "'%s' renamed to '%s'"
+msgstr "'%s' pârdçvçts par '%s'"
+
+#: templates/manager/file_footers.inc:10
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 mape un %s objekti (%s Kb)"
 
-#: manager.php:349
+#: templates/manager/file_footers.inc:8
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 mape un 1 objekts (%s Kb)"
 
-#: templates/manager/header.inc:576
+#: templates/manager/header.inc:580
 msgid "1 item"
 msgstr "1 objekts"
 
-#: view.php:31
+#: view.php:23
 #, php-format
 msgid "Access denied to %s"
 msgstr "%s pieeja liegta."
 
-#: lib/Gollem.php:115 lib/Gollem.php:389 lib/Gollem.php:442 lib/Gollem.php:463
-#: lib/Gollem.php:480
-#, fuzzy, php-format
-msgid "Access denied to folder \"%s\"."
-msgstr "%s pieeja liegta."
+#: lib/Gollem.php:100
+msgid "Access denied: "
+msgstr "Pieeja liegta: "
 
-#: templates/manager/header.inc:601
-msgid "Actions"
-msgstr ""
-
-#: selectlist.php:100
-msgid "Add"
-msgstr ""
-
-#: templates/prefs/columnselect.inc:229
+#: templates/prefs/columnselect.inc:236
 msgid "Add column"
 msgstr "Pievienot kolonnu"
 
-#: templates/manager/header.inc:493
-msgid "All"
-msgstr ""
-
 #: templates/manager/header.inc:180
 msgid "Are you sure you wish to continue?"
 msgstr "Vai esat pilnîgi pârliecinâts, ka vçlaties turpinât?"
@@ -100,15 +81,15 @@ msgstr "Vai esat p
 msgid "Ascending"
 msgstr "Augoði"
 
-#: config/prefs.php.dist:93
+#: config/prefs.php.dist:94
 msgid "Ask"
 msgstr "Jautât"
 
-#: templates/manager/header.inc:487
+#: templates/manager/header.inc:429
 msgid "Attributes"
 msgstr "Atribûti"
 
-#: templates/prefs/columnselect.inc:225
+#: templates/prefs/columnselect.inc:232
 msgid "Available Columns:"
 msgstr "Pieejamâs kolonnas:"
 
@@ -116,54 +97,44 @@ msgstr "Pieejam
 msgid "Backends"
 msgstr "Programmatûra"
 
-#: templates/clipboard/clipboard.html:11
-#, fuzzy
-msgid "Below is the current contents of your clipboard."
-msgstr "Nevar izgriezt objektus uz starpliktuvi."
+#: templates/xppublish/browse.inc:7
+msgid "Browse to the folder to upload files to"
+msgstr "Pârejiet uz mapi, kurâ vçlaties ielâdçt objektus"
 
-#: selectlist.php:102 clipboard.php:35 templates/manager/header.inc:515
-#: templates/manager/header.inc:533 templates/manager/header.inc:546
-#: templates/manager/header.inc:559
+#: templates/selectlist/footer.inc:5 templates/manager/header.inc:457
+#: templates/manager/header.inc:490 templates/manager/header.inc:522
+#: templates/manager/header.inc:554
 msgid "Cancel"
 msgstr "Atcelt"
 
-#: manager.php:72
+#: manager.php:89
 #, php-format
 msgid "Cannot chmod %s"
 msgstr "Nevar izmanît pieejas tiesîbas %s"
 
-#: manager.php:132
+#: manager.php:146
 msgid "Cannot copy items onto clipboard."
 msgstr "Nevar kopçt objektus uz starpliktuvi."
 
-#: manager.php:190
-#, php-format
-msgid "Cannot create home directory: %s"
-msgstr ""
-
-#: manager.php:134
+#: manager.php:148
 msgid "Cannot cut items onto clipboard."
 msgstr "Nevar izgriezt objektus uz starpliktuvi."
 
-#: manager.php:80
-#, fuzzy, php-format
-msgid "Cannot delete \"%s\": %s"
+#: manager.php:97
+#, php-format
+msgid "Cannot delete '%s': %s"
 msgstr "Nevar izdzçst '%s': %s"
 
-#: manager.php:155
-#, fuzzy, php-format
-msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
+#: manager.php:168
+#, php-format
+msgid "Cannot paste '%s' (clipboard cleared): %s"
 msgstr "Nevar ielîmçt '%s' (starpliktuve notîrîta): %s"
 
-#: templates/manager/header.inc:553 lib/Gollem.php:793
+#: templates/manager/header.inc:535 templates/manager/header.inc:615
+#: lib/Gollem.php:730
 msgid "Change Folder"
 msgstr "Mainît mapi"
 
-#: selectlist.php:110 templates/menu.inc:8
-#, fuzzy
-msgid "Change Server"
-msgstr "Mainît serveri"
-
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
 msgstr "Mainît objektu un mapju apstrâdes iestatîjumus."
@@ -172,62 +143,41 @@ msgstr "Main
 msgid "Change your file sorting options."
 msgstr "Mainît objektu ðíiroðanas iestatîjumus."
 
-#: manager.php:438
+#: templates/manager/file_headers.inc:11
 msgid "Check _All/None"
 msgstr "Pârbaudît visus/nevienu"
 
-#: templates/manager/header.inc:609
+#: templates/manager/header.inc:628
 msgid "Chmod Items"
 msgstr "Pieejas tiesîbas objektiem"
 
-#: manager.php:70
+#: manager.php:87
 msgid "Chmod done: "
 msgstr "Pieejas tiesîbas mainîtas: "
 
-#: templates/prefs/columnselect.inc:218
+#: templates/manager/header.inc:613
+msgid "Choose Action:"
+msgstr "Izvçlieties darbîbu:"
+
+#: templates/prefs/columnselect.inc:226
 msgid "Choose the columns to display in the file manager."
 msgstr "Izvçlieties kolonnas, kuras râdît objektu pârvaldniekâ."
 
-#: clipboard.php:36
-msgid "Clear"
-msgstr ""
-
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr ""
-
-#: templates/login/login.inc:111
+#: templates/xppublish/backend.inc:33 templates/login/login.inc:89
 #, php-format
 msgid "Connect to: %s"
 msgstr "Pieslçgties: %s"
 
-#: clipboard.php:39
-msgid "Copy"
-msgstr ""
-
-#: templates/manager/header.inc:611
+#: templates/manager/header.inc:631
 msgid "Copy Items"
 msgstr "Kopçt objektus"
 
-#: templates/manager/header.inc:540 lib/Gollem.php:790
+#: templates/manager/header.inc:503 templates/manager/header.inc:618
+#: lib/Gollem.php:727
 msgid "Create Folder"
 msgstr "Izveidot mapi"
 
-#: permissions.php:48
-#, php-format
-msgid "Created default permissions for backend \"%s\"."
-msgstr ""
-
-#: clipboard.php:40
-#, php-format
-msgid "Current directory: %s"
-msgstr ""
-
-#: clipboard.php:38
-msgid "Cut"
-msgstr ""
-
-#: templates/manager/header.inc:610
+#: templates/manager/header.inc:630
 msgid "Cut Items"
 msgstr "Izgriezt objektus"
 
@@ -239,11 +189,16 @@ msgstr "Noklus
 msgid "Default sorting direction:"
 msgstr "Noklusçtâ ðíiroðanas secîba:"
 
-#: templates/manager/header.inc:606
+#: templates/xppublish/backend.inc:33 templates/login/login.inc:89
+#, php-format
+msgid "Defaulted to: %s"
+msgstr "Pieòemts noklusçtais: %s"
+
+#: templates/manager/header.inc:625
 msgid "Delete Items"
 msgstr "Dzçst objektus"
 
-#: config/prefs.php.dist:95
+#: config/prefs.php.dist:96
 msgid "Delete folders recursively?"
 msgstr "Dzçst visu mapi ar apakðmapçm?"
 
@@ -251,32 +206,35 @@ msgstr "Dz
 msgid "Descending"
 msgstr "Dilstoði"
 
-#: selectlist.php:101
+#: templates/selectlist/footer.inc:4
 msgid "Done"
 msgstr "Izpildîts"
 
-#: manager.php:218
+#: manager.php:218 templates/manager/file_headers.inc:25
 msgid "Download"
 msgstr "Lejupielâdçt"
 
-#: manager.php:323
-#, fuzzy, php-format
-msgid "Download %s"
-msgstr "Lejupielâdçt"
+#: xppublish.php:147
+#, php-format
+msgid "ERROR: %s"
+msgstr "KÏÛDA: %s"
 
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "E-pasts"
 
-#: templates/manager/header.inc:508
-msgid "Execute"
-msgstr ""
-
-#: templates/manager/header.inc:464 templates/manager/header.inc:589
-#, fuzzy
-msgid "File"
+#: templates/manager/header.inc:592
+msgid "File 1:"
 msgstr "Fails 1:"
 
+#: templates/manager/header.inc:599
+msgid "File 2:"
+msgstr "Fails 2:"
+
+#: templates/manager/header.inc:603
+msgid "File 3:"
+msgstr "Fails 3:"
+
 #: config/prefs.php.dist:13
 msgid "File Display"
 msgstr "Parâdît failu"
@@ -297,139 +255,133 @@ msgstr "Faila izm
 msgid "File Type"
 msgstr "Faila tips"
 
-#: manager.php:76
+#: templates/xppublish/javascript.inc:63
+msgid "File Upload"
+msgstr "Faila ielâde"
+
+#: manager.php:93
 msgid "File deleted: "
 msgstr "Fails izdzçsts: "
 
-#: manager.php:101
+#: manager.php:119
 #, php-format
 msgid "File received: %s"
 msgstr "Fails saòemts: %s"
 
-#: manager.php:78
+#: manager.php:95
 msgid "Folder removed: "
 msgstr "Mape izdzçsta: "
 
-#: templates/manager/header.inc:555
+#: templates/manager/header.inc:543
 msgid "Go to:"
 msgstr "Pâriet uz:"
 
-#: permissions.php:25
-msgid "Gollem Backend Permissions Administration"
-msgstr ""
-
-#: manager.php:413 templates/manager/header.inc:492
+#: templates/manager/file_headers.inc:47
 msgid "Group"
 msgstr "Grupa"
 
-#: lib/Gollem.php:786
+#: lib/Gollem.php:723
 msgid "Home"
 msgstr "Galvenâ"
 
-#: manager.php:56
+#: manager.php:71
 msgid "Incorrect number of items."
 msgstr "Nepareizs objektu skaits."
 
-#: manager.php:125
+#: manager.php:139
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "Objekts nokopçts uz starpliktuvi: %s"
 
-#: manager.php:127
+#: manager.php:141
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr "Objekts izgriezts uz starpliktuvi: %s"
 
-#: templates/login/login.inc:136
-msgid "Language"
-msgstr ""
-
 #: config/prefs.php.dist:81
 msgid "List folders first?"
 msgstr "Râdît mapes saraksta sâkumâ?"
 
-#: templates/login/login.inc:145
+#: login.php:104 xppublish.php:84
+msgid "Locked"
+msgstr "Slçgts"
+
+#: templates/login/login.inc:118
 msgid "Log in"
 msgstr "Pieslçgties"
 
-#: lib/Block/tree_menu.php:3
-msgid "Menu List"
-msgstr ""
+#: templates/xppublish/login.inc:2
+#, php-format
+msgid "Login to %s"
+msgstr "Pieslçgties %s"
 
-#: manager.php:387
+#: templates/manager/file_headers.inc:30
 msgid "Modified"
 msgstr "Pçdçjâs izmaiòas"
 
-#: templates/prefs/columnselect.inc:239
+#: templates/prefs/columnselect.inc:246
 msgid "Move left"
 msgstr "Pârvietot pa kreisi"
 
-#: templates/prefs/columnselect.inc:241
+#: templates/prefs/columnselect.inc:248
 msgid "Move right"
 msgstr "Pârvietot pa labi"
 
-#: manager.php:374
+#: templates/manager/file_headers.inc:21
 msgid "Name"
 msgstr "Nosaukums"
 
-#: templates/manager/header.inc:529 templates/manager/header.inc:542
+#: templates/manager/header.inc:479 templates/manager/header.inc:511
 msgid "Name:"
 msgstr "Vârds:"
 
-#: manager.php:35
+#: manager.php:48
 msgid "New folder created: "
 msgstr "Radîta jauna mape: "
 
-#: config/prefs.php.dist:91
+#: config/prefs.php.dist:92
 msgid "No"
 msgstr "Nç"
 
-#: templates/manager/header.inc:532 templates/manager/header.inc:545
-#: templates/manager/header.inc:558
+#: templates/manager/header.inc:489 templates/manager/header.inc:521
+#: templates/manager/header.inc:553
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:407 templates/manager/header.inc:491
+#: templates/manager/file_headers.inc:43
 msgid "Owner"
 msgstr "Îpaðnieks"
 
-#: config/credentials.php.dist:23
+#: templates/xppublish/login.inc:14 config/credentials.php.dist:23
 msgid "Password"
 msgstr "Parole"
 
-#: clipboard.php:37
-#, fuzzy
-msgid "Paste"
+#: templates/manager/header.inc:637
+msgid "Paste Items"
 msgstr "Ielîmçt objektus"
 
-#: manager.php:401
+#: templates/manager/file_headers.inc:39
 msgid "Permission"
 msgstr "Pieejas tiesîbas"
 
-#: selectlist.php:63
+#: manager.php:198 selectlist.php:61 templates/xppublish/browse.inc:28
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "Pieeja %s liegta: %s"
 
-#: manager.php:198
-#, fuzzy, php-format
-msgid "Permission denied to folder \"%s\": %s"
-msgstr "Pieeja %s liegta: %s"
-
-#: lib/Gollem.php:798
-#, fuzzy
-msgid "Permissions"
-msgstr "Pieejas tiesîbas"
+#: xppublish.php:55
+msgid "Please enter your Username and Password."
+msgstr "Ievadiet lietotâja vârdu un paroli."
 
-#: templates/login/login.inc:49
+#: templates/login/login.inc:31
 msgid "Please provide your password."
 msgstr "Lûdzu ievadiet paroli."
 
-#: templates/login/login.inc:44
+#: templates/login/login.inc:26
 msgid "Please provide your username."
 msgstr "Lûdzu ievadiet lietotâja vârdu."
 
-#: templates/prefs/columnselect.inc:211
+#: templates/prefs/columnselect.inc:217
 msgid "Please select a backend:"
 msgstr "Izvçlieties servera tipu:"
 
@@ -437,44 +389,44 @@ msgstr "Izv
 msgid "Please select an item before this action."
 msgstr "Lûdzu izvçlieties objektu pirms operâcijas."
 
-#: templates/manager/header.inc:435
+#: templates/manager/header.inc:226
 msgid "Please specify at least one file to upload."
 msgstr "Lûdzu norâdiet vismaz vienu ielâdçjamo failu."
 
-#: templates/manager/header.inc:496
-#, fuzzy
-msgid "Read"
-msgstr "Pârdçvçt"
-
-#: templates/manager/header.inc:579
+#: templates/manager/header.inc:576
 msgid "Refresh"
 msgstr "Atjaunot"
 
-#: templates/prefs/columnselect.inc:231
+#: templates/prefs/columnselect.inc:238
 msgid "Remove column"
 msgstr "Izdzçst kolonnu"
 
-#: templates/manager/header.inc:527
+#: templates/manager/header.inc:471
 msgid "Rename"
 msgstr "Pârdçvçt"
 
-#: templates/manager/header.inc:603
+#: templates/manager/header.inc:622
 msgid "Rename Items"
 msgstr "Pârdçvçt objektus"
 
-#: lib/Gollem.php:754 lib/Gollem.php:759
+#: lib/Gollem.php:689 lib/Gollem.php:694
 msgid "Root"
 msgstr "Sakne"
 
-#: templates/manager/header.inc:514
+#: templates/manager/header.inc:456
 msgid "Save"
 msgstr "Saglabât"
 
-#: templates/prefs/columnselect.inc:235
+#: templates/xppublish/backend.inc:27 templates/selectlist/footer.inc:3
+msgid "Select"
+msgstr "Izvçlies"
+
+#: templates/prefs/columnselect.inc:242
 msgid "Selected Columns:"
 msgstr "Izvçlçtâs kolonnas:"
 
-#: templates/login/login.inc:101
+#: templates/xppublish/backend.inc:22 templates/xppublish/backend.inc:40
+#: templates/login/login.inc:79 templates/login/login.inc:96
 msgid "Server"
 msgstr "Serveris"
 
@@ -486,11 +438,12 @@ msgstr "Iestat
 msgid "Show dotfiles?"
 msgstr "Râdît failus, kuru nosaukums sâkas ar (.)?"
 
-#: manager.php:394
+#: templates/manager/file_headers.inc:35
 msgid "Size"
 msgstr "Izmçrs"
 
-#: manager.php:420
+#: templates/manager/file_headers.inc:15 templates/manager/file_headers.inc:20
+#: templates/manager/file_headers.inc:29 templates/manager/file_headers.inc:34
 msgid "Sort Direction"
 msgstr "Ðíiroðanas secîba"
 
@@ -502,80 +455,123 @@ msgstr "
 msgid "The following items will be permanently deleted: "
 msgstr "Ðie objekti tiks neatgriezeniski izdzçsti: "
 
-#: templates/selectlist/javascript.inc:9
-msgid "The original opener window has been closed. Exiting."
-msgstr ""
-
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
+#: templates/selectlist/empty_dir.inc:2 templates/manager/empty_dir.inc:2
 msgid "There are no files in this folder."
 msgstr "Ðajâ mapç nav failu."
 
-#: templates/clipboard/clipboard.html:15
+#: templates/xppublish/browse.inc:74
 msgid ""
-"To clear items from the clipboard, check the box next to the filename and "
-"click on &quot;Clear&quot;."
+"There are no folders in the current folder; click 'Next' if you want to "
+"upload files to this folder."
 msgstr ""
+"Paðreizçjâ mapç nav apakðmapju; nospiediet 'Tâlâk', ja vçlaties ielâdçs "
+"failus ðajâ mapç."
 
-#: templates/clipboard/clipboard.html:13
-msgid ""
-"To paste items from the clipboard to the current directory, check the box "
-"next to the filename and click on &quot;Paste&quot;."
-msgstr ""
+#: lib/MIME/Viewer/plain.php:30
+msgid "There was an error viewing this file"
+msgstr "Kïûda attçlojot failu"
 
-#: manager.php:367
+#: templates/manager/file_headers.inc:16
 msgid "Type"
 msgstr "Tips"
 
-#: lib/Gollem.php:759 lib/Gollem.php:769
+#: lib/Gollem.php:694 lib/Gollem.php:704
 #, php-format
 msgid "Up to %s"
 msgstr "Atpakaï uz %s"
 
-#: templates/manager/header.inc:594
+#: templates/manager/header.inc:595
 msgid "Upload File(s)"
 msgstr "Ielâdçt failu(s)"
 
+#: templates/xppublish/javascript.inc:63
+#, php-format
+msgid "Upload Files to %s"
+msgstr "Ielâdçt failus %s"
+
+#: xppublish.php:37
+#, php-format
+msgid "Upload to %s"
+msgstr "Ielâdçt %s"
+
+#: xppublish.php:25
+#, php-format
+msgid "Upload your files to %s on %s."
+msgstr "Ielâdçt failus %s uz %s."
+
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
 msgstr "Lietotâja saskarne"
 
-#: config/credentials.php.dist:18
+#: templates/xppublish/login.inc:11 config/credentials.php.dist:18
 msgid "Username"
 msgstr "Lietotâja vârds"
 
-#: templates/manager/header.inc:581
-msgid "View Clipboard"
-msgstr ""
+#: xppublish.php:51
+msgid "Username and Password are incorrect."
+msgstr "Nepareizs lietotâja vârds un parole."
 
-#: login.php:174
+#: login.php:148
 #, php-format
 msgid "Welcome to %s"
 msgstr "Laipni lûdzam %s"
 
-#: templates/manager/header.inc:502
-msgid "Write"
+#: templates/xppublish/browse.inc:10
+msgid ""
+"When you are inside the folder you wish to upload to, click the 'Next' "
+"button to upload files."
 msgstr ""
+"Kad nonâkat mapç, kurâ vçlaties ielâdçt failus, nospiediet 'Tâlâk', lai "
+"sâktu ielâdi."
 
-#: config/prefs.php.dist:92
+#: config/prefs.php.dist:93
 msgid "Yes"
 msgstr "Jâ"
 
-#: permissions.php:28
-msgid "You need at least one backend defined to set permissions."
-msgstr ""
+#: manager.php:52
+msgid "You do not have permission to create this folder."
+msgstr "Jums nav tiesîbu izveidot ðâdu mapi."
+
+#: manager.php:152
+msgid "You do not have permission to cut/copy items."
+msgstr "Jums nav tiesîbu izgriezt/kopçt failus."
+
+#: manager.php:103
+msgid "You do not have permission to delete or change permissions on items."
+msgstr "Jums nav tiesîbu dzçst vai mainît failu pieejas tiesîbas."
 
-#: lib/MIME/Viewer/images.php:35
+#: manager.php:178
+msgid "You do not have permission to paste items."
+msgstr "Jums nav tiesîbu ievilkt failus."
+
+#: manager.php:74
+msgid "You do not have permission to rename items."
+msgstr "Jums nav tiesîbu pârdçvçt failus."
+
+#: manager.php:124
+msgid "You do not have permission to upload items."
+msgstr "Jums nav tiesîbu ielâdçt failus."
+
+#: lib/MIME/Viewer/images.php:41
 msgid "Your browser does not support inline display of this image type"
 msgstr "Jûsu pârlûkprogramma neuztur ðâdu attçla formâtu"
 
-#: templates/menu.inc:6 templates/menu.inc:19
+#: lib/Gollem.php:167 lib/Gollem.php:180
+msgid "[home]"
+msgstr "[galvenais]"
+
+#: lib/Gollem.php:748
 msgid "_Change Server"
 msgstr "Mainît serveri"
 
-#: manager.php:219 selectlist.php:74
+#: lib/Gollem.php:740 lib/Gollem.php:743
+msgid "_Log out"
+msgstr "Iziet"
+
+#: manager.php:219 selectlist.php:72
 msgid "folder"
 msgstr "mape"
 
-#: manager.php:220 selectlist.php:75
+#: manager.php:220 selectlist.php:73
 msgid "symlink"
 msgstr "simboliskâ saite"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index a7cbc6a..15eefc2 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -1,95 +1,114 @@
 # Gollem Dutch translation.
-# Copyright (C) 2001 Jan Kuipers.
-# Jan Kuipers <jrkuipers at lauwerscollege.nl>, 2001.
+# Copyright 2001 Jan Kuipers.
+# Jan Kuipers <jrkuipers at lauwerscollege.nl>, 2001-2007.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem 1.0-cvs\n"
+"Project-Id-Version: Gollem H3 (1.1-cvs)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-13 17:13+0200\n"
-"PO-Revision-Date: 2004-12-14 08:27+0100\n"
+"POT-Creation-Date: 2007-11-21 19:43+0100\n"
+"PO-Revision-Date: 2007-11-22 00:12+0100\n"
 "Last-Translator: Jan Kuipers <jrkuipers at lauwerscollege.nl>\n"
 "Language-Team: Dutch <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: manager.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "\"%s\" renamed to \"%s\""
-msgstr "'%s' hernoemd tot '%s'"
+msgstr "\"%s\" hernoemd tot \"%s\""
+
+#: quota.php:56
+#, php-format
+msgid "%.2fMB / %.2fMB  (%.2f%%)"
+msgstr "%.2fMB / %.2fMB (%.2f%%)"
 
-#: templates/manager/header.inc:576
+#: manager.php:271
 #, php-format
 msgid "%d items"
 msgstr "%d onderdelen"
 
-#: manager.php:356
+#: manager.php:433
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s mappen en %s bestanden (%s Kb)"
 
-#: manager.php:354
+#: manager.php:431
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s mappen en 1 bestand (%s Kb)"
 
-#: templates/login/login.inc:88
+#: login.php:144
 #, php-format
 msgid "%s Login"
 msgstr "%s aanmelden"
 
-#: manager.php:157
+#: edit.php:35
+#, php-format
+msgid "%s successfully saved."
+msgstr "%s met succes opgeslagen."
+
+#: manager.php:167
 #, php-format
 msgid "%s was successfully pasted."
 msgstr "%s met succes geplakt"
 
-#: manager.php:351
+#: manager.php:428
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 map en %s bestanden (%s Kb)"
 
-#: manager.php:349
+#: manager.php:426
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 map en 1 bestand (%s Kb)"
 
-#: templates/manager/header.inc:576
+#: manager.php:271
 msgid "1 item"
 msgstr "1 onderdeel"
 
-#: view.php:31
+#: templates/javascript_defs.php:14
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"Een popup scherm kon niet worden geopend. Misschien heeft u uw browser "
+"ingesteld om popup schermen te blokkeren?"
+
+#: edit.php:33 edit.php:43 view.php:33
 #, php-format
 msgid "Access denied to %s"
 msgstr "Toegang geweigerd op %s"
 
-#: lib/Gollem.php:115 lib/Gollem.php:389 lib/Gollem.php:442 lib/Gollem.php:463
-#: lib/Gollem.php:480
-#, fuzzy, php-format
+#: lib/Gollem.php:109 lib/Gollem.php:383 lib/Gollem.php:445 lib/Gollem.php:466
+#: lib/Gollem.php:483
+#, php-format
 msgid "Access denied to folder \"%s\"."
-msgstr "Toegang geweigerd op %s"
+msgstr "Toegang geweigerd op map \"%s\"."
 
-#: templates/manager/header.inc:601
-msgid "Actions"
-msgstr ""
+#: templates/manager/manager.html:124
+msgid "Actions:"
+msgstr "Bewerkingen:"
 
-#: selectlist.php:100
+#: selectlist.php:99
 msgid "Add"
-msgstr ""
+msgstr "Toevoegen"
 
-#: templates/prefs/columnselect.inc:229
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
 msgstr "Kolom toevoegen"
 
-#: templates/manager/header.inc:493
+#: templates/manager/manager.html:11
 msgid "All"
 msgstr "Alle"
 
-#: templates/manager/header.inc:180
+#: templates/javascript_defs.php:25
 msgid "Are you sure you wish to continue?"
 msgstr "Weet u zeker dat u verder wilt gaan?"
 
-#: templates/manager/header.inc:176
+#: templates/javascript_defs.php:23
 msgid "Are you sure?"
 msgstr "Weet u het zeker?"
 
@@ -101,66 +120,66 @@ msgstr "Toenemend"
 msgid "Ask"
 msgstr "Vragen"
 
-#: templates/manager/header.inc:487
+#: templates/manager/manager.html:5
 msgid "Attributes"
 msgstr "Attributen"
 
-#: templates/prefs/columnselect.inc:225
+#: templates/prefs/columnselect.html:20
 msgid "Available Columns:"
 msgstr "Beschikbare kolommen:"
 
-#: lib/api.php:46
+#: lib/api.php:483
 msgid "Backends"
 msgstr "Backends"
 
 #: templates/clipboard/clipboard.html:11
-#, fuzzy
 msgid "Below is the current contents of your clipboard."
-msgstr "Kan onderdelen niet naar het klembord knippen."
+msgstr "Hieronder staat de huidige inhoud van uw klembord."
 
-#: selectlist.php:102 clipboard.php:35 templates/manager/header.inc:515
-#: templates/manager/header.inc:533 templates/manager/header.inc:546
-#: templates/manager/header.inc:559
+#: selectlist.php:101 manager.php:266 clipboard.php:38
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr "Afbreken"
 
 #: manager.php:72
 #, php-format
-msgid "Cannot chmod %s"
-msgstr "Kan rechten van %s niet wijzigen "
+msgid "Cannot chmod %s: %s"
+msgstr "Kan niet chmod %s: %s"
 
-#: manager.php:132
+#: manager.php:141
 msgid "Cannot copy items onto clipboard."
 msgstr "Kan onderdelen niet naar het klembord kopiëren."
 
-#: manager.php:190
+#: manager.php:200
 #, php-format
 msgid "Cannot create home directory: %s"
-msgstr ""
+msgstr "Kan homedirectory niet maken: %s"
 
-#: manager.php:134
+#: manager.php:143
 msgid "Cannot cut items onto clipboard."
 msgstr "Kan onderdelen niet naar het klembord knippen."
 
-#: manager.php:80
-#, fuzzy, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr "Kan '%s' niet verwijderen: %s"
-
-#: manager.php:155
-#, fuzzy, php-format
+#: manager.php:165
+#, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr "Kan '%s' niet plakken (klembord gewist): %s"
+msgstr "Kan \"%s\" niet plakken (bestand van klembord gewist): %s"
 
-#: templates/manager/header.inc:553 lib/Gollem.php:793
+#: templates/manager/manager.html:70
 msgid "Change Folder"
 msgstr "Wijzig map"
 
-#: selectlist.php:110 templates/menu.inc:8
-#, fuzzy
+#: templates/manager/manager.html:126
+msgid "Change Permissions"
+msgstr "Wijzig rechten"
+
+#: selectlist.php:109 lib/Gollem.php:816
 msgid "Change Server"
 msgstr "Wijzig server"
 
+#: lib/Gollem.php:773
+msgid "Change _Folder"
+msgstr "Wijzig _map"
+
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
 msgstr "Wijzig instellingen voor bewerken van bestanden en mappen."
@@ -169,65 +188,69 @@ msgstr "Wijzig instellingen voor bewerken van bestanden en mappen."
 msgid "Change your file sorting options."
 msgstr "Wijzig instellingen voor sorteren van bestanden."
 
-#: manager.php:438
+#: lib/Gollem.php:791
+msgid "Check Quota"
+msgstr "Controleer quota"
+
+#: manager.php:524
 msgid "Check _All/None"
 msgstr "Controleer _Alles/Geen"
 
-#: templates/manager/header.inc:609
-msgid "Chmod Items"
-msgstr "Wijzig rechten"
-
 #: manager.php:70
 msgid "Chmod done: "
 msgstr "Rechten gewijzigd: "
 
-#: templates/prefs/columnselect.inc:218
+#: templates/prefs/columnselect.html:12
 msgid "Choose the columns to display in the file manager."
 msgstr ""
 "Kies de kolommen die weergegeven dienen te worden in de bestandsmanager."
 
-#: clipboard.php:36
+#: clipboard.php:39
 msgid "Clear"
-msgstr ""
+msgstr "Helder"
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
-msgstr ""
+msgstr "Klembord"
 
-#: templates/login/login.inc:111
+#: quota.php:32
+msgid "Close"
+msgstr "Sluiten"
+
+#: login.php:258
 #, php-format
 msgid "Connect to: %s"
 msgstr "Verbinden met: %s"
 
-#: clipboard.php:39
+#: clipboard.php:42 templates/manager/manager.html:129
 msgid "Copy"
-msgstr ""
+msgstr "Kopiëren"
 
-#: templates/manager/header.inc:611
-msgid "Copy Items"
-msgstr "Onderdelen kopiëren"
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Kon het gecompileerde sjabloonbestand '%s' niet opslaan."
 
-#: templates/manager/header.inc:540 lib/Gollem.php:790
+#: templates/manager/manager.html:58
 msgid "Create Folder"
 msgstr "Maak map"
 
-#: permissions.php:48
+#: permissions.php:47
 #, php-format
-msgid "Created default permissions for backend \"%s\"."
+msgid ""
+"Created empty permissions for \"%s\". You must explicitly grant access to "
+"this backend now."
 msgstr ""
+"Blanco rechten voor \"%s\" aangemaakt. U dient nu expliciete rechten aan dit "
+"backend to te kennen."
 
-#: clipboard.php:40
-#, php-format
-msgid "Current directory: %s"
-msgstr ""
+#: templates/clipboard/clipboard.html:17
+msgid "Current directory:"
+msgstr "Huidige directory:"
 
-#: clipboard.php:38
+#: clipboard.php:41 templates/manager/manager.html:130
 msgid "Cut"
-msgstr ""
-
-#: templates/manager/header.inc:610
-msgid "Cut Items"
-msgstr "Onderdelen knippen"
+msgstr "Knippen"
 
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
@@ -237,9 +260,9 @@ msgstr "Standaard sorteercriteria:"
 msgid "Default sorting direction:"
 msgstr "Standaard sorteervolgorde:"
 
-#: templates/manager/header.inc:606
-msgid "Delete Items"
-msgstr "Onderdelen verwijderen"
+#: templates/manager/manager.html:133
+msgid "Delete"
+msgstr "Verwijderen"
 
 #: config/prefs.php.dist:95
 msgid "Delete folders recursively?"
@@ -249,31 +272,43 @@ msgstr "Mappen recursief verwijderen?"
 msgid "Descending"
 msgstr "Afnemend"
 
-#: selectlist.php:101
+#: selectlist.php:100
 msgid "Done"
 msgstr "Uitgevoerd"
 
-#: manager.php:218
+#: manager.php:226
 msgid "Download"
 msgstr "Downloaden"
 
-#: manager.php:323
-#, fuzzy, php-format
+#: manager.php:400
+#, php-format
 msgid "Download %s"
-msgstr "Downloaden"
+msgstr "%s downloaden"
+
+#: templates/quota/quota.html:7
+msgid "ERROR:"
+msgstr "FOUT:"
+
+#: manager.php:225
+msgid "Edit"
+msgstr "Bewerken"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "%s bewerken"
 
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "E-mail"
 
-#: templates/manager/header.inc:508
+#: templates/manager/manager.html:26
 msgid "Execute"
 msgstr "Uitvoeren"
 
-#: templates/manager/header.inc:464 templates/manager/header.inc:589
-#, fuzzy
+#: templates/javascript_defs.php:27 templates/manager/manager.html:203
 msgid "File"
-msgstr "Bestand 1:"
+msgstr "Bestand"
 
 #: config/prefs.php.dist:13
 msgid "File Display"
@@ -295,82 +330,92 @@ msgstr "Bestandsgrootte"
 msgid "File Type"
 msgstr "Bestandstype"
 
-#: manager.php:76
+#: manager.php:87
 msgid "File deleted: "
 msgstr "Bestand verwijderd: "
 
-#: manager.php:101
+#: manager.php:109
 #, php-format
 msgid "File received: %s"
 msgstr "Bestand ontvangen: %s"
 
-#: manager.php:78
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr "Bestanden dienen binnen een VFS backend geschreven te worden."
+
+#: manager.php:80
 msgid "Folder removed: "
 msgstr "Map verwijderd: "
 
-#: templates/manager/header.inc:555
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr "Mappen dienen binnen een VFS backend gemaakt te worden."
+
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "Ga naar:"
 
-#: permissions.php:25
+#: permissions.php:21
 msgid "Gollem Backend Permissions Administration"
-msgstr ""
+msgstr "Gollem backend Rechtenbeheer"
 
-#: manager.php:413 templates/manager/header.inc:492
+#: manager.php:504 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Groep"
 
-#: lib/Gollem.php:786
-msgid "Home"
-msgstr "Home"
-
 #: manager.php:56
 msgid "Incorrect number of items."
 msgstr "Foutief aantal onderdelen."
 
-#: manager.php:125
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Ongeldig backend aangevraagd: %s"
+
+#: manager.php:134
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "Onderdeel gekopieerd naar klembord: %s"
 
-#: manager.php:127
+#: manager.php:136
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr "Onderdeel geknipt naar klembord: %s"
 
-#: templates/login/login.inc:136
+#: templates/login/login.html:68
 msgid "Language"
-msgstr ""
+msgstr "Taal"
 
 #: config/prefs.php.dist:81
 msgid "List folders first?"
 msgstr "Mappen eerst weergeven in lijst?"
 
-#: templates/login/login.inc:145
-msgid "Log in"
+#: login.php:307
+msgid "Login"
 msgstr "Aanmelden"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
-msgstr ""
+msgstr "Menulijst"
 
-#: manager.php:387
+#: manager.php:474
 msgid "Modified"
 msgstr "Gewijzigd"
 
-#: templates/prefs/columnselect.inc:239
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
 msgstr "Naar links"
 
-#: templates/prefs/columnselect.inc:241
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
 msgstr "Naar rechts"
 
-#: manager.php:374
+#: manager.php:452
 msgid "Name"
 msgstr "Naam"
 
-#: templates/manager/header.inc:529 templates/manager/header.inc:542
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "Naam:"
 
@@ -382,12 +427,15 @@ msgstr "Nieuwe map gemaakt: "
 msgid "No"
 msgstr "Nee"
 
-#: templates/manager/header.inc:532 templates/manager/header.inc:545
-#: templates/manager/header.inc:558
+#: templates/quota/quota.html:12
+msgid "No quota found."
+msgstr "Geen quota gevonden."
+
+#: manager.php:267
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:407 templates/manager/header.inc:491
+#: manager.php:497 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "Eigenaar"
 
@@ -395,83 +443,94 @@ msgstr "Eigenaar"
 msgid "Password"
 msgstr "Wachtwoord"
 
-#: clipboard.php:37
-#, fuzzy
+#: clipboard.php:40
 msgid "Paste"
-msgstr "Onderdelen plakken"
+msgstr "Plakken"
 
-#: manager.php:401
+#: manager.php:490
 msgid "Permission"
 msgstr "Recht"
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "Toegang geweigerd aan %s: %s"
 
-#: manager.php:198
-#, fuzzy, php-format
+#: manager.php:208
+#, php-format
 msgid "Permission denied to folder \"%s\": %s"
-msgstr "Toegang geweigerd aan %s: %s"
+msgstr "Toegang geweigerd op map \"%s\": %s"
 
-#: lib/Gollem.php:798
-#, fuzzy
-msgid "Permissions"
-msgstr "Recht"
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
+msgstr "Toegang geweigerd op dit backend."
 
-#: templates/login/login.inc:49
+#: templates/javascript_defs.php:18
 msgid "Please provide your password."
 msgstr "Geef uw wachtwoord, a.u.b."
 
-#: templates/login/login.inc:44
+#: templates/javascript_defs.php:17
 msgid "Please provide your username."
 msgstr "Geef uw gebruikersnaam, a.u.b."
 
-#: templates/prefs/columnselect.inc:211
+#: templates/prefs/columnselect.html:5
 msgid "Please select a backend:"
 msgstr "Selecteer een backend, a.u.b.:"
 
-#: templates/manager/header.inc:109
+#: templates/javascript_defs.php:21
 msgid "Please select an item before this action."
 msgstr "Selecteer een onderdeel voor deze bewerking, a.u.b."
 
-#: templates/manager/header.inc:435
+#: templates/javascript_defs.php:26
 msgid "Please specify at least one file to upload."
 msgstr "Specificeer tenminste één bestand voor upload, a.u.b."
 
-#: templates/manager/header.inc:496
+#: quota.php:19 templates/quota/quota.html:2
+msgid "Quota Display"
+msgstr "Quotaweergave"
+
+#: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Lezen"
 
-#: templates/manager/header.inc:579
+#: manager.php:273
 msgid "Refresh"
 msgstr "Verversen"
 
-#: templates/prefs/columnselect.inc:231
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
 msgstr "Kolom verwijderen"
 
-#: templates/manager/header.inc:527
+#: templates/manager/manager.html:44 templates/manager/manager.html:136
 msgid "Rename"
 msgstr "Hernoemen"
 
-#: templates/manager/header.inc:603
-msgid "Rename Items"
-msgstr "Hernoem onderdelen"
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
+msgstr "Hernoemen over backends wordt niet ondersteund."
+
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr "Hernoemen van backends is niet toegestaan."
+
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Herstellen"
 
-#: lib/Gollem.php:754 lib/Gollem.php:759
+#: lib/Gollem.php:730 lib/Gollem.php:735
 msgid "Root"
 msgstr "Root"
 
-#: templates/manager/header.inc:514
+#: manager.php:265 templates/edit/edit.inc:11
 msgid "Save"
 msgstr "Opslaan"
 
-#: templates/prefs/columnselect.inc:235
+#: templates/prefs/columnselect.html:30
 msgid "Selected Columns:"
 msgstr "Geselecteerde kolommen:"
 
-#: templates/login/login.inc:101
+#: templates/login/login.html:32
 msgid "Server"
 msgstr "Server"
 
@@ -483,27 +542,31 @@ msgstr "Instellingen"
 msgid "Show dotfiles?"
 msgstr "Verborgen bestanden weergeven?"
 
-#: manager.php:394
+#: manager.php:482
 msgid "Size"
 msgstr "Grootte"
 
-#: manager.php:420
-msgid "Sort Direction"
-msgstr "Sorteervolgorde"
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
+msgstr "De applicatiemap kan niet worden verwijderd."
 
-#: templates/manager/header.inc:180
-msgid "The following item(s) are folders: "
-msgstr "De volgende onderdelen zijn mappen: "
+#: templates/javascript_defs.php:24
+msgid "The following item(s) are folders:"
+msgstr "De volgende onderdelen zijn mappen:"
 
-#: templates/manager/header.inc:176
-msgid "The following items will be permanently deleted: "
-msgstr "De volgende onderdelen zullen definitief worden verwijderd: "
+#: templates/javascript_defs.php:22
+msgid "The following items will be permanently deleted:"
+msgstr "De volgende onderdelen zullen definitief worden verwijderd:"
 
-#: templates/selectlist/javascript.inc:9
+#: templates/javascript_defs.php:30
 msgid "The original opener window has been closed. Exiting."
-msgstr ""
+msgstr "Het originele opener scherm is gesloten. Afsluiten."
+
+#: login.php:151
+msgid "There are no backends available for the current user."
+msgstr "Er zijn backends beschikbaar voor de huidige gebruiker."
 
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
+#: selectlist.php:199 templates/manager/manager.html:147
 msgid "There are no files in this folder."
 msgstr "Er zijn geen bestanden in deze map."
 
@@ -512,23 +575,47 @@ msgid ""
 "To clear items from the clipboard, check the box next to the filename and "
 "click on &quot;Clear&quot;."
 msgstr ""
+"Om onderdelen van het klembord te verwijderen, vink het vakje naast de "
+"bestandsnaam aan en klik op &quot;Verwijderen&quot;."
 
 #: templates/clipboard/clipboard.html:13
 msgid ""
 "To paste items from the clipboard to the current directory, check the box "
 "next to the filename and click on &quot;Paste&quot;."
 msgstr ""
+"Om onderdelen van het klembord naar de huidige directory te plakken, vink "
+"het vakje naast de bestandsnaam en klik op &quot;Plakken&quot;."
 
-#: manager.php:367
+#: manager.php:444
 msgid "Type"
 msgstr "Type"
 
-#: lib/Gollem.php:759 lib/Gollem.php:769
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr "Niet in staat om Gollem sessie te maken"
+
+#: permissions.php:42
+#, php-format
+msgid "Unable to create backend permission: %s"
+msgstr "Niet in staat om backendrecht te maken: %s"
+
+#: manager.php:85
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "Niet in staat om bestand %s te verwijderen: %s"
+
+#: manager.php:78
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "Niet in staat om map %s te verwijderen: %s"
+
+#: lib/Gollem.php:735 lib/Gollem.php:745
 #, php-format
 msgid "Up to %s"
 msgstr "Tot aan %s"
 
-#: templates/manager/header.inc:594
+#: manager.php:286
 msgid "Upload File(s)"
 msgstr "Upload bestand(en)"
 
@@ -540,16 +627,16 @@ msgstr "Gebruikersinterface"
 msgid "Username"
 msgstr "Gebruikersnaam"
 
-#: templates/manager/header.inc:581
+#: manager.php:281
 msgid "View Clipboard"
-msgstr ""
+msgstr "Klembord weergeven"
 
-#: login.php:174
+#: login.php:201
 #, php-format
 msgid "Welcome to %s"
 msgstr "Welkom bij %s"
 
-#: templates/manager/header.inc:502
+#: templates/manager/manager.html:20
 msgid "Write"
 msgstr "Schrijven"
 
@@ -557,9 +644,11 @@ msgstr "Schrijven"
 msgid "Yes"
 msgstr "Ja"
 
-#: permissions.php:28
+#: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
 msgstr ""
+"U dient tenminste één backend gedefinieerd te hebben om rechten in te kunnen "
+"stellen."
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
@@ -567,14 +656,26 @@ msgstr ""
 "Het inline weergeven van dit afbeeldingstype, wordt niet door uw browser "
 "ondersteund"
 
-#: templates/menu.inc:6 templates/menu.inc:19
+#: lib/Gollem.php:814 lib/Gollem.php:817
 msgid "_Change Server"
 msgstr "Wijzig server"
 
-#: manager.php:219 selectlist.php:74
+#: lib/Gollem.php:770
+msgid "_Create Folder"
+msgstr "_Maak map"
+
+#: lib/Gollem.php:766
+msgid "_My Home"
+msgstr "_Mijn home"
+
+#: lib/Gollem.php:780
+msgid "_Permissions"
+msgstr "_Rechten"
+
+#: selectlist.php:75 manager.php:227
 msgid "folder"
 msgstr "map"
 
-#: manager.php:220 selectlist.php:75
+#: selectlist.php:76 manager.php:228
 msgid "symlink"
 msgstr "symlink"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 630fc25..98bb928 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -1,13 +1,12 @@
 # Gollem Norwegian Nynorsk translation
-# Copyright (C) 2002 Per-Stian Vatne
+# Copyright 2002 Per-Stian Vatne
 # This file is distributed under the same license as the Gollem package.
 # Per-Stian Vatne <psv at orsta.org>, 2002.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Gollem 0.0.1-cvs\n"
-"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-13 17:13+0200\n"
+"POT-Creation-Date: 2002-06-08 22:16+0200\n"
 "PO-Revision-Date: 2002-06-08 22:23+0100\n"
 "Last-Translator: Per-Stian Vatne <psv at orsta.org>\n"
 "Language-Team: Norwegian Nynorsk <nynorsk at orsta.org>\n"
@@ -15,581 +14,321 @@ msgstr ""
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: manager.php:52
-#, fuzzy, php-format
-msgid "\"%s\" renamed to \"%s\""
-msgstr "'%s' endra namn til '%s'"
+msgid " to: "
+msgstr " til:"
 
-#: templates/manager/header.inc:576
-#, fuzzy, php-format
-msgid "%d items"
+#, c-format
+msgid "%d items in %s"
 msgstr "%d element i %s"
 
-#: manager.php:356
-#, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr ""
-
-#: manager.php:354
-#, php-format
-msgid "%s Folders and 1 File (%s Kb)"
-msgstr ""
-
-#: templates/login/login.inc:88
-#, fuzzy, php-format
-msgid "%s Login"
-msgstr "Logg inn"
-
-#: manager.php:157
-#, php-format
-msgid "%s was successfully pasted."
-msgstr ""
+#, c-format
+msgid "%s Standard"
+msgstr "%s Standard"
 
-#: manager.php:351
-#, php-format
-msgid "1 Folder and %s Files (%s Kb)"
-msgstr ""
-
-#: manager.php:349
-#, php-format
-msgid "1 Folder and 1 File (%s Kb)"
-msgstr ""
-
-#: templates/manager/header.inc:576
-msgid "1 item"
-msgstr ""
-
-#: view.php:31
-#, fuzzy, php-format
-msgid "Access denied to %s"
+#, c-format
+msgid "'%s' renamed to '%s'"
 msgstr "'%s' endra namn til '%s'"
 
-#: lib/Gollem.php:115 lib/Gollem.php:389 lib/Gollem.php:442 lib/Gollem.php:463
-#: lib/Gollem.php:480
-#, php-format
-msgid "Access denied to folder \"%s\"."
-msgstr ""
-
-#: templates/manager/header.inc:601
-#, fuzzy
-msgid "Actions"
-msgstr "Alternativ"
-
-#: selectlist.php:100
-msgid "Add"
+msgid "<b>Note:</b> These settings won't take effect until your next login."
 msgstr ""
+"<b>Merk:</b> Desse endringane vil ikkje setjast i verk før neste innlogging."
 
-#: templates/prefs/columnselect.inc:229
-msgid "Add column"
-msgstr ""
-
-#: templates/manager/header.inc:493
-msgid "All"
-msgstr ""
-
-#: templates/manager/header.inc:180
-msgid "Are you sure you wish to continue?"
-msgstr ""
-
-#: templates/manager/header.inc:176
 msgid "Are you sure?"
 msgstr "Er du sikker?"
 
-#: config/prefs.php.dist:69
 msgid "Ascending"
 msgstr "Stigande"
 
-#: config/prefs.php.dist:93
-msgid "Ask"
-msgstr ""
+msgid "Barbie"
+msgstr "Barbie"
 
-#: templates/manager/header.inc:487
-msgid "Attributes"
-msgstr ""
-
-#: templates/prefs/columnselect.inc:225
-msgid "Available Columns:"
-msgstr ""
-
-#: lib/api.php:46
-msgid "Backends"
-msgstr ""
+msgid "Brown"
+msgstr "Brun"
 
-#: templates/clipboard/clipboard.html:11
-msgid "Below is the current contents of your clipboard."
-msgstr ""
+msgid "Burnt Orange"
+msgstr "Brent oransje"
 
-#: selectlist.php:102 clipboard.php:35 templates/manager/header.inc:515
-#: templates/manager/header.inc:533 templates/manager/header.inc:546
-#: templates/manager/header.inc:559
-msgid "Cancel"
-msgstr ""
+msgid "Camouflage"
+msgstr "Kamuflasje"
 
-#: manager.php:72
-#, php-format
+#, c-format
 msgid "Cannot chmod %s"
 msgstr "Kan ikkje chmod %s"
 
-#: manager.php:132
-msgid "Cannot copy items onto clipboard."
-msgstr ""
-
-#: manager.php:190
-#, fuzzy, php-format
-msgid "Cannot create home directory: %s"
-msgstr "Ingen slik katalog:"
-
-#: manager.php:134
-msgid "Cannot cut items onto clipboard."
-msgstr ""
-
-#: manager.php:80
-#, fuzzy, php-format
-msgid "Cannot delete \"%s\": %s"
+#, c-format
+msgid "Cannot delete '%s'"
 msgstr "Kan ikkje slette '%s'"
 
-#: manager.php:155
-#, php-format
-msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr ""
-
-#: templates/manager/header.inc:553 lib/Gollem.php:793
-#, fuzzy
-msgid "Change Folder"
-msgstr "Opprett mappe"
-
-#: selectlist.php:110 templates/menu.inc:8
-#, fuzzy
-msgid "Change Server"
-msgstr "Tenar"
-
-#: config/prefs.php.dist:21
-#, fuzzy
-msgid "Change file and folder handling settings."
-msgstr "Endre alternativ for sortering av filer"
-
-#: config/prefs.php.dist:14
 msgid "Change your file sorting options."
 msgstr "Endre alternativ for sortering av filer"
 
-#: manager.php:438
-msgid "Check _All/None"
-msgstr ""
+msgid "Checkbox"
+msgstr "Avkryssingboks"
+
+msgid "Cherry"
+msgstr "Kirsebær"
 
-#: templates/manager/header.inc:609
 msgid "Chmod Items"
 msgstr "Chmod-element"
 
-#: manager.php:70
 msgid "Chmod done: "
 msgstr "Chmod-ferdig:"
 
-#: templates/prefs/columnselect.inc:218
-msgid "Choose the columns to display in the file manager."
-msgstr ""
-
-#: clipboard.php:36
-msgid "Clear"
-msgstr ""
-
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr ""
-
-#: templates/login/login.inc:111
-#, fuzzy, php-format
-msgid "Connect to: %s"
-msgstr "Kan ikkje chmod %s"
-
-#: clipboard.php:39
-msgid "Copy"
-msgstr ""
-
-#: templates/manager/header.inc:611
-#, fuzzy
-msgid "Copy Items"
-msgstr "Chmod-element"
+msgid "Choose Action:"
+msgstr "Vel handling:"
 
-#: templates/manager/header.inc:540 lib/Gollem.php:790
 msgid "Create Folder"
 msgstr "Opprett mappe"
 
-#: permissions.php:48
-#, php-format
-msgid "Created default permissions for backend \"%s\"."
-msgstr ""
-
-#: clipboard.php:40
-#, fuzzy, php-format
-msgid "Current directory: %s"
-msgstr "Ingen slik katalog:"
-
-#: clipboard.php:38
-msgid "Cut"
-msgstr ""
-
-#: templates/manager/header.inc:610
-#, fuzzy
-msgid "Cut Items"
-msgstr "Chmod-element"
-
-#: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
 msgstr "Standard sorteringskriterium:"
 
-#: config/prefs.php.dist:72
 msgid "Default sorting direction:"
 msgstr "Standard sorteringsrekkefølgje:"
 
-#: templates/manager/header.inc:606
 msgid "Delete Items"
 msgstr "Slett element"
 
-#: config/prefs.php.dist:95
-msgid "Delete folders recursively?"
-msgstr ""
-
-#: config/prefs.php.dist:70
 msgid "Descending"
 msgstr "Synkande"
 
-#: selectlist.php:101
-msgid "Done"
-msgstr ""
+msgid "Directory removed: "
+msgstr "Katalog fjerna:"
 
-#: manager.php:218
-msgid "Download"
-msgstr ""
+msgid "Display Options"
+msgstr "Visingsalternativ"
 
-#: manager.php:323
-#, php-format
-msgid "Download %s"
+msgid ""
+"Either you have logged in incorrectly or your login has expired. Please "
+"login again."
 msgstr ""
+"Enten logga du inn feil, eller så har økta di gått ut på tid. Logg inn på "
+"nytt."
 
-#: config/credentials.php.dist:28
-msgid "Email"
-msgstr ""
+msgid "Error creating new folder: "
+msgstr "Feil ved oppretting av ny mappe:"
 
-#: templates/manager/header.inc:508
-msgid "Execute"
-msgstr ""
+#, c-format
+msgid "Error renaming: '%s'"
+msgstr "Kunne ikkje endre namn: '%s'"
 
-#: templates/manager/header.inc:464 templates/manager/header.inc:589
-#, fuzzy
-msgid "File"
-msgstr "Filnamn"
+msgid "Error uploading file: "
+msgstr "Kunne ikkje laste opp fil:"
 
-#: config/prefs.php.dist:13
-msgid "File Display"
-msgstr ""
-
-#: config/prefs.php.dist:56
 msgid "File Modification Time"
 msgstr "Fil sist endra"
 
-#: config/prefs.php.dist:55
 msgid "File Name"
 msgstr "Filnamn"
 
-#: config/prefs.php.dist:57
 msgid "File Size"
 msgstr "Filstorleik"
 
-#: config/prefs.php.dist:54
 msgid "File Type"
 msgstr "Filtype"
 
-#: manager.php:76
 msgid "File deleted: "
 msgstr "Fil sletta:"
 
-#: manager.php:101
-#, fuzzy, php-format
-msgid "File received: %s"
+msgid "File received: "
 msgstr "Fil motteken:"
 
-#: manager.php:78
-#, fuzzy
-msgid "Folder removed: "
-msgstr "Fil motteken:"
+msgid "Gollem is not properly configured"
+msgstr "Gollem er ikkje ordentleg konfigurert"
 
-#: templates/manager/header.inc:555
-#, fuzzy
-msgid "Go to:"
-msgstr " til:"
+msgid "Green"
+msgstr "Grøn"
 
-#: permissions.php:25
-msgid "Gollem Backend Permissions Administration"
-msgstr ""
+msgid "Grey"
+msgstr "Grå"
 
-#: manager.php:413 templates/manager/header.inc:492
 msgid "Group"
 msgstr "Gruppe"
 
-#: lib/Gollem.php:786
+msgid "Help"
+msgstr "Hjelp"
+
 msgid "Home"
 msgstr "Heim"
 
-#: manager.php:56
 msgid "Incorrect number of items."
 msgstr "Feil tal på element."
 
-#: manager.php:125
-#, php-format
-msgid "Item copied to clipboard: %s"
-msgstr ""
-
-#: manager.php:127
-#, php-format
-msgid "Item cut to clipboard: %s"
-msgstr ""
-
-#: templates/login/login.inc:136
 msgid "Language"
 msgstr "Språk"
 
-#: config/prefs.php.dist:81
-msgid "List folders first?"
-msgstr ""
+msgid "Light Blue"
+msgstr "Lys blå"
 
-#: templates/login/login.inc:145
 msgid "Log in"
 msgstr "Logg inn"
 
-#: lib/Block/tree_menu.php:3
-msgid "Menu List"
+msgid ""
+"Login failed for some reason. Most likely your username or password was "
+"entered incorrectly."
 msgstr ""
+"Kunne av ein eller annan grunn ikkje logge inn. Sannsynlegvis er brukarnamn "
+"eller passord tasta inn feil."
+
+msgid "Logout"
+msgstr "Logg ut"
 
-#: manager.php:387
 msgid "Modified"
 msgstr "Endra"
 
-#: templates/prefs/columnselect.inc:239
-msgid "Move left"
-msgstr ""
-
-#: templates/prefs/columnselect.inc:241
-msgid "Move right"
-msgstr ""
-
-#: manager.php:374
 msgid "Name"
 msgstr "Namn"
 
-#: templates/manager/header.inc:529 templates/manager/header.inc:542
-#, fuzzy
-msgid "Name:"
-msgstr "Namn"
-
-#: manager.php:35
 msgid "New folder created: "
 msgstr "Ny mappe oppretta:"
 
-#: config/prefs.php.dist:91
-msgid "No"
-msgstr ""
+msgid "No such directory: "
+msgstr "Ingen slik katalog:"
 
-#: templates/manager/header.inc:532 templates/manager/header.inc:545
-#: templates/manager/header.inc:558
-msgid "OK"
-msgstr ""
+msgid "Options"
+msgstr "Alternativ"
+
+msgid "Orange"
+msgstr "Oransje"
+
+msgid "Other Options"
+msgstr "Andre alternativ"
 
-#: manager.php:407 templates/manager/header.inc:491
 msgid "Owner"
 msgstr "Eigar"
 
-#: config/credentials.php.dist:23
 msgid "Password"
 msgstr "Passord"
 
-#: clipboard.php:37
-msgid "Paste"
-msgstr ""
-
-#: manager.php:401
 msgid "Permission"
 msgstr "Tilgang"
 
-#: selectlist.php:63
-#, php-format
-msgid "Permission denied to %s: %s"
-msgstr ""
+msgid "Please enter the mode in numeric format:"
+msgstr "Skriv inn modus i numerisk format:"
 
-#: manager.php:198
-#, php-format
-msgid "Permission denied to folder \"%s\": %s"
-msgstr ""
+msgid "Please enter the name of the new folder:"
+msgstr "Skriv inn namnet på den nye mappa:"
 
-#: lib/Gollem.php:798
-#, fuzzy
-msgid "Permissions"
-msgstr "Tilgang"
-
-#: templates/login/login.inc:49
 msgid "Please provide your password."
 msgstr "Skriv inn ditt passord."
 
-#: templates/login/login.inc:44
 msgid "Please provide your username."
 msgstr "Skriv inn ditt brukarnamn."
 
-#: templates/prefs/columnselect.inc:211
-#, fuzzy
-msgid "Please select a backend:"
-msgstr "Vel eit element før denne handlinga."
-
-#: templates/manager/header.inc:109
 msgid "Please select an item before this action."
 msgstr "Vel eit element før denne handlinga."
 
-#: templates/manager/header.inc:435
-#, fuzzy
-msgid "Please specify at least one file to upload."
+msgid "Please specify a file to upload."
 msgstr "Spesifiser ei fil for opplasting."
 
-#: templates/manager/header.inc:496
-msgid "Read"
-msgstr ""
+msgid "Problem?"
+msgstr "Problem?"
 
-#: templates/manager/header.inc:579
 msgid "Refresh"
 msgstr "Frisk opp"
 
-#: templates/prefs/columnselect.inc:231
-msgid "Remove column"
-msgstr ""
-
-#: templates/manager/header.inc:527
-#, fuzzy
-msgid "Rename"
+msgid "Rename "
 msgstr "Gi nytt namn"
 
-#: templates/manager/header.inc:603
 msgid "Rename Items"
 msgstr "Gi nytt namn til elementa"
 
-#: lib/Gollem.php:754 lib/Gollem.php:759
-#, fuzzy
-msgid "Root"
-msgstr "Logg ut"
-
-#: templates/manager/header.inc:514
-#, fuzzy
-msgid "Save"
-msgstr "Tenar"
+msgid "Select your color scheme."
+msgstr "Vel fargeskjema."
 
-#: templates/prefs/columnselect.inc:235
-msgid "Selected Columns:"
-msgstr ""
+msgid "Select your preferred language:"
+msgstr "Vel ønska språk:"
 
-#: templates/login/login.inc:101
 msgid "Server"
 msgstr "Tenar"
 
-#: config/prefs.php.dist:20
-msgid "Settings"
-msgstr ""
+msgid "Set the language that menu items, explanations, and help are in."
+msgstr "Vel språk for menyar, forklaringar og hjelp."
 
-#: config/prefs.php.dist:30
-msgid "Show dotfiles?"
-msgstr ""
-
-#: manager.php:394
 msgid "Size"
 msgstr "Storleik"
 
-#: manager.php:420
+msgid "Some of Gollem's configuration files are missing:"
+msgstr "Nokre av Gollem sine konfigurasjonsfiler manglar:"
+
 msgid "Sort Direction"
 msgstr "Sorteringsrekkefølgje"
 
-#: templates/manager/header.inc:180
-#, fuzzy
-msgid "The following item(s) are folders: "
-msgstr "Følgjande element vil bli sletta permanent:"
+msgid "Sun"
+msgstr "Sol"
 
-#: templates/manager/header.inc:176
-#, fuzzy
-msgid "The following items will be permanently deleted: "
+msgid "The following items will be permenantly deleted: "
 msgstr "Følgjande element vil bli sletta permanent:"
 
-#: templates/selectlist/javascript.inc:9
-msgid "The original opener window has been closed. Exiting."
-msgstr ""
-
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
-#, fuzzy
-msgid "There are no files in this folder."
+msgid "There are no files in this directory."
 msgstr "Ingen filer i denne katalogen."
 
-#: templates/clipboard/clipboard.html:15
 msgid ""
-"To clear items from the clipboard, check the box next to the filename and "
-"click on &quot;Clear&quot;."
+"This file controls the default preferences for Gollem, and also controls "
+"which preferences users can alter."
+msgstr ""
+"Denne fila kontrollerer standardinnstillingane for Gollem, og kontrollerer "
+"også kva innstillingar brukarane kan endre."
+
+msgid ""
+"This file controls the default settings for Gollem, and also defines the "
+"list of available servers if you are using the server list."
 msgstr ""
+"Denne fila kontrollerer standardvala for Gollem, og definerer også lista "
+"over tilgjengelege tenarar dersom du brukar tenarlista."
 
-#: templates/clipboard/clipboard.html:13
 msgid ""
-"To paste items from the clipboard to the current directory, check the box "
-"next to the filename and click on &quot;Paste&quot;."
+"This is the main Gollem configuration file. It contains paths and options "
+"for the Gollem scripts."
 msgstr ""
+"Dette er hovedkonfigurasjonsfila for Gollem. Den inneheld katalognamn og "
+"alternativ for Gollem-skripta."
 
-#: manager.php:367
 msgid "Type"
 msgstr "Type"
 
-#: lib/Gollem.php:759 lib/Gollem.php:769
-#, fuzzy, php-format
-msgid "Up to %s"
-msgstr " til:"
+msgid "Up to parent"
+msgstr "Opp til overordna"
 
-#: templates/manager/header.inc:594
-#, fuzzy
-msgid "Upload File(s)"
+msgid "Upload File"
 msgstr "Last opp fil"
 
-#: config/prefs.php.dist:12 config/prefs.php.dist:19
-#, fuzzy
-msgid "User Interface"
-msgstr "Brukarnamn"
+msgid "User Options"
+msgstr "Brukarval"
 
-#: config/credentials.php.dist:18
 msgid "Username"
 msgstr "Brukarnamn"
 
-#: templates/manager/header.inc:581
-msgid "View Clipboard"
-msgstr ""
+#, c-format
+msgid "Warning: %s requires Javascript to perform certain functions."
+msgstr "Åtvaring: %s krever Javascript for å utføre enkelte funksjonar."
 
-#: login.php:174
-#, php-format
+#, c-format
 msgid "Welcome to %s"
 msgstr "Velkomen til %s"
 
-#: templates/manager/header.inc:502
-msgid "Write"
-msgstr ""
+msgid "Welcome"
+msgstr "Velkomen"
 
-#: config/prefs.php.dist:92
-msgid "Yes"
+#, c-format
+msgid ""
+"You have been logged out of %s. Thank you for using the system. If you wish "
+"to log in again, please use the form below."
 msgstr ""
+"Du er logga ut av %s. Takk for at du brukar dette systemet. Om du ønskjer å "
+"logge inn igjen, bruk skjemaet under."
 
-#: permissions.php:28
-msgid "You need at least one backend defined to set permissions."
-msgstr ""
+msgid "Your Information"
+msgstr "Din informasjon"
 
-#: lib/MIME/Viewer/images.php:35
-msgid "Your browser does not support inline display of this image type"
-msgstr ""
+msgid "Your preferred FTP server:"
+msgstr "Føretrekt FTP-tenar:"
 
-#: templates/menu.inc:6 templates/menu.inc:19
-#, fuzzy
-msgid "_Change Server"
-msgstr "Tenar"
+msgid "[home]"
+msgstr "[heim]"
 
-#: manager.php:219 selectlist.php:74
 msgid "folder"
 msgstr "mappe"
 
-#: manager.php:220 selectlist.php:75
 msgid "symlink"
 msgstr "symlink"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 1abd950..fa199f2 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -1,265 +1,316 @@
-# Polish translations for Gollem.
-# Copyright (C) 2005 Krzysztof Kozlowski <kozik1 at o2.pl>
-# This file is distributed under the same license as the horde package.
+# Polish translations for Gollem package
+# Polskie tlumaczenia dla pakietu Gollem.
+# Copyright 2007-2009 The Horde Project
+# This file is distributed under the same license as the Gollem package.
+# Automatically generated, 2007.
 # Krzysztof Kozlowski <kozik1 at o2.pl>, 2005.
+# Piotr Tarnowski <drfugazi at drfugazi.eu.org>, 2007.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem 1.0\n"
+"Project-Id-Version: Gollem H3 (1.1-cvs)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-11-24 20:08+0100\n"
-"PO-Revision-Date: 2005-11-24 20:13+0100\n"
-"Last-Translator: Krzysztof Kozlowski <kozik1 at o2.pl>\n"
-"Language-Team: i18n at lists.horde.org\n"
+"POT-Creation-Date: 2007-06-27 12:00+0200\n"
+"PO-Revision-Date: 2007-03-31 09:57+0200\n"
+"Last-Translator: Piotr Tarnowski <drfugazi at drfugazi.eu.org>\n"
+"Language-Team: Polish <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-2\n"
-"Content-Transfer-Encoding: 8-bit\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
 
 #: manager.php:52
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
-msgstr "\"%s\" zmieniony na \"%s\""
+msgstr "zmieniono nazwê \"%s\" na \"%s\""
 
-#: templates/manager/header.inc:576
+#: quota.php:56
+#, php-format
+msgid "%.2fMB / %.2fMB  (%.2f%%)"
+msgstr "%.2fMB / %.2fMB  (%.2f%%)"
+
+#: manager.php:271
 #, php-format
 msgid "%d items"
 msgstr "%d elementów"
 
-#: manager.php:356
+#: manager.php:437
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
-msgstr "%s katalogów(i) i %s plików(i) (%s kB)"
+msgstr "%s folderów i %s plików (%s Kb)"
 
-#: manager.php:354
+#: manager.php:435
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
-msgstr "%s katalogów(i) i 1 plik (%s kB)"
+msgstr "%s folderów i 1 plik (%s Kb)"
 
-#: templates/login/login.inc:72
+#: login.php:144
 #, php-format
 msgid "%s Login"
-msgstr "Logowanie - %s"
+msgstr "Logowanie %s"
+
+#: edit.php:35
+#, php-format
+msgid "%s successfully saved."
+msgstr "Pomy¶lnie zapisano %s."
 
-#: manager.php:157
+#: manager.php:167
 #, php-format
 msgid "%s was successfully pasted."
-msgstr "%s zosta³ poprawnie wklejony."
+msgstr "%s zosta³ pomy¶lnie wklejony."
 
-#: manager.php:351
+#: manager.php:432
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
-msgstr "1 katalog i %s plików(i) (%s kB)"
+msgstr "1 Folder i %s plików (%s Kb)"
 
-#: manager.php:349
+#: manager.php:430
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
-msgstr "1 katalog i 1 plik (%s kB)"
+msgstr "1 Folder i 1 plik (%s Kb)"
 
-#: templates/manager/header.inc:576
+#: manager.php:271
 msgid "1 item"
 msgstr "1 element"
 
-#: view.php:31
+#: templates/javascript_defs.php:14
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"Wyskakuj±ce okienko nie mo¿e zostaæ otwarte. Mo¿e ustawi³e¶ swoj± "
+"przegl±darkê aby blokowa³a wyskakuj±ce okienka?"
+
+#: edit.php:33 edit.php:43 view.php:33
 #, php-format
 msgid "Access denied to %s"
-msgstr "Dostêp do %s zabroniony"
+msgstr "Brak dostêpu do %s"
 
-#: lib/Gollem.php:115 lib/Gollem.php:395 lib/Gollem.php:436 lib/Gollem.php:457
-#: lib/Gollem.php:474
+#: lib/Gollem.php:109 lib/Gollem.php:383 lib/Gollem.php:445 lib/Gollem.php:466
+#: lib/Gollem.php:483
 #, php-format
 msgid "Access denied to folder \"%s\"."
-msgstr "Dostêp do katalogu \"%s\" zabroniony."
+msgstr "Brak dostêpu do folderu \"%s\"."
 
-#: templates/manager/header.inc:601
-msgid "Actions"
-msgstr "Czynno¶ci"
+#: templates/manager/manager.html:124
+msgid "Actions:"
+msgstr "Operacje:"
 
-#: selectlist.php:100
+#: selectlist.php:99
 msgid "Add"
 msgstr "Dodaj"
 
-#: templates/prefs/columnselect.inc:229
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
-msgstr "Dodaj kolumn"
+msgstr "Dodaj kolumnê"
 
-#: templates/manager/header.inc:493
+#: templates/manager/manager.html:11
 msgid "All"
-msgstr "Wszystko"
+msgstr "Wszyscy"
 
-#: templates/manager/header.inc:180
+#: templates/javascript_defs.php:25
 msgid "Are you sure you wish to continue?"
-msgstr "Jeste¶ ca³kowicie pewien, ¿e chcesz kontynuowaæ?"
+msgstr "Czy na pewno chcesz kontynuowaæ?"
 
-#: templates/manager/header.inc:176
+#: templates/javascript_defs.php:23
 msgid "Are you sure?"
-msgstr "Jeste¶ pewien?"
+msgstr "Jeste¶ pewna(y)?"
 
 #: config/prefs.php.dist:69
 msgid "Ascending"
-msgstr "Wzrastajco"
+msgstr "Rosn±co"
 
 #: config/prefs.php.dist:93
 msgid "Ask"
 msgstr "Zapytaj"
 
-#: templates/manager/header.inc:487
+#: templates/manager/manager.html:5
 msgid "Attributes"
 msgstr "Atrybuty"
 
-#: templates/prefs/columnselect.inc:225
+#: templates/prefs/columnselect.html:20
 msgid "Available Columns:"
-msgstr "Dostêpne kolumuny:"
+msgstr "Dostêpne kolumny"
 
-#: lib/api.php:46
-#, fuzzy
+#: lib/api.php:186
 msgid "Backends"
-msgstr "T³o"
+msgstr "Backendy"
 
 #: templates/clipboard/clipboard.html:11
 msgid "Below is the current contents of your clipboard."
-msgstr "Poni¿ej jest obecna zawarto¶æ twojego schowka."
+msgstr "Poni¿ej jest bie¿±ca zawarto¶æ Twojego schowka."
 
-#: clipboard.php:35 selectlist.php:102 templates/manager/header.inc:515
-#: templates/manager/header.inc:533 templates/manager/header.inc:546
-#: templates/manager/header.inc:559
+#: manager.php:266 selectlist.php:101 clipboard.php:38
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr "Anuluj"
 
 #: manager.php:72
 #, php-format
-msgid "Cannot chmod %s"
-msgstr "Nie mo¿na zmieniæ praw (chmod) %s"
+msgid "Cannot chmod %s: %s"
+msgstr "Nie mo¿na wykonaæ chmod %s: %s"
 
-#: manager.php:132
+#: manager.php:141
 msgid "Cannot copy items onto clipboard."
 msgstr "Nie mo¿na skopiowaæ elementów do schowka."
 
-#: manager.php:190
+#: manager.php:200
 #, php-format
 msgid "Cannot create home directory: %s"
 msgstr "Nie mo¿na utworzyæ katalogu domowego: %s"
 
-#: manager.php:134
+#: manager.php:143
 msgid "Cannot cut items onto clipboard."
 msgstr "Nie mo¿na wyci±æ elementów do schowka."
 
-#: manager.php:80
+#: manager.php:165
 #, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr "Nie mo¿na skasowaæ \"%s\": %s"
+msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
+msgstr "Nie mo¿na wkleiæ \"%s\" (plik wyczyszczono ze schowka): %s"
 
-#: lib/Gollem.php:787 templates/manager/header.inc:553
+#: templates/manager/manager.html:70
 msgid "Change Folder"
-msgstr "Zmieñ katalog"
+msgstr "Zmieñ folder"
 
-#: selectlist.php:110 templates/menu.inc:8
+#: templates/manager/manager.html:126
+msgid "Change Permissions"
+msgstr "Zmieñ uprawnienia"
+
+#: selectlist.php:109 lib/Gollem.php:813
 msgid "Change Server"
 msgstr "Zmieñ serwer"
 
+#: lib/Gollem.php:770
+msgid "Change _Folder"
+msgstr "Zmieñ _folder"
+
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
-msgstr "Zmieñ ustawienia traktowania plików i katalogów."
+msgstr "Zmieñ ustawienia obs³ugi plików i folderów."
 
 #: config/prefs.php.dist:14
 msgid "Change your file sorting options."
-msgstr "Zmieñ ustawienia sortowania plików."
+msgstr "Zmieñ opcje sortowania plików."
 
-#: manager.php:438
-msgid "Check _All/None"
-msgstr "Zaznacz Wszystko/Nic (_a)"
+#: lib/Gollem.php:788
+msgid "Check Quota"
+msgstr "Sprawd¼ wolne miejsce"
 
-#: templates/manager/header.inc:609
-msgid "Chmod Items"
-msgstr "Zmieñ prawa (chmod) elementów"
+#: manager.php:528
+msgid "Check _All/None"
+msgstr "Zaznacz wszystko/nic"
 
 #: manager.php:70
 msgid "Chmod done: "
-msgstr "Wykonano chmod:"
+msgstr "Wykonano chmod: "
 
-#: templates/prefs/columnselect.inc:218
+#: templates/prefs/columnselect.html:12
 msgid "Choose the columns to display in the file manager."
-msgstr "Wybierz kolumny, które maj± byæ wy¶wietlane w mened¿erze plików."
+msgstr "Wybierz kolumny, które bêd± wy¶wietlane w menad¿erze plików."
 
-#: clipboard.php:36
+#: clipboard.php:39
 msgid "Clear"
 msgstr "Wyczy¶æ"
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
 msgstr "Schowek"
 
-#: templates/login/login.inc:95
+#: quota.php:32
+msgid "Close"
+msgstr "Zamknij"
+
+#: login.php:258
 #, php-format
 msgid "Connect to: %s"
-msgstr "Po³±czienie z: %s"
+msgstr "Pod³±cz do: %s"
 
-#: clipboard.php:39
+#: clipboard.php:42 templates/manager/manager.html:129
 msgid "Copy"
-msgstr "Skopiuj"
+msgstr "Kopiuj"
 
-#: templates/manager/header.inc:611
-msgid "Copy Items"
-msgstr "Kopiuj elementy"
+#: lib/Template.php:235
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Nie mo¿na zapisaæ skompilowanego szablonu pliku '%s'."
 
-#: lib/Gollem.php:784 templates/manager/header.inc:540
+#: templates/manager/manager.html:58
 msgid "Create Folder"
-msgstr "Twórz katalog"
+msgstr "Utwórz folder"
 
-#: clipboard.php:40
+#: permissions.php:47
 #, php-format
-msgid "Current directory: %s"
-msgstr "Obecny katalog: %s"
+msgid ""
+"Created empty permissions for \"%s\". You must explicitly grant access to "
+"this backend now."
+msgstr ""
+"Utworzono puste uprawnienia dla \"%s\". Musisz formalnie przyznaæ dostêp do "
+"tego backend'u."
+
+#: templates/clipboard/clipboard.html:17
+msgid "Current directory:"
+msgstr "Bie¿±cy katalog:"
 
-#: clipboard.php:38
+#: clipboard.php:41 templates/manager/manager.html:130
 msgid "Cut"
 msgstr "Wytnij"
 
-#: templates/manager/header.inc:610
-msgid "Cut Items"
-msgstr "Wytnij elementy"
-
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
-msgstr "Domy¶lne kryteria sortowania:"
+msgstr "Domy¶lne kryterium sortowania:"
 
 #: config/prefs.php.dist:72
 msgid "Default sorting direction:"
-msgstr "Domy¶lny sposób sortowania:"
+msgstr "Domy¶lny kierunek sortowania:"
 
-#: templates/manager/header.inc:606
-msgid "Delete Items"
-msgstr "Usuñ elementy"
+#: templates/manager/manager.html:133
+msgid "Delete"
+msgstr "Usuñ"
 
 #: config/prefs.php.dist:95
 msgid "Delete folders recursively?"
-msgstr "Usuñ katalogi rekursywnie?"
+msgstr "Kasowaæ foldery rekursywnie?"
 
 #: config/prefs.php.dist:70
 msgid "Descending"
 msgstr "Malej±co"
 
-#: selectlist.php:101
+#: selectlist.php:100
 msgid "Done"
-msgstr "Zrobione"
+msgstr "Wykonano"
 
-#: manager.php:218
+#: manager.php:226
 msgid "Download"
 msgstr "Pobierz"
 
-#: manager.php:323
+#: manager.php:404
 #, php-format
 msgid "Download %s"
 msgstr "Pobierz %s"
 
+#: templates/quota/quota.html:7
+msgid "ERROR:"
+msgstr "B£¡D:"
+
+#: manager.php:225
+msgid "Edit"
+msgstr "Edytuj"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Edycja %s"
+
 #: config/credentials.php.dist:28
 msgid "Email"
-msgstr "Email"
+msgstr "Adres email"
 
-#: templates/manager/header.inc:508
+#: templates/manager/manager.html:26
 msgid "Execute"
-msgstr "Wykonaj"
+msgstr "Wykonanie"
 
-#: templates/manager/header.inc:464 templates/manager/header.inc:589
+#: templates/javascript_defs.php:27 templates/manager/manager.html:203
 msgid "File"
 msgstr "Plik"
 
@@ -283,87 +334,107 @@ msgstr "Rozmiar pliku"
 msgid "File Type"
 msgstr "Typ pliku"
 
-#: manager.php:76
+#: manager.php:87
 msgid "File deleted: "
-msgstr "Plik skasowany: "
+msgstr "Plik usuniêty: "
 
-#: manager.php:101
+#: manager.php:109
 #, php-format
 msgid "File received: %s"
 msgstr "Plik odebrany: %s"
 
-#: manager.php:78
+#: manager.php:80
 msgid "Folder removed: "
-msgstr "Katalog skasowany: "
+msgstr "Folder usuniêty: "
 
-#: templates/manager/header.inc:555
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "Id¼ do:"
 
-#: manager.php:413 templates/manager/header.inc:492
+#: permissions.php:21
+msgid "Gollem Backend Permissions Administration"
+msgstr "Administracja uprawnieniami backendu Gollem"
+
+#: manager.php:508 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Grupa"
 
-#: lib/Gollem.php:780
-msgid "Home"
-msgstr "Pocz±tek"
+#: manager.php:56
+msgid "Incorrect number of items."
+msgstr "Niew³a¶ciwa liczba elementów."
+
+#: lib/api.php:92
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Za¿±dano nieprawid³owego backendu: %s"
+
+#: lib/api.php:155
+msgid "Invalid file requested."
+msgstr "Za¿±dano nieprawid³owego pliku."
 
-#: manager.php:125
+#: manager.php:134
 #, php-format
 msgid "Item copied to clipboard: %s"
-msgstr "Obiekt skopiowany do schowka: %s"
+msgstr "Element skopiowany do schowka: %s"
 
-#: manager.php:127
+#: manager.php:136
 #, php-format
 msgid "Item cut to clipboard: %s"
-msgstr "Obiekt wyciêty do schowka: %s"
+msgstr "Element wyciêty i skopiowany do schowka: %s"
+
+#: templates/login/login.html:68
+msgid "Language"
+msgstr "Jêzyk"
 
 #: config/prefs.php.dist:81
 msgid "List folders first?"
-msgstr "Wy¶wietlaj katalogi jako pierwsze?"
+msgstr "Wy¶wietlaæ najpierw foldery?"
 
-#: templates/login/login.inc:119
-msgid "Log in"
-msgstr "Zaloguj siê"
+#: login.php:307
+msgid "Login"
+msgstr "Zaloguj"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "Lista menu"
 
-#: manager.php:387
+#: manager.php:478
 msgid "Modified"
-msgstr "Ostatnia modyfikacja"
+msgstr "Zmodyfikowany"
 
-#: templates/prefs/columnselect.inc:239
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
-msgstr "Przesuñ w lewo"
+msgstr "Przenie¶ w lewo"
 
-#: templates/prefs/columnselect.inc:241
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
-msgstr "Przesuñ w prawo"
+msgstr "Przenie¶ w prawo"
 
-#: manager.php:374
+#: manager.php:456
 msgid "Name"
 msgstr "Nazwa"
 
-#: templates/manager/header.inc:529 templates/manager/header.inc:542
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "Nazwa:"
 
 #: manager.php:35
 msgid "New folder created: "
-msgstr "Nowy katalog utworzony: "
+msgstr "Utworzono nowy folder: "
 
 #: config/prefs.php.dist:91
 msgid "No"
 msgstr "Nie"
 
-#: templates/manager/header.inc:532 templates/manager/header.inc:545
-#: templates/manager/header.inc:558
+#: templates/quota/quota.html:12
+msgid "No quota found."
+msgstr "Nie znaleziono quoty."
+
+#: manager.php:267
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:407 templates/manager/header.inc:491
+#: manager.php:501 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "W³a¶ciciel"
 
@@ -371,79 +442,85 @@ msgstr "W
 msgid "Password"
 msgstr "Has³o"
 
-#: clipboard.php:37
+#: clipboard.php:40
 msgid "Paste"
 msgstr "Wklej"
 
-#: manager.php:401
+#: manager.php:494
 msgid "Permission"
-msgstr "Prawa"
+msgstr "Uprawnienia"
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
-msgstr "Brak dostêpu do %s: %s"
+msgstr "Brak uprawnieñ do %s: %s"
 
-#: manager.php:198
+#: manager.php:208
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
-msgstr "Brak dostêpu do katalogu \"%s\": %s"
+msgstr "Brak uprawnieñ do folderu \"%s\": %s"
 
-#: templates/login/login.inc:36
+#: lib/api.php:103
+msgid "Permission denied to this backend."
+msgstr "Brak uprawnieñ do tego backendu."
+
+#: templates/javascript_defs.php:18
 msgid "Please provide your password."
-msgstr "Proszê wprowadziæ has³o."
+msgstr "Proszê podaæ swoje has³o."
 
-#: templates/login/login.inc:31
+#: templates/javascript_defs.php:17
 msgid "Please provide your username."
-msgstr "Proszê wprowadziæ nazwê u¿ytkownika."
+msgstr "Proszê podaæ swoj± nazwê u¿ytkownika."
 
-#: templates/prefs/columnselect.inc:211
-#, fuzzy
+#: templates/prefs/columnselect.html:5
 msgid "Please select a backend:"
-msgstr "Wybierz katalog:"
+msgstr "Proszê wybraæ backend:"
 
-#: templates/manager/header.inc:109
+#: templates/javascript_defs.php:21
 msgid "Please select an item before this action."
-msgstr "Wybierz element przed wykonaniem czynno¶ci."
+msgstr "Proszê wybraæ element przed wykonaniem tej akcji."
 
-#: templates/manager/header.inc:435
+#: templates/javascript_defs.php:26
 msgid "Please specify at least one file to upload."
-msgstr "Wybierz chocia¿ jeden plik do wgrania."
+msgstr "Proszê okre¶liæ przynajmniej jeden plik do za³adowania."
+
+#: quota.php:19 templates/quota/quota.html:2
+msgid "Quota Display"
+msgstr "Wy¶wietlanie Quoty"
 
-#: templates/manager/header.inc:496
-#, fuzzy
+#: templates/manager/manager.html:14
 msgid "Read"
-msgstr "Prze³aduj"
+msgstr "Odczyt"
 
-#: templates/manager/header.inc:579
+#: manager.php:273
 msgid "Refresh"
 msgstr "Od¶wie¿"
 
-#: templates/prefs/columnselect.inc:231
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
 msgstr "Usuñ kolumnê"
 
-#: templates/manager/header.inc:527
+#: templates/manager/manager.html:44 templates/manager/manager.html:136
 msgid "Rename"
 msgstr "Zmieñ nazwê"
 
-#: templates/manager/header.inc:603
-msgid "Rename Items"
-msgstr "Zmieñ nazwy obiektów"
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Przywróæ"
 
-#: lib/Gollem.php:748 lib/Gollem.php:753
+#: lib/Gollem.php:727 lib/Gollem.php:732
 msgid "Root"
-msgstr "Korzeñ"
+msgstr "Katalog g³ówny"
 
-#: templates/manager/header.inc:514
+#: manager.php:265 templates/edit/edit.inc:11
 msgid "Save"
 msgstr "Zapisz"
 
-#: templates/prefs/columnselect.inc:235
+#: templates/prefs/columnselect.html:30
 msgid "Selected Columns:"
 msgstr "Wybrane kolumny:"
 
-#: templates/login/login.inc:85
+#: templates/login/login.html:32
 msgid "Server"
 msgstr "Serwer"
 
@@ -453,40 +530,79 @@ msgstr "Ustawienia"
 
 #: config/prefs.php.dist:30
 msgid "Show dotfiles?"
-msgstr "Pokazywaæ pliki ukryte?"
+msgstr "Wy¶wietlaæ pliki ukryte?"
 
-#: manager.php:394
+#: manager.php:486
 msgid "Size"
 msgstr "Rozmiar"
 
-#: manager.php:420
-msgid "Sort Direction"
-msgstr "Sposób sortowania"
+#: templates/javascript_defs.php:24
+msgid "The following item(s) are folders:"
+msgstr "Nastêpuj±ce elementy s± folderami:"
 
-#: templates/manager/header.inc:180
-msgid "The following item(s) are folders: "
-msgstr "Te elementy s± katalogami: "
+#: templates/javascript_defs.php:22
+msgid "The following items will be permanently deleted:"
+msgstr "Nastêpuj±ce elementy zostan± trwale usuniête:"
 
-#: templates/manager/header.inc:176
-msgid "The following items will be permanently deleted: "
-msgstr "Zostan± bezpowrotnie usuniête: "
+#: templates/javascript_defs.php:30
+msgid "The original opener window has been closed. Exiting."
+msgstr "Oryginalne okno zosta³o zamnkiête. Wychodzê."
 
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
+#: login.php:151
+msgid "There are no backends available for the current user."
+msgstr "Dla tego u¿ytkownika nie ma dostêpnych backend'ów."
+
+#: selectlist.php:199 templates/manager/manager.html:147
 msgid "There are no files in this folder."
-msgstr "Nie ma plików w tym katalogu."
+msgstr "W tym folderze nie ma ¿adnych plików."
+
+#: templates/clipboard/clipboard.html:15
+msgid ""
+"To clear items from the clipboard, check the box next to the filename and "
+"click on &quot;Clear&quot;."
+msgstr ""
+"Aby wyczy¶ciæ elementy ze schowka zaznacz kwadrat obok nazwy pliku i kliknij "
+"na &quot;Wyczy¶æ&quot;."
 
-#: manager.php:367
+#: templates/clipboard/clipboard.html:13
+msgid ""
+"To paste items from the clipboard to the current directory, check the box "
+"next to the filename and click on &quot;Paste&quot;."
+msgstr ""
+"Aby wkleiæ elementy ze schowka do bie¿±cego katalogu zaznacz kwadrat obok "
+"nazwy pliku i kliknij na &quot;Wklej&quot;."
+
+#: manager.php:448
 msgid "Type"
 msgstr "Typ"
 
-#: lib/Gollem.php:753 lib/Gollem.php:763
-#, fuzzy, php-format
+#: lib/api.php:100
+msgid "Unable to create Gollem session"
+msgstr "Nie mo¿na utworzyæ sesji Gollema"
+
+#: permissions.php:42
+#, php-format
+msgid "Unable to create backend permission: %s"
+msgstr "Nie mo¿na utworzyæ uprawnieñ backendu: %s"
+
+#: manager.php:85
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "Nie mo¿na usun±æ pliku %s: %s"
+
+#: manager.php:78
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "Nie mo¿na usun±æ folderu %s: %s"
+
+#: lib/Gollem.php:732 lib/Gollem.php:742
+#, php-format
 msgid "Up to %s"
-msgstr "Dodaj u¿ytkownika"
+msgstr "W górê do %s"
 
-#: templates/manager/header.inc:594
+#: manager.php:286
 msgid "Upload File(s)"
-msgstr "Wgraj plik(i)"
+msgstr "Za³aduj plik(i)"
 
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
@@ -494,39 +610,54 @@ msgstr "Interfejs u
 
 #: config/credentials.php.dist:18
 msgid "Username"
-msgstr "Nazwa uytkownika"
+msgstr "U¿ytkownik"
 
-#: templates/manager/header.inc:581
+#: manager.php:281
 msgid "View Clipboard"
-msgstr "Poka¿ schowek"
+msgstr "Zobacz schowek"
 
-#: login.php:166
+#: login.php:201
 #, php-format
 msgid "Welcome to %s"
 msgstr "Witamy w %s"
 
-#: templates/manager/header.inc:502
+#: templates/manager/manager.html:20
 msgid "Write"
-msgstr "Zapisz"
+msgstr "Zapis"
 
 #: config/prefs.php.dist:92
 msgid "Yes"
 msgstr "Tak"
 
+#: permissions.php:25
+msgid "You need at least one backend defined to set permissions."
+msgstr ""
+"Musisz zdefiniowaæ przynajmniej jeden backend, aby ustawiæ uprawnienia."
+
 #: lib/MIME/Viewer/images.php:35
-#, fuzzy
 msgid "Your browser does not support inline display of this image type"
-msgstr ""
-"Twoja przegl±darka nie obs³uguje wy¶wietlania plików graficznych tego typu."
+msgstr "Twoja przegl±darka nie wspiera wy¶wietlania w tre¶ci tego typu obrazów"
 
-#: templates/menu.inc:6 templates/menu.inc:19
+#: lib/Gollem.php:811 lib/Gollem.php:814
 msgid "_Change Server"
-msgstr "Zmieñ serwer (_c)"
+msgstr "Zmieñ serwer"
+
+#: lib/Gollem.php:767
+msgid "_Create Folder"
+msgstr "Utwórz folder"
+
+#: lib/Gollem.php:763
+msgid "_My Home"
+msgstr "Katalog domowy"
+
+#: lib/Gollem.php:777
+msgid "_Permissions"
+msgstr "U_prawnienia"
 
-#: manager.php:219 selectlist.php:74
+#: manager.php:227 selectlist.php:75
 msgid "folder"
-msgstr "katalog"
+msgstr "folder"
 
-#: manager.php:220 selectlist.php:75
+#: manager.php:228 selectlist.php:76
 msgid "symlink"
-msgstr "dowi±zanie"
+msgstr "link symboliczny"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 2634261..5a39c60 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,20 +1,21 @@
-# translation of gollem.po to Brazilian Portuguese
-# Copyright (C) YEAR Horde Project
+# translation of pt_BR.po to Português brasileiro
+# Copyright YEAR Horde Project
 # This file is distributed under the same license as the Gollem package.
 #
-# Fabio Gomes <flgoms at uol.com.br>, 2006.
+# Fábio Gomes <flgoms at uol.com.br>, 2006.
+# Luis Felipe Marzagao <duli at fedoraproject.org>, 2008.
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem\n"
+"Project-Id-Version: pt_BR\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-03-06 12:47+0100\n"
-"PO-Revision-Date: 2006-08-18 11:38-0300\n"
-"Last-Translator: Fabio Gomes <flgoms at uol.com.br>\n"
-"Language-Team:  Brazilian Portuguese <i18n at lists.horde.org>\n"
+"POT-Creation-Date: 2008-10-12 19:12-0200\n"
+"PO-Revision-Date: 2008-10-12 19:14-0200\n"
+"Last-Translator: Luis Felipe Marzagao <duli at fedoraproject.org>\n"
+"Language-Team: Português brasileiro <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.2\n"
+"X-Generator: KBabel 1.11.4\n"
 "Plural-Forms:  nplurals=2; plural=(n > 1);\n"
 
 #: manager.php:52
@@ -27,17 +28,17 @@ msgstr "\"%s\" renomeado para \"%s\""
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
 msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:260
+#: manager.php:268
 #, php-format
 msgid "%d items"
 msgstr "%d itens"
 
-#: manager.php:414
+#: manager.php:411
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s Pastas e %s Arquivos (%s Kb)"
 
-#: manager.php:412
+#: manager.php:409
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s Pastas e 1 Arquivo (%s Kb)"
@@ -52,52 +53,60 @@ msgstr "Login do %s"
 msgid "%s was successfully pasted."
 msgstr "%s foi colado com sucesso."
 
-#: manager.php:409
+#: manager.php:406
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 Pasta e %s Arquivos (%s Kb)"
 
-#: manager.php:407
+#: manager.php:404
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 Pasta e 1 Arquivo (%s Kb)"
 
-#: manager.php:260
+#: manager.php:268
 msgid "1 item"
 msgstr "1 item"
 
+#: templates/javascript_defs.php:15
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"Não foi possível abrir uma janela popup. Talvez seu navegador esteja "
+"configurado para bloquear janelas popups?"
+
 #: view.php:31
 #, php-format
 msgid "Access denied to %s"
 msgstr "Acesso negado a %s"
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
-#: lib/Gollem.php:490
+#: lib/Gollem.php:109 lib/Gollem.php:431 lib/Gollem.php:493 lib/Gollem.php:514
+#: lib/Gollem.php:531
 #, php-format
 msgid "Access denied to folder \"%s\"."
-msgstr "Acesso negado a pasta \"%s\"."
+msgstr "Acesso negado à pasta \"%s\"."
 
-#: templates/manager/manager.html:105
-msgid "Actions"
-msgstr "Ações"
+#: templates/manager/manager.html:108
+msgid "Actions:"
+msgstr "Ações:"
 
-#: selectlist.php:100
+#: selectlist.php:91
 msgid "Add"
 msgstr "Adicionar"
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
 msgstr "Adicionar coluna"
 
-#: templates/manager/manager.html:9
+#: templates/manager/manager.html:11
 msgid "All"
 msgstr "Todos"
 
-#: templates/manager/javascript.inc:202
+#: templates/javascript_defs.php:26
 msgid "Are you sure you wish to continue?"
-msgstr "Você tem certeza que deseja continuar?"
+msgstr "Deseja realmente continuar?"
 
-#: templates/manager/javascript.inc:198
+#: templates/javascript_defs.php:24
 msgid "Are you sure?"
 msgstr "Você tem certeza?"
 
@@ -105,34 +114,35 @@ msgstr "Voc
 msgid "Ascending"
 msgstr "Ascendente"
 
-#: config/prefs.php.dist:93
+#: config/prefs.php.dist:102
 msgid "Ask"
 msgstr "Perguntar"
 
-#: templates/manager/manager.html:3
+#: templates/manager/manager.html:5
 msgid "Attributes"
 msgstr "Atributos"
 
 #: templates/prefs/columnselect.html:20
 msgid "Available Columns:"
-msgstr "Colunas disponíveis:"
+msgstr "Colunas Disponíveis:"
 
-#: lib/api.php:46
+#: lib/api.php:483
 msgid "Backends"
-msgstr "Conectores"
+msgstr "Estruturas"
 
 #: templates/clipboard/clipboard.html:11
 msgid "Below is the current contents of your clipboard."
 msgstr "Abaixo está o conteúdo atual da área de transferência."
 
-#: manager.php:254 selectlist.php:102 clipboard.php:37
+#: clipboard.php:37 selectlist.php:93 manager.php:263
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr "Cancelar"
 
 #: manager.php:72
 #, php-format
 msgid "Cannot chmod %s"
-msgstr "Impossível alterar permissões de %s"
+msgstr "Impossível mudar permissões de %s"
 
 #: manager.php:133
 msgid "Cannot copy items onto clipboard."
@@ -145,12 +155,12 @@ msgstr "Imposs
 
 #: manager.php:135
 msgid "Cannot cut items onto clipboard."
-msgstr "Impossível cortar ítens da área de transferência."
+msgstr "Impossível cortar itens da área de transferência."
 
 #: manager.php:80
 #, php-format
 msgid "Cannot delete \"%s\": %s"
-msgstr "Impossível excluir \"%s\": %s"
+msgstr "Impossível apagar \"%s\": %s"
 
 #: manager.php:157
 #, php-format
@@ -158,13 +168,17 @@ msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr ""
 "Impossível colar \"%s\" (arquivo excluído da área de transferência): %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:71
+#: templates/manager/manager.html:70
 msgid "Change Folder"
-msgstr "Alterar Pasta"
+msgstr "Mudar Pasta"
+
+#: templates/manager/manager.html:110
+msgid "Change Permissions"
+msgstr "Alterar Permissões"
 
-#: selectlist.php:110 lib/Gollem.php:819
+#: selectlist.php:101 lib/Gollem.php:852
 msgid "Change Server"
-msgstr "Alterar Servidor"
+msgstr "Mudar Servidor"
 
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
@@ -172,29 +186,25 @@ msgstr "Alterar configura
 
 #: config/prefs.php.dist:14
 msgid "Change your file sorting options."
-msgstr "Altera as opções de ordenação de arquivos."
+msgstr "Alterar as opções de ordenação de arquivos."
 
-#: lib/Gollem.php:793
+#: lib/Gollem.php:827
 msgid "Check Quota"
-msgstr "Checar Quota"
+msgstr "Verificar Quota"
 
-#: manager.php:492
+#: manager.php:488
 msgid "Check _All/None"
-msgstr "Marcar Todas/_Nenhuma"
-
-#: templates/manager/manager.html:113
-msgid "Chmod Items"
-msgstr "Alterar permissões dos ítens"
+msgstr "Verific_ar Todos/Nenhum"
 
 #: manager.php:70
 msgid "Chmod done: "
-msgstr "Alteração de permissão terminada: "
+msgstr "Alteração de permissões terminada: "
 
 #: templates/prefs/columnselect.html:12
 msgid "Choose the columns to display in the file manager."
-msgstr "Escolha as colunas a serem exibidas no gerenciador de arquivos."
+msgstr "Escolha as colunas a exibir no gerenciador de arquivos."
 
-#: clipboard.php:38
+#: clipboard.php:38 templates/manager/manager.html:129
 msgid "Clear"
 msgstr "Limpar"
 
@@ -211,15 +221,16 @@ msgstr "Fechar"
 msgid "Connect to: %s"
 msgstr "Conectar em: %s"
 
-#: clipboard.php:41
+#: clipboard.php:41 templates/manager/manager.html:113
 msgid "Copy"
 msgstr "Copiar"
 
-#: templates/manager/manager.html:116
-msgid "Copy Items"
-msgstr "Copiar Ítens"
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Não foi possível gravar o arquivo de modelo compilado'%s'."
 
-#: lib/Gollem.php:774 templates/manager/manager.html:57
+#: templates/manager/manager.html:58
 msgid "Create Folder"
 msgstr "Criar Pasta"
 
@@ -230,41 +241,37 @@ msgid ""
 "this backend now."
 msgstr ""
 "Criadas permissões vazias para \"%s\". Você deve explicitamente dar acesso a "
-"este conector agora."
+"esta estrutura agora."
 
 #: templates/clipboard/clipboard.html:17
 msgid "Current directory:"
 msgstr "Diretório atual:"
 
-#: clipboard.php:40
+#: clipboard.php:40 templates/manager/manager.html:114
 msgid "Cut"
 msgstr "Cortar"
 
-#: templates/manager/manager.html:115
-msgid "Cut Items"
-msgstr "Cortar Ítens"
-
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
 msgstr "Critério padrão de ordenação:"
 
 #: config/prefs.php.dist:72
 msgid "Default sorting direction:"
-msgstr "Direção de ordenação padrão:"
+msgstr "Direção padrão de ordenação:"
 
-#: templates/manager/manager.html:110
-msgid "Delete Items"
-msgstr "Excluir Ítens"
+#: templates/manager/manager.html:117
+msgid "Delete"
+msgstr "Excluir"
 
-#: config/prefs.php.dist:95
+#: config/prefs.php.dist:104
 msgid "Delete folders recursively?"
-msgstr "Excluir pastas recursivamente?"
+msgstr "Excluir pastas e subpastas?"
 
 #: config/prefs.php.dist:70
 msgid "Descending"
 msgstr "Descendente"
 
-#: selectlist.php:101
+#: selectlist.php:92
 msgid "Done"
 msgstr "Feito"
 
@@ -272,7 +279,7 @@ msgstr "Feito"
 msgid "Download"
 msgstr "Baixar"
 
-#: manager.php:381
+#: manager.php:378
 #, php-format
 msgid "Download %s"
 msgstr "Baixar %s"
@@ -281,15 +288,20 @@ msgstr "Baixar %s"
 msgid "ERROR:"
 msgstr "ERRO:"
 
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Editar %s"
+
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "E-mail"
 
-#: templates/manager/manager.html:24
+#: templates/manager/manager.html:26
 msgid "Execute"
 msgstr "Executar"
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:179
+#: templates/javascript_defs.php:28 templates/manager/manager.html:195
 msgid "File"
 msgstr "Arquivo"
 
@@ -322,41 +334,63 @@ msgstr "Arquivo exclu
 msgid "File received: %s"
 msgstr "Arquivo recebido: %s"
 
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr "Arquivos devem ser gravados em uma estrutura VFS."
+
+#: templates/manager/manager.html:127
+msgid "Filter"
+msgstr "Filtro"
+
+#: templates/manager/manager.html:126
+msgid "Filter:"
+msgstr "Filtro:"
+
 #: manager.php:78
 msgid "Folder removed: "
 msgstr "Pasta removida: "
 
-#: templates/manager/manager.html:73
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr "Pastas devem ser criadas em uma estrutura VFS."
+
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "Ir para:"
 
 #: permissions.php:21
 msgid "Gollem Backend Permissions Administration"
-msgstr "Administração de Permissões do Conector do Gollem"
+msgstr "Administração de Permissões da Estrutura Gollem"
 
-#: manager.php:471 templates/manager/manager.html:8
+#: manager.php:468 templates/manager/manager.html:10
 msgid "Group"
 msgstr "Grupo"
 
-#: lib/Gollem.php:770
-msgid "Home"
-msgstr "Início"
-
 #: manager.php:56
 msgid "Incorrect number of items."
-msgstr "Número incorreto de ítens."
+msgstr "Número incorreto de itens."
+
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Pedido inválido à estrutura: %s"
 
 #: manager.php:126
 #, php-format
 msgid "Item copied to clipboard: %s"
-msgstr "Ítem copiado para a área de transferência: %s"
+msgstr "Item copiado para a área de transferência: %s"
 
 #: manager.php:128
 #, php-format
 msgid "Item cut to clipboard: %s"
-msgstr "Ítem cortado da área de transferência: %s"
+msgstr "Item cortado da área de transferência: %s"
+
+#: config/prefs.php.dist:90
+msgid "Items per page"
+msgstr "Itens por página"
 
-#: templates/login/login.html:67
+#: templates/login/login.html:68
 msgid "Language"
 msgstr "Idioma"
 
@@ -380,23 +414,23 @@ msgstr "MB usados"
 msgid "Menu List"
 msgstr "Lista de Menus"
 
-#: manager.php:445
+#: manager.php:442
 msgid "Modified"
 msgstr "Modificado"
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
 msgstr "Mover para esquerda"
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
 msgstr "Mover para direita"
 
-#: manager.php:432
+#: manager.php:429
 msgid "Name"
 msgstr "Nome"
 
-#: templates/manager/manager.html:45 templates/manager/manager.html:59
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "Nome:"
 
@@ -404,7 +438,7 @@ msgstr "Nome:"
 msgid "New folder created: "
 msgstr "Nova pasta criada: "
 
-#: config/prefs.php.dist:91
+#: config/prefs.php.dist:100
 msgid "No"
 msgstr "Não"
 
@@ -412,13 +446,13 @@ msgstr "N
 msgid "No quota found."
 msgstr "Nenhuma quota encontrada."
 
-#: manager.php:255
+#: manager.php:264
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:465 templates/manager/manager.html:7
+#: manager.php:462 templates/manager/manager.html:9
 msgid "Owner"
-msgstr "Proprietário"
+msgstr "Dono"
 
 #: config/credentials.php.dist:23
 msgid "Password"
@@ -428,7 +462,7 @@ msgstr "Senha"
 msgid "Paste"
 msgstr "Colar"
 
-#: manager.php:459
+#: manager.php:456
 msgid "Permission"
 msgstr "Permissão"
 
@@ -442,27 +476,28 @@ msgstr "Permiss
 msgid "Permission denied to folder \"%s\": %s"
 msgstr "Permissão negada para a pasta \"%s\": %s"
 
-#: lib/Gollem.php:783
-msgid "Permissions"
-msgstr "Permissões"
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
+msgstr "Permissão negada para essa estrutura."
 
-#: templates/login/javascript.inc:36
+#: templates/javascript_defs.php:19
 msgid "Please provide your password."
 msgstr "Por favor forneça sua senha."
 
-#: templates/login/javascript.inc:31
+#: templates/javascript_defs.php:18
 msgid "Please provide your username."
 msgstr "Por favor forneça seu nome de usuário."
 
 #: templates/prefs/columnselect.html:5
 msgid "Please select a backend:"
-msgstr "Por favor selecione o conector:"
+msgstr "Por favor selecione uma estrutura:"
 
-#: templates/manager/javascript.inc:132
+#: templates/javascript_defs.php:22
 msgid "Please select an item before this action."
-msgstr "Por favor selecione um ítem antes desta ação."
+msgstr "Por favor selecione um item antes desta ação."
 
-#: templates/manager/javascript.inc:456
+#: templates/javascript_defs.php:27
 msgid "Please specify at least one file to upload."
 msgstr "Por favor especifique pelo menos um arquivo para enviar."
 
@@ -472,41 +507,49 @@ msgstr "Exibi
 
 #: quota.php:61
 msgid "Quota Usage"
-msgstr "Utilização da Quota"
+msgstr "Uso de Quota"
 
-#: templates/manager/manager.html:12
+#: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Ler"
 
-#: manager.php:262
+#: manager.php:270
 msgid "Refresh"
 msgstr "Atualizar"
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
 msgstr "Remover coluna"
 
-#: templates/manager/manager.html:43
+#: templates/manager/manager.html:44 templates/manager/manager.html:120
 msgid "Rename"
 msgstr "Renomear"
 
-#: templates/manager/manager.html:107
-msgid "Rename Items"
-msgstr "Renomear Ítens"
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
+msgstr "Não é possível renomear entre estruturas."
+
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr "Não é permitido renomear estruturas."
+
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Limpar"
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
+#: lib/Gollem.php:775 lib/Gollem.php:780
 msgid "Root"
 msgstr "Raiz"
 
-#: manager.php:253
+#: manager.php:262 templates/edit/edit.inc:11
 msgid "Save"
-msgstr "Salvar"
+msgstr "Gravar"
 
 #: templates/prefs/columnselect.html:30
 msgid "Selected Columns:"
 msgstr "Colunas Selecionadas:"
 
-#: templates/login/login.html:31
+#: templates/login/login.html:32
 msgid "Server"
 msgstr "Servidor"
 
@@ -518,31 +561,35 @@ msgstr "Configura
 msgid "Show dotfiles?"
 msgstr "Mostrar arquivos ocultos?"
 
-#: manager.php:452
+#: manager.php:449
 msgid "Size"
 msgstr "Tamanho"
 
-#: manager.php:478
+#: manager.php:475
 msgid "Sort Direction"
-msgstr "Direção da Ordenação"
+msgstr "Direção de Ordenação"
 
-#: templates/manager/javascript.inc:202
-msgid "The following item(s) are folders: "
-msgstr "Os seguintes ítens são pastas: "
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
+msgstr "A pasta da aplicação não pode ser apagada."
 
-#: templates/manager/javascript.inc:198
-msgid "The following items will be permanently deleted: "
-msgstr "Os seguintes ítens serão excluídos permanentemente: "
+#: templates/javascript_defs.php:25
+msgid "The following item(s) are folders:"
+msgstr "Os seguintes itens são pastas:"
 
-#: templates/selectlist/javascript.inc:9
+#: templates/javascript_defs.php:23
+msgid "The following items will be permanently deleted:"
+msgstr "Os seguintes itens serão excluídos permanentemente: "
+
+#: templates/javascript_defs.php:31
 msgid "The original opener window has been closed. Exiting."
-msgstr "A janela originalmente aberta foi fechada. Saindo."
+msgstr "A janela original de abertura foi fechado. Saindo."
 
 #: login.php:150
 msgid "There are no backends available for the current user."
-msgstr "Não existem conectores disponíveis para o usuário atual."
+msgstr "Não existem estruturas disponíveis para o usuário atual."
 
-#: selectlist.php:193 templates/manager/manager.html:128
+#: selectlist.php:185 templates/manager/manager.html:138
 msgid "There are no files in this folder."
 msgstr "Não existem arquivos nesta pasta."
 
@@ -551,33 +598,37 @@ msgid ""
 "To clear items from the clipboard, check the box next to the filename and "
 "click on &quot;Clear&quot;."
 msgstr ""
-"Para remover os ítens da área de transferência, clique na caixa de "
-"verificação ao lado do nome do arquivo e então clique em &quot;Limpar&quot;."
+"Para limpar itens da área de transferência, marque a caixa ao lado do "
+"arquivo e clique em &quot;Limpar&quot;."
 
 #: templates/clipboard/clipboard.html:13
 msgid ""
 "To paste items from the clipboard to the current directory, check the box "
 "next to the filename and click on &quot;Paste&quot;."
 msgstr ""
-"Para colar ítens da área de transferência para o diretório atual, clique na "
-"caixa de verificação ao lado do nome do arquivo e então clique em &quot;"
-"Colar&quot;."
+"Para colar itens da área de transferência na pasta atual, marque a caixa ao "
+"lado do arquivo e clique em &quot;Colar&quot;."
 
-#: manager.php:425
+#: manager.php:422
 msgid "Type"
 msgstr "Tipo"
 
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr "Não é possível criar sessão do Gollem"
+
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
-msgstr "Impossível criar permissões do conector: %s"
+msgstr "Não é possível criar permissões da estrutura: %s"
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: lib/Gollem.php:780 lib/Gollem.php:790
 #, php-format
 msgid "Up to %s"
 msgstr "Até %s"
 
-#: manager.php:274
+#: manager.php:283
 msgid "Upload File(s)"
 msgstr "Enviar Arquivo(s)"
 
@@ -587,9 +638,9 @@ msgstr "Interface do Usu
 
 #: config/credentials.php.dist:18
 msgid "Username"
-msgstr "Usuário"
+msgstr "Nome do Usuário"
 
-#: manager.php:269
+#: manager.php:278
 msgid "View Clipboard"
 msgstr "Ver Área de Transferência"
 
@@ -598,31 +649,39 @@ msgstr "Ver 
 msgid "Welcome to %s"
 msgstr "Bem-vindo ao %s"
 
-#: templates/manager/manager.html:18
+#: templates/manager/manager.html:20
 msgid "Write"
-msgstr "Escrever"
+msgstr "Gravar"
 
-#: config/prefs.php.dist:92
+#: config/prefs.php.dist:101
 msgid "Yes"
 msgstr "Sim"
 
 #: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
 msgstr ""
-"Você precisa de pelo menos um conector definido para configurar permissões."
+"Você precisa definir pelo menos uma estrutura para configurar permissões."
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
 msgstr "Seu navegador não suporta exibição incorporada deste tipo de imagem"
 
-#: lib/Gollem.php:817 lib/Gollem.php:820
+#: lib/Gollem.php:850 lib/Gollem.php:853
 msgid "_Change Server"
-msgstr "_Alterar Servidor"
+msgstr "_Mudar Servidor"
+
+#: lib/Gollem.php:811
+msgid "_My Home"
+msgstr "_Meu Início"
+
+#: lib/Gollem.php:816
+msgid "_Permissions"
+msgstr "_Permissões"
 
-#: manager.php:215 selectlist.php:74
+#: selectlist.php:74 manager.php:215
 msgid "folder"
 msgstr "pasta"
 
-#: manager.php:216 selectlist.php:75
+#: selectlist.php:75 manager.php:216
 msgid "symlink"
 msgstr "link simbólico"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index b926c34..0d43841 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -1,13 +1,12 @@
 # Romanian translations for Gollem package.
-# Copyright (C) 2003 Horde Project
+# Copyright 2003-2009 The Horde Project
 # This file is distributed under the same license as the Gollem package.
 # Eugen Hoanca <eugenh at urban-grafx.ro>, 2003.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Gollem 0.0.1\n"
-"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-13 17:13+0200\n"
+"POT-Creation-Date: 2003-03-04 13:46+0100\n"
 "PO-Revision-Date: 2003-03-27 13:50+0200\n"
 "Last-Translator: Eugen Hoanca <eugenh at urban-grafx.ro>\n"
 "Language-Team: Romanian <i18n at lists.horde.org>\n"
@@ -15,387 +14,285 @@ msgstr ""
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: manager.php:52
-#, fuzzy, php-format
-msgid "\"%s\" renamed to \"%s\""
-msgstr "'%s' redenumit in '%s'"
-
-#: templates/manager/header.inc:576
-#, fuzzy, php-format
-msgid "%d items"
+#: templates/manager/header.inc:34
+msgid "%d items in %s"
 msgstr "%d elemente in %s"
 
-#: manager.php:356
-#, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr ""
-
-#: manager.php:354
-#, php-format
-msgid "%s Folders and 1 File (%s Kb)"
-msgstr ""
-
-#: templates/login/login.inc:88
-#, php-format
+#: templates/login/login.inc:83
 msgid "%s Login"
 msgstr "Intrare %s"
 
-#: manager.php:157
-#, fuzzy, php-format
-msgid "%s was successfully pasted."
+#: manager.php:152
+msgid "%s was succesfully copied, but not deleted: %s"
+msgstr "%s a fost copiat cu succes, dar nu sters: %s"
+
+#: manager.php:180 manager.php:189
+msgid "%s was sucesfully copied to %s."
 msgstr "%s a fost copiat cu succes in %s."
 
-#: manager.php:351
-#, php-format
-msgid "1 Folder and %s Files (%s Kb)"
-msgstr ""
+#: manager.php:139 manager.php:150
+msgid "%s was sucesfully moved to %s."
+msgstr "%s a fost mutat cu succes in %s."
 
-#: manager.php:349
-#, php-format
-msgid "1 Folder and 1 File (%s Kb)"
-msgstr ""
+#: manager.php:75
+msgid "'%s' renamed to '%s'"
+msgstr "'%s' redenumit in '%s'"
 
-#: templates/manager/header.inc:576
-#, fuzzy
-msgid "1 item"
+#: templates/manager/header.inc:34
+msgid "1 item in %s"
 msgstr "1 element in %s"
 
-#: view.php:31
-#, php-format
+#: view.php:41 view.php:70
 msgid "Access denied to %s"
 msgstr "Acces interzis in %s"
 
-#: lib/Gollem.php:115 lib/Gollem.php:389 lib/Gollem.php:442 lib/Gollem.php:463
-#: lib/Gollem.php:480
-#, fuzzy, php-format
-msgid "Access denied to folder \"%s\"."
-msgstr "Acces interzis in %s"
-
-#: templates/manager/header.inc:601
-#, fuzzy
-msgid "Actions"
-msgstr "Optiuni"
-
-#: selectlist.php:100
-msgid "Add"
-msgstr ""
-
-#: templates/prefs/columnselect.inc:229
-msgid "Add column"
-msgstr ""
-
-#: templates/manager/header.inc:493
-msgid "All"
-msgstr ""
-
-#: templates/manager/header.inc:180
-msgid "Are you sure you wish to continue?"
-msgstr ""
-
-#: templates/manager/header.inc:176
+#: templates/manager/javascript.inc:135
 msgid "Are you sure?"
 msgstr "Sunteti sigur?"
 
-#: config/prefs.php.dist:69
+#: config/prefs.php.dist:52
 msgid "Ascending"
 msgstr "Crescator"
 
-#: config/prefs.php.dist:93
-msgid "Ask"
-msgstr ""
-
-#: templates/manager/header.inc:487
+#: templates/manager/prompts.inc:181
 msgid "Attributes"
 msgstr "Atribute"
 
-#: templates/prefs/columnselect.inc:225
-msgid "Available Columns:"
-msgstr ""
-
-#: lib/api.php:46
-msgid "Backends"
-msgstr ""
-
-#: templates/clipboard/clipboard.html:11
-msgid "Below is the current contents of your clipboard."
-msgstr ""
+#: templates/view/header.inc:8 templates/view/header.inc:9
+msgid "Back To Folder"
+msgstr "Inapoi la director"
 
-#: selectlist.php:102 clipboard.php:35 templates/manager/header.inc:515
-#: templates/manager/header.inc:533 templates/manager/header.inc:546
-#: templates/manager/header.inc:559
+#: templates/manager/prompts.inc:209 templates/manager/prompts.inc:243
+#: templates/manager/prompts.inc:276 templates/manager/prompts.inc:310
 msgid "Cancel"
 msgstr "Renuntare"
 
-#: manager.php:72
-#, php-format
+#: manager.php:107
 msgid "Cannot chmod %s"
 msgstr "Nu se poate face chmod %s"
 
-#: manager.php:132
-msgid "Cannot copy items onto clipboard."
-msgstr ""
-
-#: manager.php:190
-#, fuzzy, php-format
-msgid "Cannot create home directory: %s"
-msgstr "Creare director"
+#: manager.php:182
+msgid "Cannot copy '%s': %s"
+msgstr "Nu se poate copia '%s': %s"
 
-#: manager.php:134
-msgid "Cannot cut items onto clipboard."
-msgstr ""
-
-#: manager.php:80
-#, fuzzy, php-format
-msgid "Cannot delete \"%s\": %s"
+#: manager.php:94
+msgid "Cannot delete '%s'"
 msgstr "Nu se poate sterge '%s'"
 
-#: manager.php:155
-#, php-format
-msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr ""
+#: manager.php:141
+msgid "Cannot move '%s': %s"
+msgstr "Nu se poate muta '%s': %s"
 
-#: templates/manager/header.inc:553 lib/Gollem.php:793
-#, fuzzy
-msgid "Change Folder"
-msgstr "Creare dosar"
+#: manager.php:158 manager.php:194
+msgid "Cannot read '%s': %s"
+msgstr "Nu se poate citi '%s': %s"
 
-#: selectlist.php:110 templates/menu.inc:8
-#, fuzzy
-msgid "Change Server"
-msgstr "Schimbare director"
+#: manager.php:155 manager.php:191
+msgid "Cannot write '%s': %s"
+msgstr "Nu se poate scrie '%s': %s"
 
-#: config/prefs.php.dist:21
-#, fuzzy
-msgid "Change file and folder handling settings."
-msgstr "Schimbare optiuni sortare fisier."
+#: templates/menu/menu.inc:9 templates/manager/actions.inc:25
+#: templates/manager/prompts.inc:291
+msgid "Change Directory"
+msgstr "Schimbare director"
 
-#: config/prefs.php.dist:14
+#: config/prefs.php.dist:16
 msgid "Change your file sorting options."
 msgstr "Schimbare optiuni sortare fisier."
 
-#: manager.php:438
-msgid "Check _All/None"
-msgstr ""
+#: templates/manager/file_headers.inc:4
+msgid "Checkbox"
+msgstr "Casuta confirmare"
 
-#: templates/manager/header.inc:609
+#: templates/manager/actions.inc:30
 msgid "Chmod Items"
 msgstr "Chmod elemente"
 
-#: manager.php:70
+#: manager.php:105
 msgid "Chmod done: "
 msgstr "Chmod efectuat:"
 
-#: templates/prefs/columnselect.inc:218
-msgid "Choose the columns to display in the file manager."
-msgstr ""
-
-#: clipboard.php:36
-msgid "Clear"
-msgstr ""
-
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr ""
+#: templates/manager/actions.inc:24
+msgid "Choose Action:"
+msgstr "Alege actiune:"
 
-#: templates/login/login.inc:111
-#, php-format
+#: templates/login/login.inc:112
 msgid "Connect to: %s"
 msgstr "Conectare catre: %s"
 
-#: clipboard.php:39
+#: templates/manager/actions.inc:14
 msgid "Copy"
 msgstr "Copiere"
 
-#: templates/manager/header.inc:611
-#, fuzzy
-msgid "Copy Items"
-msgstr "Chmod elemente"
+#: templates/menu/menu.inc:8 templates/manager/actions.inc:26
+msgid "Create Directory"
+msgstr "Creare director"
 
-#: templates/manager/header.inc:540 lib/Gollem.php:790
+#: templates/manager/prompts.inc:257
 msgid "Create Folder"
 msgstr "Creare dosar"
 
-#: permissions.php:48
-#, php-format
-msgid "Created default permissions for backend \"%s\"."
-msgstr ""
-
-#: clipboard.php:40
-#, fuzzy, php-format
-msgid "Current directory: %s"
-msgstr "Creare director"
-
-#: clipboard.php:38
-msgid "Cut"
-msgstr ""
-
-#: templates/manager/header.inc:610
-#, fuzzy
-msgid "Cut Items"
-msgstr "Chmod elemente"
-
-#: config/prefs.php.dist:59
+#: config/prefs.php.dist:44
 msgid "Default sorting criteria:"
 msgstr "Criteriu implicit de sortare:"
 
-#: config/prefs.php.dist:72
+#: config/prefs.php.dist:54
 msgid "Default sorting direction:"
 msgstr "Directie implicita de sortare:"
 
-#: templates/manager/header.inc:606
+#: templates/login/login.inc:110
+msgid "Defaulted to: %s"
+msgstr "Intoarcere la: %s"
+
+#: templates/manager/actions.inc:29
 msgid "Delete Items"
 msgstr "Stergere elemente"
 
-#: config/prefs.php.dist:95
-msgid "Delete folders recursively?"
-msgstr ""
-
-#: config/prefs.php.dist:70
+#: config/prefs.php.dist:53
 msgid "Descending"
 msgstr "Descrescator"
 
-#: selectlist.php:101
-msgid "Done"
-msgstr ""
+#: manager.php:92
+msgid "Directory removed: "
+msgstr "Director sters: "
 
-#: manager.php:218
+#: config/prefs.php.dist:15
+msgid "Display Options"
+msgstr "Optiuni afisaj"
+
+#: manager.php:279 templates/manager/file_headers.inc:14
 msgid "Download"
 msgstr "Download"
 
-#: manager.php:323
-#, fuzzy, php-format
-msgid "Download %s"
-msgstr "Download"
+#: login.php:19
+msgid ""
+"Either you have logged in incorrectly or your login has expired. Please "
+"login again."
+msgstr ""
+"Ori v-ati loginat incorect ori loginul  a expirat. Va rugam intrati din nou."
 
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "Email"
 
-#: templates/manager/header.inc:508
-msgid "Execute"
-msgstr ""
-
-#: templates/manager/header.inc:464 templates/manager/header.inc:589
-#, fuzzy
-msgid "File"
-msgstr "Fisiere catre"
-
-#: config/prefs.php.dist:13
-msgid "File Display"
-msgstr ""
+#: manager.php:223
+msgid "Error retrieving directory listing"
+msgstr "Eroare la aducerea listingului directorului"
 
-#: config/prefs.php.dist:56
+#: config/prefs.php.dist:42
 msgid "File Modification Time"
 msgstr "Momentul modificarii fisierului"
 
-#: config/prefs.php.dist:55
+#: config/prefs.php.dist:41
 msgid "File Name"
 msgstr "Nume fisier"
 
-#: config/prefs.php.dist:57
+#: config/prefs.php.dist:43
 msgid "File Size"
 msgstr "Marime fisier"
 
-#: config/prefs.php.dist:54
+#: config/prefs.php.dist:40
 msgid "File Type"
 msgstr "Tip fisier"
 
-#: manager.php:76
+#: manager.php:90
 msgid "File deleted: "
 msgstr "Fisier sters: "
 
-#: manager.php:101
-#, php-format
+#: manager.php:121
 msgid "File received: %s"
 msgstr "Fisier primit: %s"
 
-#: manager.php:78
-#, fuzzy
-msgid "Folder removed: "
-msgstr "Director sters: "
+#: view.php:66
+msgid "File type can't be viewed inline, download the file instead"
+msgstr "Tipul fisierului nu poate fi vizualizat, downloadati fisierul"
+
+#: manager.php:220
+msgid "Files to"
+msgstr "Fisiere catre"
 
-#: templates/manager/header.inc:555
+#: templates/manager/prompts.inc:299
 msgid "Go to:"
 msgstr "Du-te la:"
 
-#: permissions.php:25
-msgid "Gollem Backend Permissions Administration"
-msgstr ""
+#: templates/index/notconfigured.inc:4
+msgid "Gollem is not properly configured"
+msgstr "Gollem nu este corect configurat"
 
-#: manager.php:413 templates/manager/header.inc:492
+#: templates/manager/file_headers.inc:31
 msgid "Group"
 msgstr "Grup"
 
-#: lib/Gollem.php:786
+#: templates/menu/menu.inc:21
+msgid "Help"
+msgstr "Ajutor"
+
+#: templates/menu/menu.inc:6
 msgid "Home"
 msgstr "Acasa"
 
-#: manager.php:56
+#: manager.php:81
 msgid "Incorrect number of items."
 msgstr "Numar incorect de elemente."
 
-#: manager.php:125
-#, php-format
-msgid "Item copied to clipboard: %s"
-msgstr ""
-
-#: manager.php:127
-#, php-format
-msgid "Item cut to clipboard: %s"
-msgstr ""
-
-#: templates/login/login.inc:136
+#: config/prefs.php.dist:9
 msgid "Language"
 msgstr "Limba"
 
-#: config/prefs.php.dist:81
-msgid "List folders first?"
-msgstr ""
+#: login.php:90
+msgid "Locked"
+msgstr "Incuiat"
 
-#: templates/login/login.inc:145
+#: login.php:136 templates/login/login.inc:140
 msgid "Log in"
 msgstr "Intrare"
 
-#: lib/Block/tree_menu.php:3
-msgid "Menu List"
+#: login.php:21
+msgid ""
+"Login failed for some reason. Most likely your username or password was "
+"entered incorrectly."
 msgstr ""
+"Login esuat din diverse motive. Cel mai probabil username sau parola "
+"introduse incorect."
+
+#: templates/menu/menu.inc:28
+msgid "Logout"
+msgstr "Iesire"
 
-#: manager.php:387
+#: templates/manager/file_headers.inc:18
 msgid "Modified"
 msgstr "Modificat"
 
-#: templates/prefs/columnselect.inc:239
-#, fuzzy
-msgid "Move left"
+#: templates/manager/actions.inc:13
+msgid "Move"
 msgstr "Mutare"
 
-#: templates/prefs/columnselect.inc:241
-msgid "Move right"
-msgstr ""
-
-#: manager.php:374
+#: templates/manager/file_headers.inc:11
 msgid "Name"
 msgstr "Nume"
 
-#: templates/manager/header.inc:529 templates/manager/header.inc:542
+#: templates/manager/prompts.inc:232 templates/manager/prompts.inc:265
 msgid "Name:"
 msgstr "Nume:"
 
-#: manager.php:35
-#, fuzzy
-msgid "New folder created: "
+#: manager.php:50
+msgid "New directory created: "
 msgstr "Director nou creat: "
 
-#: config/prefs.php.dist:91
-msgid "No"
-msgstr ""
-
-#: templates/manager/header.inc:532 templates/manager/header.inc:545
-#: templates/manager/header.inc:558
+#: templates/manager/prompts.inc:242 templates/manager/prompts.inc:275
+#: templates/manager/prompts.inc:309
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:407 templates/manager/header.inc:491
+#: templates/menu/menu.inc:13
+msgid "Options"
+msgstr "Optiuni"
+
+#: config/prefs.php.dist:14
+msgid "Other Options"
+msgstr "Alte optiuni"
+
+#: templates/manager/file_headers.inc:28
 msgid "Owner"
 msgstr "Proprietar"
 
@@ -403,193 +300,169 @@ msgstr "Proprietar"
 msgid "Password"
 msgstr "Parola"
 
-#: clipboard.php:37
-msgid "Paste"
-msgstr ""
-
-#: manager.php:401
+#: templates/manager/file_headers.inc:25
 msgid "Permission"
 msgstr "Permisune"
 
-#: selectlist.php:63
-#, fuzzy, php-format
-msgid "Permission denied to %s: %s"
-msgstr "Permisiune interzisa in %s: %s."
-
-#: manager.php:198
-#, fuzzy, php-format
-msgid "Permission denied to folder \"%s\": %s"
+#: manager.php:236
+msgid "Permission denied to %s: %s."
 msgstr "Permisiune interzisa in %s: %s."
 
-#: lib/Gollem.php:798
-#, fuzzy
-msgid "Permissions"
-msgstr "Permisune"
-
-#: templates/login/login.inc:49
+#: templates/login/login.inc:25
 msgid "Please provide your password."
 msgstr "Introduceti parola."
 
-#: templates/login/login.inc:44
+#: templates/login/login.inc:20
 msgid "Please provide your username."
 msgstr "Introduceti username."
 
-#: templates/prefs/columnselect.inc:211
-#, fuzzy
-msgid "Please select a backend:"
-msgstr "Selectati un element inainte de actiune."
-
-#: templates/manager/header.inc:109
+#: templates/manager/javascript.inc:75
 msgid "Please select an item before this action."
 msgstr "Selectati un element inainte de actiune."
 
-#: templates/manager/header.inc:435
-#, fuzzy
-msgid "Please specify at least one file to upload."
+#: templates/manager/javascript.inc:150
+msgid "Please specify a file to upload."
 msgstr "Specificati un fisier pentru trimitere."
 
-#: templates/manager/header.inc:496
-#, fuzzy
-msgid "Read"
-msgstr "Redenumire"
-
-#: templates/manager/header.inc:579
+#: templates/manager/header.inc:14 templates/manager/header.inc:15
 msgid "Refresh"
 msgstr "Reimprospatare"
 
-#: templates/prefs/columnselect.inc:231
-msgid "Remove column"
-msgstr ""
-
-#: templates/manager/header.inc:527
+#: templates/manager/prompts.inc:224
 msgid "Rename"
 msgstr "Redenumire"
 
-#: templates/manager/header.inc:603
+#: templates/manager/actions.inc:28
 msgid "Rename Items"
 msgstr "Redenumire elemente"
 
-#: lib/Gollem.php:754 lib/Gollem.php:759
-#, fuzzy
-msgid "Root"
-msgstr "Iesire"
-
-#: templates/manager/header.inc:514
+#: templates/manager/prompts.inc:208
 msgid "Save"
 msgstr "Salvare"
 
-#: templates/prefs/columnselect.inc:235
-msgid "Selected Columns:"
-msgstr ""
+#: templates/login/login.inc:103
+msgid "Select"
+msgstr "Selectare"
 
-#: templates/login/login.inc:101
+#: config/prefs.php.dist:25
+msgid "Select your preferred language:"
+msgstr "Selectare limba favorita:"
+
+#: templates/login/login.inc:99 templates/login/login.inc:120
 msgid "Server"
 msgstr "Server"
 
-#: config/prefs.php.dist:20
-msgid "Settings"
-msgstr ""
+#: config/prefs.php.dist:10
+msgid "Set the language that menu items, explanations, and help are in."
+msgstr "Setare limba in care vor fi meniurile, explicatiile shi helpul."
 
-#: config/prefs.php.dist:30
+#: config/prefs.php.dist:32
 msgid "Show dotfiles?"
 msgstr "Afisare fisiere cu punct?"
 
-#: manager.php:394
+#: templates/manager/file_headers.inc:22
 msgid "Size"
 msgstr "Marime"
 
-#: manager.php:420
+#: templates/index/notconfigured.inc:39
+msgid "Some of Gollem's configuration files are missing:"
+msgstr "Anumite fisiere de configurare Gollem lipsesc:"
+
+#: templates/manager/file_headers.inc:6 templates/manager/file_headers.inc:10
+#: templates/manager/file_headers.inc:17 templates/manager/file_headers.inc:21
 msgid "Sort Direction"
 msgstr "Directie sortare"
 
-#: templates/manager/header.inc:180
-#, fuzzy
-msgid "The following item(s) are folders: "
-msgstr "Urmatoarele elemente vor fi sterse permanent: "
-
-#: templates/manager/header.inc:176
-#, fuzzy
-msgid "The following items will be permanently deleted: "
+#: templates/manager/javascript.inc:135
+msgid "The following items will be permenantly deleted: "
 msgstr "Urmatoarele elemente vor fi sterse permanent: "
 
-#: templates/selectlist/javascript.inc:9
-msgid "The original opener window has been closed. Exiting."
-msgstr ""
-
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
-#, fuzzy
-msgid "There are no files in this folder."
+#: templates/manager/empty_dir.inc:2
+msgid "There are no files in this directory."
 msgstr "Nu exista fisiere in acest director."
 
-#: templates/clipboard/clipboard.html:15
+#: lib/MIME/Viewer/plain.php:33
+msgid "There was an error viewing this file"
+msgstr "S-a produs o eroare la vizualizarea fisierului"
+
+#: templates/index/notconfigured.inc:51
 msgid ""
-"To clear items from the clipboard, check the box next to the filename and "
-"click on &quot;Clear&quot;."
+"This file controls the default preferences for Gollem, and also controls "
+"which preferences users can alter."
 msgstr ""
+"Acest fisier controleaza atat preferintele implicite pentru Gollem, cat si "
+"alte preferinte pentru utilizatori."
 
-#: templates/clipboard/clipboard.html:13
+#: templates/index/notconfigured.inc:58
+msgid "This file controls what backends are available from Gollem."
+msgstr "Acest fisier controleaza suporturile disponibile pentru Gollem."
+
+#: templates/index/notconfigured.inc:65
+msgid "This file defines types of credentials that a backend might request."
+msgstr "Acest fisier defineste tipurile de credentiale cerute de suport."
+
+#: templates/index/notconfigured.inc:44
 msgid ""
-"To paste items from the clipboard to the current directory, check the box "
-"next to the filename and click on &quot;Paste&quot;."
+"This is the main Gollem configuration file. It contains options for the "
+"Gollem scripts."
 msgstr ""
+"Acesta este principalul fisier de configurare Gollem. Contine optiuni pentru "
+"scripturile Gollem."
 
-#: manager.php:367
+#: templates/manager/file_headers.inc:7
 msgid "Type"
 msgstr "Tip"
 
-#: lib/Gollem.php:759 lib/Gollem.php:769
-#, fuzzy, php-format
-msgid "Up to %s"
+#: templates/view/footer.inc:6 templates/view/footer.inc:8
+#: templates/view/footer.inc:10 templates/manager/header.inc:20
+#: templates/manager/header.inc:22 templates/manager/header.inc:25
+msgid "Up to parent"
 msgstr "Inapoi la parinte"
 
-#: templates/manager/header.inc:594
-#, fuzzy
-msgid "Upload File(s)"
+#: templates/manager/actions.inc:8
+msgid "Upload File"
 msgstr "Trimitere fisier"
 
-#: config/prefs.php.dist:12 config/prefs.php.dist:19
-#, fuzzy
-msgid "User Interface"
-msgstr "Nume utilizator"
+#: prefs.php:36
+msgid "User Options"
+msgstr "Optiuni utilizator"
 
 #: config/credentials.php.dist:18
 msgid "Username"
 msgstr "Nume utilizator"
 
-#: templates/manager/header.inc:581
-msgid "View Clipboard"
-msgstr ""
-
-#: login.php:174
-#, fuzzy, php-format
-msgid "Welcome to %s"
-msgstr "Intoarcere la: %s"
-
-#: templates/manager/header.inc:502
-msgid "Write"
-msgstr ""
+#: templates/login/login.inc:61
+msgid "Warning: %s requires Javascript to perform certain functions."
+msgstr "Avertisment: %s necesita Javascript pentru anumite functii."
 
-#: config/prefs.php.dist:92
-msgid "Yes"
+#: login.php:20
+msgid ""
+"You have been logged out of %s. Thank you for using the system. If you wish "
+"to log in again, please use the form below."
 msgstr ""
+"Ati iesit din %s. Multumim pentru utilizarea sistemului. Daca doriti sa "
+"reintrati, folositi formularul de mai jos."
 
-#: permissions.php:28
-msgid "You need at least one backend defined to set permissions."
-msgstr ""
+#: config/prefs.php.dist:8
+msgid "Your Information"
+msgstr "Detalii personale"
 
-#: lib/MIME/Viewer/images.php:35
+#: lib/MIME/Viewer/images.php:39
 msgid "Your browser does not support inline display of this image type"
 msgstr "Browserul dumneavoastra nu poate afisa acest tip de imagine"
 
-#: templates/menu.inc:6 templates/menu.inc:19
-#, fuzzy
-msgid "_Change Server"
-msgstr "Schimbare director"
+#: lib/Gollem.php:335
+msgid "[ Home ]"
+msgstr "[ Acasa ]"
+
+#: lib/Gollem.php:233 lib/Gollem.php:241
+msgid "[home]"
+msgstr "[acasa]"
 
-#: manager.php:219 selectlist.php:74
+#: templates/manager/file_summaries.inc:9
 msgid "folder"
 msgstr "dosar"
 
-#: manager.php:220 selectlist.php:75
+#: templates/manager/file_summaries.inc:7
 msgid "symlink"
 msgstr "link simbolic"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 9636540..c183817 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -1,1071 +1,311 @@
-# Gollem H3 (1.0.1) Russian Translation.
-# Copyright (C)
+# Gollem 0.0.1 Russian Translation.
+# Copyright 2001 Anton Nekhoroshih.
 # Anton Nekhoroshih <anton at valuehost.ru>, 2001
-# Alexey Zakharov <baber at mosga.net>, 2006
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem H3 (1.0.1)\n"
-"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-01-17 18:21+0200\n"
-"PO-Revision-Date:  2006-01-17 19:30+0200\n"
-"Last-Translator: Alexey Zakharov <baber at mosga.net>\n"
-"Language-Team:  Russian <i18n at lists.horde.org>\n"
+"Project-Id-Version: Gollem 0.0.1\n"
+"POT-Creation-Date: 2001-08-28 15:56\n"
+"PO-Revision-Date:  2001-08-28 15:56\n"
+"Last-Translator: Anton Nekhoroshih <anton at valuehost.ru>\n"
+"Language-Team: Czech <dev at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=CP1251\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
-# fuzzy, php-format
-#: manager.php:52
-#, php-format
-msgid "\"%s\" renamed to \"%s\""
-msgstr "'%s' ïåðåèìåíîâàí â '%s'"
-
-# fuzzy, php-format
-#: quota.php:59
-msgid "%.2fMB / %.2fMB  (%.2f%%)"
-msgstr "Èñïîëüçîâàíî: %.2fÌá èç %.2fÌá (%.2f%%)"
-
-# fuzzy, php-format
-#: manager.php:256 templates/manager/header.inc:93
-#, php-format
-msgid "%d items"
-msgstr "%d ôàéëîâ"
-
-#: manager.php:408
-#, php-format
-msgid "%s Folders and %s Files (%s Kb)"
-msgstr "%s Ïàïîê è %s Ôàéëîâ (%s Êá)"
-
-#: manager.php:406
-#, php-format
-msgid "%s Folders and 1 File (%s Kb)"
-msgstr "%s ïàïîê è 1 Ôàéë (%s Êá)"
-
-# fuzzy, php-format
-#: login.php:141 templates/login/login.inc:88 templates/login/nologin.inc:8
-#, php-format
-msgid "%s Login"
-msgstr "Âõîä â %s"
-
-#: manager.php:157
-#, php-format
-msgid "%s was successfully pasted."
-msgstr "%s áûë óñïåøíî âñòàâëåí"
-
-#: manager.php:403
-#, php-format
-msgid "1 Folder and %s Files (%s Kb)"
-msgstr "1 Ïàïêà è %s ôàéëîâ (%s Êá)"
-
-#: manager.php:401
-#, php-format
-msgid "1 Folder and 1 File (%s Kb)"
-msgstr "1 ïàïêà è 1 ôàéë (%s Êá)"
-
-#: manager.php:256 templates/manager/header.inc:93
-msgid "1 item"
-msgstr "1 ôàéë"
-
-#: view.php:31
-#, php-format
-msgid "Access denied to %s"
-msgstr "Äîñòóï çàïðåùåí äëÿ %s"
-
-#: lib/Gollem.php:115 lib/Gollem.php:389 lib/Gollem.php:451 lib/Gollem.php:472
-#: lib/Gollem.php:489
-#, php-format
-msgid "Access denied to folder \"%s\"."
-msgstr ""
+msgid " renamed to "
+msgstr " ïåðåèìåíîâàòü â "
 
-# fuzzy
-#: templates/manager/header.inc:118 templates/manager/manager.html:104
-msgid "Actions"
-msgstr "Âîçìîæíûå äåéñòâèÿ:"
-
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-# #-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#
-# fuzzy
-#: selectlist.php:100
-msgid "Add"
-msgstr "Äîáàâèòü"
-
-#: templates/prefs/columnselect.inc:229
-#, fuzzy
-msgid "Add column"
-msgstr ""
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"äîáàâèòü ñòîëáåö"
-
-#: templates/manager/header.inc:10 templates/manager/manager.html:9
-msgid "All"
-msgstr "Âñå"
-
-#: templates/manager/javascript.inc:198
-msgid "Are you sure you wish to continue?"
+msgid " to: "
+msgstr " â: "
+
+#, c-format
+msgid "%d items in %s"
+msgstr "%d ýëåìåíòîâ â %s"
+
+msgid "<b>Note:</b> These settings won't take effect until your next login."
 msgstr ""
+"<b> Îáðàòèòü âíèìàíèå: </b > Ýòè ïàðàìåòðû íàñòðîéêè íå áóäóò âñòóïàòü â "
+"ñèëó äî âàøåãî ñëåäóþùåãî âõîäà â ñèñòåìó."
+
+msgid "An illegal value was specified."
+msgstr "Óêàçàíî íå âåðíîå çíà÷åíèå."
 
-#: templates/manager/javascript.inc:194
 msgid "Are you sure?"
 msgstr "Âû óâåðåíû?"
 
-#: config/prefs.php.dist:69
 msgid "Ascending"
 msgstr "Ïî âîçðàñòàíèþ"
 
-#: config/prefs.php.dist:93
-msgid "Ask"
-msgstr "Ñïðàøèâàòü"
-
-#: templates/manager/header.inc:4 templates/manager/manager.html:3
-msgid "Attributes"
-msgstr ""
-
-#: templates/prefs/columnselect.inc:225
-msgid "Available Columns:"
-msgstr "Äîñòóïíûå ñâîéñòâà:"
-
-#: lib/api.php:46
-msgid "Backends"
-msgstr ""
-
-#: templates/clipboard/clipboard.html:11
-msgid "Below is the current contents of your clipboard."
-msgstr "Íèæå ïðåäñòàâëåíî ñîäåðæèìîå áóôåðà îáìåíà."
-
-#: manager.php:250 selectlist.php:102 clipboard.php:36
-#: templates/manager/header.inc:32 templates/manager/header.inc:50
-#: templates/manager/header.inc:63 templates/manager/header.inc:76
-msgid "Cancel"
-msgstr "Îòìåíà"
-
-#: manager.php:72
-#, fuzzy, php-format
-msgid "Cannot chmod %s"
+msgid "Cannot chmod "
 msgstr "Íåâîçìîæíî èçìåíèòü àòðèáóòû"
 
-#: manager.php:132
-msgid "Cannot copy items onto clipboard."
-msgstr ""
-
-#: manager.php:190
-#, fuzzy, php-format
-msgid "Cannot create home directory: %s"
-msgstr "Íåñóùåñòâóþùàÿ äèðåêòîðèÿ: "
-
-#: manager.php:134
-msgid "Cannot cut items onto clipboard."
-msgstr ""
-
-# fuzzy, php-format
-#: manager.php:80
-#, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr "Íåâîçìîæíî óäàëèòü '%s': %s"
-
-#: manager.php:155
-#, php-format
-msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr ""
+msgid "Cannot delete "
+msgstr "Íåâîçìîæíãî óäàëèòü"
 
-# fuzzy
-#: templates/manager/header.inc:70 lib/Gollem.php:776
-#: templates/manager/manager.html:71
-msgid "Change Folder"
-msgstr "Ñìåíèòü ïàïêó"
-
-# fuzzy
-#: selectlist.php:110 templates/menu.inc:8 lib/Gollem.php:818
-msgid "Change Server"
-msgstr "Ñìåíèòü ñåðâåð"
-
-# fuzzy
-#: config/prefs.php.dist:21
-msgid "Change file and folder handling settings."
-msgstr "Èçìåíèòü ïîðÿäîê óäàëåíèÿ ïàïîê"
-
-#: config/prefs.php.dist:14
 msgid "Change your file sorting options."
-msgstr "Èçìåíèòü ïîðÿäîê ñîðòèðîâêè è îòîáðàæåíèÿ ôàéëîâ"
+msgstr "Èçìåíèòü Âàø ïîðÿäîê ñîðòèðîâêè."
 
-# fuzzy
-#: lib/Gollem.php:792
-msgid "Check Quota"
-msgstr "Êâîòû"
+msgid "Change your ftp server"
+msgstr "Èçìåíèòü Âàø ftp ñåðâåð"
 
-#: manager.php:486
-msgid "Check _All/None"
-msgstr "Âûäåëèòü âñå"
-
-#: templates/manager/header.inc:126 templates/manager/manager.html:112
 msgid "Chmod Items"
 msgstr "Ñìåíèòü àòðèáóòû"
 
-#: manager.php:70
 msgid "Chmod done: "
 msgstr "Àòðèáóòû èçìåíåíû:"
 
-#: templates/prefs/columnselect.inc:218
-msgid "Choose the columns to display in the file manager."
-msgstr "Âûáåðèòå ñâîéñòâà, êîòîðûé áóäóò îòîáðàæåíû"
-
-#: clipboard.php:37
-msgid "Clear"
-msgstr "Î÷èñòèòü"
-
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr "Áóôåð îáìåíà"
-
-# fuzzy
-#: quota.php:31
-msgid "Close"
-msgstr "Çàêðûòü"
-
-#: login.php:253 templates/login/login.inc:111
-#, php-format
-msgid "Connect to: %s"
-msgstr ""
-
-#: clipboard.php:40
-msgid "Copy"
-msgstr "Êîïèðîâàòü"
-
-# fuzzy
-#: templates/manager/header.inc:128 templates/manager/manager.html:114
-msgid "Copy Items"
-msgstr "Êîïèðîâàòü ýëåìåíòû"
+msgid "Choose Action:"
+msgstr "Âûáåðèòå äåéñòâèòå:"
 
-#: templates/manager/header.inc:57 lib/Gollem.php:773
-#: templates/manager/manager.html:57
 msgid "Create Folder"
 msgstr "Ñîçäàòü ïàïêó"
 
-#: permissions.php:49
-#, php-format
-msgid "Created default permissions for backend \"%s\"."
-msgstr ""
-
-# fuzzy, php-format
-#: clipboard.php:41
-#, php-format
-msgid "Current directory: %s"
-msgstr "Òåêóùàÿ ïàïêà: %s"
-
-#: clipboard.php:39
-#, fuzzy
-msgid "Cut"
-msgstr ""
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (IMP v3.1)  #-#-#-#-#\n"
-"Íîâîå ñîîáùåíèå"
-
-# fuzzy
-#: templates/manager/header.inc:127 templates/manager/manager.html:113
-msgid "Cut Items"
-msgstr "Âûðåçàòü ýëåìåíòû"
-
-#: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
 msgstr "Êðèòåðèé ñîðòèðîâêè ïî óìîë÷àíèþ:"
 
-#: config/prefs.php.dist:72
 msgid "Default sorting direction:"
 msgstr "Íàïðàâëåíèå ñîðòèðîâêè ïî óìîë÷àíèþ:"
 
-#: templates/manager/header.inc:123 templates/manager/manager.html:109
 msgid "Delete Items"
 msgstr "Óäàëèòü ýëåìåíò"
 
-#: config/prefs.php.dist:95
-msgid "Delete folders recursively?"
-msgstr "Óäàëÿòü ïàïêè ñ ïîäïàïêàìè?"
-
-#: config/prefs.php.dist:70
 msgid "Descending"
 msgstr "Ïî óáûâàíèþ"
 
-#: selectlist.php:101
-msgid "Done"
-msgstr "Âûïîëíåíî"
+msgid "Directory removed: "
+msgstr "Äèðåêòîðÿ ïåðåìåùåíà:"
 
-#: manager.php:212
-msgid "Download"
-msgstr "Ñëèòü"
+msgid "Display Options"
+msgstr "Íàñòðîéêè ýêðàíà"
 
-#: manager.php:375
-#, php-format
-msgid "Download %s"
-msgstr "Çàãðóçèòü %s"
+msgid ""
+"Either you have logged in incorrectly or your login has expired. Please "
+"login again."
+msgstr ""
+"Èëè Âû âîøëè íåïðàâèëüíî, èëè âàø âõîä â ñèñòåìó èñòåê. Ïîæàëóéñòà âîéäèòå "
+"ñíîâà. "
 
-#: templates/quota/quota.html:7
-msgid "ERROR:"
-msgstr "Îøèáêà:"
+msgid "Error creating new folder: "
+msgstr "Îøèáêà ñîçäàíèÿ íîâîé ïàïêè: "
 
-#: config/credentials.php.dist:28
-msgid "Email"
-msgstr "E-mail"
+msgid "Error renaming: "
+msgstr "Îøèáêà ïðåèìåíîâàíèÿ: "
 
-#: templates/manager/header.inc:25 templates/manager/manager.html:24
-msgid "Execute"
-msgstr ""
+msgid "Error uploading file: "
+msgstr "Îøèáêà çàãðóçêè ôàéëà: "
 
-# fuzzy
-#: templates/manager/javascript.inc:481 templates/manager/header.inc:106
-#: templates/manager/manager.html:175
-msgid "File"
-msgstr "Ôàéë"
+msgid "Error"
+msgstr "Îøèáêà"
 
-#: config/prefs.php.dist:13
-msgid "File Display"
-msgstr "Îòîáðàæåíèå ôàéëîâ"
-
-#: config/prefs.php.dist:56
 msgid "File Modification Time"
 msgstr "Âðåìÿ èçìåíåíèÿ ôàéëà"
 
-#: config/prefs.php.dist:55
 msgid "File Name"
 msgstr "Èìÿ ôàéëà"
 
-#: config/prefs.php.dist:57
 msgid "File Size"
 msgstr "Ðàçìåð ôàéëà"
 
-#: config/prefs.php.dist:54
 msgid "File Type"
 msgstr "Òèï ôàéëà"
 
-#: manager.php:76
 msgid "File deleted: "
 msgstr "Ôàéë óäàëåí: "
 
-#: manager.php:101
-#, fuzzy, php-format
-msgid "File received: %s"
+msgid "File received: "
 msgstr "Ôàéë ïðèíÿò: "
 
-# fuzzy
-#: manager.php:78
-msgid "Folder removed: "
-msgstr "Ïàïêà óäàëåíà: "
+msgid "Forwards"
+msgstr "Ïåðåíàïðàâëåíèÿ"
 
-# fuzzy
-#: templates/manager/header.inc:72 templates/manager/manager.html:73
-msgid "Go to:"
-msgstr "Ïåðåéòè â: "
+msgid "Gollem is not fully configured."
+msgstr "Gollem íå îòêîíôèãóðèðîâàí."
 
-#: permissions.php:25
-msgid "Gollem Backend Permissions Administration"
-msgstr ""
-
-#: manager.php:465 templates/manager/header.inc:9
-#: templates/manager/manager.html:8
 msgid "Group"
 msgstr "Ãðóïïà"
 
-#: lib/Gollem.php:769
+msgid "Help"
+msgstr "Ïîìîùü"
+
 msgid "Home"
 msgstr "Äîìîé"
 
-#: manager.php:56
 msgid "Incorrect number of items."
 msgstr "Íå âåðíîå êîë-âî ýëåìåíòîâ."
 
-#: manager.php:125
-#, php-format
-msgid "Item copied to clipboard: %s"
-msgstr "Ýëåìåíò ñêîïèðîâàí â áóôåð: %s"
-
-#: manager.php:127
-#, php-format
-msgid "Item cut to clipboard: %s"
-msgstr "Ýëåìåíò ïîìåùåí â áóôåð: %s"
-
-#: templates/login/login.inc:136 templates/login/login.html:67
 msgid "Language"
 msgstr "ßçûê"
 
-#: config/prefs.php.dist:81
-msgid "List folders first?"
-msgstr "Ðàçìåùàòü ïàïêè ñâåðõó"
-
-#: templates/login/login.inc:145
 msgid "Log in"
 msgstr "Âîéòè"
 
-#: login.php:300
-#, fuzzy
-msgid "Login"
-msgstr "Âõîä"
+msgid ""
+"Login failed for some reason. Most likely your username or password was "
+"entered incorrectly."
+msgstr ""
+"Âõîä â ñèñòåìó, íåóäàâøèéñÿ ïî íåêîòîðûì ïðè÷èíàì. Íàèáîëåå âåðîÿòíî âàøå "
+"èìÿ ïîëüçîâàòåëÿ èëè ïàðîëü áûëè ââåäåíû íåïðàâèëüíî."
 
-#: quota.php:62
-msgid "MB free"
-msgstr "Ìá ñâîáîäíî"
+msgid "Logout"
+msgstr "Âûéòè"
 
-#: quota.php:62
-msgid "MB used"
-msgstr "Ìá çàíÿòî"
+msgid "Mail Forwards"
+msgstr "Ïî÷òîâàÿ ïåðåàäðåñàöèÿ"
 
-#: lib/Block/tree_menu.php:3
-msgid "Menu List"
-msgstr ""
+msgid "Message"
+msgstr "Ñîîáùåíèå"
 
-#: manager.php:439
 msgid "Modified"
 msgstr "Èçìåíåí"
 
-#: templates/prefs/columnselect.inc:239
-#, fuzzy
-msgid "Move left"
-msgstr ""
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âëåâî"
-
-#: templates/prefs/columnselect.inc:241
-#, fuzzy
-msgid "Move right"
-msgstr ""
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"ñìåñòèòü âïðàâî"
-
-#: manager.php:426
 msgid "Name"
 msgstr "Èìÿ"
 
-# fuzzy
-#: templates/manager/header.inc:46 templates/manager/header.inc:59
-#: templates/manager/manager.html:45 templates/manager/manager.html:59
-msgid "Name:"
-msgstr "Èìÿ"
+msgid "New User Introduction"
+msgstr "Âñòóïëåíèå äëÿ íîâåíüêèõ"
 
-#: manager.php:35
 msgid "New folder created: "
-msgstr "Ñîçäàíà íîâàÿ ïàïêà: "
+msgstr "Íîâàÿ ïàïêà ñîçäàä: "
 
-#: config/prefs.php.dist:91
-msgid "No"
-msgstr "Íåò"
+msgid "No such directory: "
+msgstr "Íåñóùåñòâóþùàÿ äèðåêòîðèÿ: "
 
-# fuzzy
-#: templates/quota/quota.html:12
-msgid "No quota found."
-msgstr "Èíôîðìàöèÿ î êâîòàõ íå íàéäåíà"
+msgid "Options"
+msgstr "Ïàðàìåòðû"
 
-#: manager.php:251 templates/manager/header.inc:49
-#: templates/manager/header.inc:62 templates/manager/header.inc:75
-msgid "OK"
-msgstr "OK"
+msgid "Other Options"
+msgstr "Äðóãèå ïàðàìåòðû"
 
-#: manager.php:459 templates/manager/header.inc:8
-#: templates/manager/manager.html:7
 msgid "Owner"
 msgstr "Âëàäåëåö"
 
-#: config/credentials.php.dist:23
+msgid "Password Change"
+msgstr "Ñìåíà ïàðîëÿ"
+
 msgid "Password"
 msgstr "Ïàðîëü"
 
-#: clipboard.php:38
-msgid "Paste"
-msgstr "Âñòàâèòü"
-
-#: manager.php:453
 msgid "Permission"
 msgstr "Ïðàâà"
 
-#: selectlist.php:63
-#, php-format
-msgid "Permission denied to %s: %s"
-msgstr "Íåò ïðàâ äîñòóïà íà %s: %s"
+msgid "Please enter the mode in numeric format:"
+msgstr "Ïàæóëàéñòà ââåäèòå àòðèáóò â öèôðîâîì ôîðìàòå:"
 
-#: manager.php:198
-#, php-format
-msgid "Permission denied to folder \"%s\": %s"
-msgstr "Íåò ïðàâ äîñòóïà â ïàïêó %s: %s"
-
-#: lib/Gollem.php:782
-#, fuzzy
-msgid "Permissions"
-msgstr "Ïðàâà"
+msgid "Please enter the name of the new folder:"
+msgstr "Ïàæóëàéñòà ââåäèòå èìÿ äëÿ íîâîé ïàïêè:"
 
-#: templates/login/login.inc:49 templates/login/javascript.inc:36
 msgid "Please provide your password."
 msgstr "Ïîæàëóéñòà óêàæèòå ñâîé ïàðîëü."
 
-#: templates/login/login.inc:44 templates/login/javascript.inc:31
 msgid "Please provide your username."
 msgstr "Ïîæàëóéñòà óêàæèòå ñâîå Èìÿ."
 
-# fuzzy
-#: templates/prefs/columnselect.inc:211
-msgid "Please select a backend:"
-msgstr "Óêàæèòå õðàíèëèùå:"
-
-#: templates/manager/javascript.inc:128
 msgid "Please select an item before this action."
 msgstr "Ïîæàëóéñòà âûáèðåòå ýëåìåíò ïåðåä äåéñòâèåì."
 
-#: templates/manager/javascript.inc:452
-#, fuzzy
-msgid "Please specify at least one file to upload."
+msgid "Please specify a file to upload."
 msgstr "Ïàæàëóéñòà óêàæèòå èìÿ ôàéëà äëÿ çàãðóçêè."
 
-# fuzzy
-# fuzzy
-#: quota.php:18 templates/quota/quota.html:2
-msgid "Quota Display"
-msgstr "Êâîòû"
-
-# fuzzy
-#: quota.php:61
-msgid "Quota Usage"
-msgstr "Êâîòû"
-
-# fuzzy
-#: templates/manager/header.inc:13 templates/manager/manager.html:12
-msgid "Read"
-msgstr "×èòàòü"
+msgid "Problem?"
+msgstr "Ïðîáëåìû?"
 
-#: manager.php:258 templates/manager/header.inc:96
 msgid "Refresh"
 msgstr "Îáíîâèòü"
 
-#: templates/prefs/columnselect.inc:231
-#, fuzzy
-msgid "Remove column"
-msgstr ""
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"#-#-#-#-#  compendium.po (IMP H3 v4.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Gollem H3 (1.0.1))  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Horde v3.0.6)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Horde v2.1)  #-#-#-#-#\n"
-"#-#-#-#-#  ru_RU.po (Turba v1.1)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö\n"
-"#-#-#-#-#  ru_RU.po (Turba H3 v2.0.4)  #-#-#-#-#\n"
-"óáðàòü ñòîëáåö"
-
-# fuzzy
-#: templates/manager/header.inc:44 templates/manager/manager.html:43
-msgid "Rename"
+msgid "Rename "
 msgstr "Ïåðåèìåíîâàòü"
 
-#: templates/manager/header.inc:120 templates/manager/manager.html:106
 msgid "Rename Items"
 msgstr "Ïåðåèìåíîâàòü ýëåìåíòû"
 
-# fuzzy
-#: lib/Gollem.php:733 lib/Gollem.php:738
-msgid "Root"
-msgstr "/"
-
-#: manager.php:249 templates/manager/header.inc:31
-#, fuzzy
-msgid "Save"
-msgstr "Ñåðâåð"
-
-#: templates/prefs/columnselect.inc:235
-msgid "Selected Columns:"
-msgstr "Âûáðàííûå ñâîéñòâà:"
+msgid "Server Information"
+msgstr "Èíôîðìàöèÿ î ñåðâåðå"
 
-#: templates/login/login.inc:101 templates/login/login.html:31
 msgid "Server"
 msgstr "Ñåðâåð"
 
-#: config/prefs.php.dist:20
-msgid "Settings"
-msgstr "Íàñòðîéêè"
-
-#: config/prefs.php.dist:30
-msgid "Show dotfiles?"
-msgstr "Îòîáðàæàòü ñêðûòûå ôàéëû?"
+msgid "Set the language that menu items, explanations, and help are in."
+msgstr "Óñòàíîâèòå ÿçûê íà êîòîðîì áóäóò ïóíêòû ìåíþ, îáúÿñíåíèÿ, ñïðàâêè."
 
-#: manager.php:446
 msgid "Size"
 msgstr "Ðàçìåð"
 
-#: manager.php:472
+msgid "Some of Gollem's configuration files are missing:"
+msgstr "Íåêîòîðûå èç ôàéëîâ êîíôèãóðàöèè Gollem îòñóòñòâóþò:"
+
 msgid "Sort Direction"
 msgstr "Íàïðàâëåíèå ñîðòèðîâêè"
 
-# fuzzy
-#: templates/manager/javascript.inc:198
-msgid "The following item(s) are folders: "
-msgstr "Ñëåäóþùèå ýëåìåíòû áóäóò óäàëåííûé: "
-
-# fuzzy
-#: templates/manager/javascript.inc:194
-msgid "The following items will be permanently deleted: "
-msgstr "Ñëåäóþùèå ýëåìåíòû áóäóò óäàëåíû: "
+msgid "Success"
+msgstr "Óñïåøíî"
 
-#: templates/selectlist/javascript.inc:9
-msgid "The original opener window has been closed. Exiting."
-msgstr ""
+msgid "The following items will be permenantly deleted: "
+msgstr "Ñëåäóþùèå ýëåìåíòû áóäóò óäàëåííûé: "
 
-#: login.php:148
-#, fuzzy
-msgid "There are no backends available for the current user."
-msgstr "Íåò àòòðèáóòîâ, îïðåäåëåííûõ äëÿ äàííîãî òèïà"
+msgid "There are no files in this directory."
+msgstr "Íåò íèêàêèõ ôàéëîâ â ýòîì êàòàëîãå."
 
-# fuzzy
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
-#: templates/manager/manager.html:125
-msgid "There are no files in this folder."
-msgstr "Â ýòîé ïàïêå íåò ôàéëîâ."
+msgid "This file lists each FTP server that Gollem makes available."
+msgstr "Ýòîò ôàéë ïåðå÷èñëÿåò FTP ñåðâåðà, êîòîðûå áóäóò äîñòïóíû â Gollem."
 
-#: templates/clipboard/clipboard.html:15
 msgid ""
-"To clear items from the clipboard, check the box next to the filename and "
-"click on &quot;Clear&quot;."
+"This file sets the default user options for Gollem, and controls which ones "
+"are user editable."
 msgstr ""
-"×òîáû óäàëèòü ýëåìåíò èç áóôåðà, âûáåðèòå èìÿ ôàéëà è íàæìèòå íà 'Î÷èñòèòü'"
+"Ýòîò ôàéë óñòàíàâëèâàåò îïöèè ïî óìîë÷àíèþ äëÿ ïîëüçîâàòåëÿ Gollem, "
+"äîñòóïíûìè äëÿ ðåäàêòèðîâàíèÿ."
 
-#: templates/clipboard/clipboard.html:13
 msgid ""
-"To paste items from the clipboard to the current directory, check the box "
-"next to the filename and click on &quot;Paste&quot;."
+"This is the main Gollem configuration file. It contains paths and options "
+"for the Gollem scripts."
 msgstr ""
-"×òîáû âñòàâèòü ýëåìåíò èç áóôåðà â òåêóùóþ ïàïêó, âûáåðèòå èìÿ ôàéëà è "
-"íàæìèòå íà 'Âñòàâèòü'"
+"Ýòî ãëàâíûé ôàéë êîíôèãóðàöèè Gollem. Îí ñîäåðæèò ïóòè è îïöèè äëÿ ñöåíàðèåâ "
+"Gollem."
+
+msgid "This number must be at least one."
+msgstr "Ýòîò íîìåð äîëæåí áûòü ïî êðàéíåé ìåðå îäèí."
+
+msgid "This value must be a number."
+msgstr "Çíà÷åíèå äîëæíî áûòü öèôðîé."
 
-#: manager.php:419
 msgid "Type"
 msgstr "Òèï "
 
-#: lib/Gollem.php:738 lib/Gollem.php:748
-#, fuzzy, php-format
-msgid "Up to %s"
-msgstr " â: "
+msgid "Upload File"
+msgstr "Çàãðóçêà ôàéëà"
 
-# fuzzy
-#: manager.php:268 templates/manager/header.inc:111
-msgid "Upload File(s)"
-msgstr "Çàãðóçèòü ôàéë"
+msgid "User Preferences"
+msgstr "Íàñòðîéêè ïîëüçîâàòåëÿ"
 
-# fuzzy
-#: config/prefs.php.dist:12 config/prefs.php.dist:19
-msgid "User Interface"
-msgstr "Ïîëüçîâàòåëüñêèé èíòåðôåéñ"
-
-#: config/credentials.php.dist:18
 msgid "Username"
 msgstr "Ïîëüçîâàòåëü"
 
-#: manager.php:263 templates/manager/header.inc:98
-msgid "View Clipboard"
-msgstr "Ïðîñìîòðåòü ñîäåðæèìîå áóôåðà"
+msgid "Warning"
+msgstr "Âíèìàíèå"
+
+#, c-format
+msgid "Warning: %s requires Javascript to perform certain functions."
+msgstr "Âíèìàíèå: %s íóæåí Javascript äëÿ âûïîëíåíèÿ ôóíêöèé."
 
-#: login.php:193
-#, php-format
+#, c-format
 msgid "Welcome to %s"
 msgstr "Äîáðî ïîæàëîâàòü â %s"
 
-#: templates/manager/header.inc:19 templates/manager/manager.html:18
-msgid "Write"
-msgstr ""
-
-#: config/prefs.php.dist:92
-msgid "Yes"
-msgstr "Äà"
-
-#: permissions.php:29
-msgid "You need at least one backend defined to set permissions."
-msgstr ""
+msgid "Welcome"
+msgstr "Äîáðî ïîæàëîâàòü"
 
-#: lib/MIME/Viewer/images.php:35
-msgid "Your browser does not support inline display of this image type"
-msgstr ""
+#, c-format
+msgid ""
+"You have been logged out of %s. Thank you for using the system. If you wish "
+"to log in again, please use the form below."
+msgstr "Âû ïîêèíóëè ñèñòåìó %s. Ñïàñèáî çà èñïîëüçîâàíèå."
 
-# fuzzy
-#: templates/menu.inc:6 templates/menu.inc:19 lib/Gollem.php:816
-#: lib/Gollem.php:819
-msgid "_Change Server"
-msgstr "Ñìåíèòü ñåðâåð"
+msgid "Your Information"
+msgstr "Âàøà èíôîðìàöèÿ"
 
-#: manager.php:213 selectlist.php:74
-msgid "folder"
-msgstr ""
+msgid "Your preferences have been updated."
+msgstr "Âàøè íàñòðîéêè èçìåíåíû."
 
-#: manager.php:214 selectlist.php:75
-msgid "symlink"
-msgstr ""
+msgid "Your preferred FTP server:"
+msgstr "Âàø îñíîâíîé FTP ñåðâåð:"
diff --git a/po/gollem.pot b/po/sk_SK.po
similarity index 59%
copy from po/gollem.pot
copy to po/sk_SK.po
index 0ed957c..1a7ee02 100644
--- a/po/gollem.pot
+++ b/po/sk_SK.po
@@ -1,221 +1,221 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Horde Project
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Slovak translations for Gollem package.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the Gollem package.
+# Martin Matuka <martin at matuska.org>, 2008.
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: Gollem H3 (1.0.4-cvs)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-11-03 23:12+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"POT-Creation-Date: 2007-09-29 15:53+0200\n"
+"PO-Revision-Date: 2008-03-25 10:55+0100\n"
+"Last-Translator: Martin Matuska <martin at matuska.org>\n"
+"Language-Team: i18n at lists.horde.org\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
 #: manager.php:52
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
-msgstr ""
+msgstr "\"%s\" premenované na \"%s\""
 
 #: quota.php:59
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
-msgstr ""
+msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
 #: manager.php:268
 #, php-format
 msgid "%d items"
-msgstr ""
+msgstr "%d polo¾iek"
 
-#: manager.php:415
+#: manager.php:411
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
-msgstr ""
+msgstr "%s prieèinkov a %s süborov (%s Kb)"
 
-#: manager.php:413
+#: manager.php:409
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
-msgstr ""
+msgstr "%s prieèinkov a 1 súbor (%s Kb)"
 
 #: login.php:143
 #, php-format
 msgid "%s Login"
-msgstr ""
+msgstr "%s prihlásenie"
 
 #: manager.php:159
 #, php-format
 msgid "%s was successfully pasted."
-msgstr ""
+msgstr "%s bolo úspe¹ne vlo¾ené."
 
-#: manager.php:410
+#: manager.php:406
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
-msgstr ""
+msgstr "1 prieèinok a %s súborov (%s Kb)"
 
-#: manager.php:408
+#: manager.php:404
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
-msgstr ""
+msgstr "1 prieèinok a 1 súbor (%s Kb)"
 
 #: manager.php:268
 msgid "1 item"
-msgstr ""
+msgstr "1 polo¾ka"
 
 #: view.php:31
 #, php-format
 msgid "Access denied to %s"
-msgstr ""
+msgstr "Prístup do %s bol odopretý"
 
 #: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
 #: lib/Gollem.php:490
 #, php-format
 msgid "Access denied to folder \"%s\"."
-msgstr ""
+msgstr "Prístup do prieèinka \"%s\" bol odopretý."
 
 #: templates/manager/manager.html:111
 msgid "Actions:"
-msgstr ""
+msgstr "Operácie:"
 
 #: selectlist.php:91
 msgid "Add"
-msgstr ""
+msgstr "Prida»"
 
 #: templates/prefs/columnselect.inc:42
 msgid "Add column"
-msgstr ""
+msgstr "Prida» ståpec"
 
 #: templates/manager/manager.html:11
 msgid "All"
-msgstr ""
+msgstr "V¹etky"
 
 #: templates/manager/javascript.inc:202
 msgid "Are you sure you wish to continue?"
-msgstr ""
+msgstr "Naozaj chcete pokraèova»?"
 
 #: templates/manager/javascript.inc:198
 msgid "Are you sure?"
-msgstr ""
+msgstr "Ste si istý?"
 
 #: config/prefs.php.dist:69
 msgid "Ascending"
-msgstr ""
+msgstr "Vzostupne"
 
 #: config/prefs.php.dist:93
 msgid "Ask"
-msgstr ""
+msgstr "Spýta» sa"
 
 #: templates/manager/manager.html:5
 msgid "Attributes"
-msgstr ""
+msgstr "Atribúty"
 
 #: templates/prefs/columnselect.html:20
 msgid "Available Columns:"
-msgstr ""
+msgstr "Dostupné ståpce:"
 
 #: lib/api.php:46
 msgid "Backends"
-msgstr ""
+msgstr "Backendy"
 
 #: templates/clipboard/clipboard.html:11
 msgid "Below is the current contents of your clipboard."
-msgstr ""
+msgstr "Ni¾¹ie je aktuálny obsah Va¹ej schránky."
 
 #: manager.php:263 selectlist.php:93 clipboard.php:37
 msgid "Cancel"
-msgstr ""
+msgstr "Zru¹i»"
 
 #: manager.php:72
 #, php-format
 msgid "Cannot chmod %s"
-msgstr ""
+msgstr "Nepodarilo sa vykona» chmod %s "
 
 #: manager.php:133
 msgid "Cannot copy items onto clipboard."
-msgstr ""
+msgstr "Nepodarilo sa skopírova» polo¾ky do schránky."
 
 #: manager.php:192
 #, php-format
 msgid "Cannot create home directory: %s"
-msgstr ""
+msgstr "Nepodarilo sa vytvori» domovský prieèinok %s."
 
 #: manager.php:135
 msgid "Cannot cut items onto clipboard."
-msgstr ""
+msgstr "Nepodarilo sa vystrihnú» polo¾ky do schránky."
 
 #: manager.php:80
 #, php-format
 msgid "Cannot delete \"%s\": %s"
-msgstr ""
+msgstr "Nepodarilo sa vymaza» \"%s\": %s"
 
 #: manager.php:157
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr ""
+msgstr "Nepodarlio sa vlo¾i» \"%s\" (súbor bol zmazaný zo schránky): %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:77
+#: lib/Gollem.php:780 templates/manager/manager.html:77
 msgid "Change Folder"
-msgstr ""
+msgstr "Zmeni» prieèinok"
 
-#: selectlist.php:101 lib/Gollem.php:821
+#: selectlist.php:101 lib/Gollem.php:824
 msgid "Change Server"
-msgstr ""
+msgstr "Zmeni» server"
 
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
-msgstr ""
+msgstr "Zmena nastavení nakladania so súbormi a prieèinkami."
 
 #: config/prefs.php.dist:14
 msgid "Change your file sorting options."
-msgstr ""
+msgstr "Nastavte triedenie súborov."
 
-#: lib/Gollem.php:795
+#: lib/Gollem.php:798
 msgid "Check Quota"
-msgstr ""
+msgstr "Skontrolova» kvóta"
 
-#: manager.php:492
+#: manager.php:488
 msgid "Check _All/None"
-msgstr ""
+msgstr "Vybra» _v¹etky/¾iadne"
 
 #: templates/manager/manager.html:113
 msgid "Chmod"
-msgstr ""
+msgstr "Chmod"
 
 #: manager.php:70
 msgid "Chmod done: "
-msgstr ""
+msgstr "Chmod vykonaný: "
 
 #: templates/prefs/columnselect.html:12
 msgid "Choose the columns to display in the file manager."
-msgstr ""
+msgstr "Vyberte, ktoré ståpce sa majú zobrazi» v správcovi súborov:"
 
 #: clipboard.php:38
 msgid "Clear"
-msgstr ""
+msgstr "Odstráni»"
 
 #: clipboard.php:17 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
-msgstr ""
+msgstr "Schránka"
 
 #: quota.php:31
 msgid "Close"
-msgstr ""
+msgstr "Zavrie»"
 
 #: login.php:254
 #, php-format
 msgid "Connect to: %s"
-msgstr ""
+msgstr "Pripoji» sa k: %s"
 
 #: clipboard.php:41 templates/manager/manager.html:116
 msgid "Copy"
-msgstr ""
+msgstr "Kopírova»"
 
-#: lib/Gollem.php:774 templates/manager/manager.html:63
+#: lib/Gollem.php:777 templates/manager/manager.html:63
 msgid "Create Folder"
-msgstr ""
+msgstr "Vytvori» prieèinok"
 
 #: permissions.php:47
 #, php-format
@@ -223,384 +223,390 @@ msgid ""
 "Created empty permissions for \"%s\". You must explicitly grant access to "
 "this backend now."
 msgstr ""
+"Vytvorené prázdne práva pre \"%s\". Teraz musíte jednotlivo povoli» prístup "
+"do tohto backendu."
 
 #: templates/clipboard/clipboard.html:17
 msgid "Current directory:"
-msgstr ""
+msgstr "Aktuálny prieèinok: "
 
 #: clipboard.php:40 templates/manager/manager.html:117
 msgid "Cut"
-msgstr ""
+msgstr "Vystrihnú»"
 
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
-msgstr ""
+msgstr "Prednastavený spôsob triedenia:"
 
 #: config/prefs.php.dist:72
 msgid "Default sorting direction:"
-msgstr ""
+msgstr "Prednastavený smer triedenia:"
 
 #: templates/manager/manager.html:120
 msgid "Delete"
-msgstr ""
+msgstr "Vymaza»"
 
 #: config/prefs.php.dist:95
 msgid "Delete folders recursively?"
-msgstr ""
+msgstr "Vymaza» prieèinky a ich obsah?"
 
 #: config/prefs.php.dist:70
 msgid "Descending"
-msgstr ""
+msgstr "Zostupne"
 
 #: selectlist.php:92
 msgid "Done"
-msgstr ""
+msgstr "Vykonané"
 
 #: manager.php:214
 msgid "Download"
-msgstr ""
+msgstr "Stiahnu»"
 
-#: manager.php:382
+#: manager.php:378
 #, php-format
 msgid "Download %s"
-msgstr ""
+msgstr "Stiahnu» %s"
 
 #: templates/quota/quota.html:7
 msgid "ERROR:"
-msgstr ""
+msgstr "CHYBA:"
 
 #: config/credentials.php.dist:28
 msgid "Email"
-msgstr ""
+msgstr "Email"
 
 #: templates/manager/manager.html:26
 msgid "Execute"
-msgstr ""
+msgstr "Spusti»"
 
 #: templates/manager/javascript.inc:485 templates/manager/manager.html:183
 msgid "File"
-msgstr ""
+msgstr "Súbor"
 
 #: config/prefs.php.dist:13
 msgid "File Display"
-msgstr ""
+msgstr "Zobrazenie súborov"
 
 #: config/prefs.php.dist:56
 msgid "File Modification Time"
-msgstr ""
+msgstr "Èas modifikácie súborov"
 
 #: config/prefs.php.dist:55
 msgid "File Name"
-msgstr ""
+msgstr "Meno súboru"
 
 #: config/prefs.php.dist:57
 msgid "File Size"
-msgstr ""
+msgstr "Veµkos» súboru"
 
 #: config/prefs.php.dist:54
 msgid "File Type"
-msgstr ""
+msgstr "Typ súboru"
 
 #: manager.php:76
 msgid "File deleted: "
-msgstr ""
+msgstr "Súbor vymazaný:"
 
 #: manager.php:101
 #, php-format
 msgid "File received: %s"
-msgstr ""
+msgstr "Súbor prijatý: %s"
 
 #: manager.php:78
 msgid "Folder removed: "
-msgstr ""
+msgstr "Prieèinok vymazaný:"
 
 #: templates/manager/manager.html:79
 msgid "Go to:"
-msgstr ""
+msgstr "Prejs» na:"
 
 #: permissions.php:21
 msgid "Gollem Backend Permissions Administration"
-msgstr ""
+msgstr "Administrácia práv backendov Gollem"
 
-#: manager.php:472 templates/manager/manager.html:10
+#: manager.php:468 templates/manager/manager.html:10
 msgid "Group"
-msgstr ""
+msgstr "Skupina"
 
-#: lib/Gollem.php:770
+#: lib/Gollem.php:773
 msgid "Home"
-msgstr ""
+msgstr "Domov"
 
 #: manager.php:56
 msgid "Incorrect number of items."
-msgstr ""
+msgstr "Nesprávny poèet polo¾iek."
 
 #: manager.php:126
 #, php-format
 msgid "Item copied to clipboard: %s"
-msgstr ""
+msgstr "Polo¾ka skopírovaná do schránky: %s"
 
 #: manager.php:128
 #, php-format
 msgid "Item cut to clipboard: %s"
-msgstr ""
+msgstr "Polo¾ka vystrihnutá do schránky: %s"
 
 #: templates/login/login.html:67
 msgid "Language"
-msgstr ""
+msgstr "Jazyk"
 
 #: config/prefs.php.dist:81
 msgid "List folders first?"
-msgstr ""
+msgstr "Zobrazi» najprv prieèinky?"
 
 #: login.php:303
 msgid "Login"
-msgstr ""
+msgstr "Prihlásenie"
 
 #: quota.php:62
 msgid "MB free"
-msgstr ""
+msgstr "MB voµných"
 
 #: quota.php:62
 msgid "MB used"
-msgstr ""
+msgstr "MB vyu¾itých"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
-msgstr ""
+msgstr "Zoznam menu"
 
-#: manager.php:446
+#: manager.php:442
 msgid "Modified"
-msgstr ""
+msgstr "Zmenené"
 
 #: templates/prefs/columnselect.inc:44
 msgid "Move left"
-msgstr ""
+msgstr "Presunú» vµavo"
 
 #: templates/prefs/columnselect.inc:45
 msgid "Move right"
-msgstr ""
+msgstr "Presunú» vpravo"
 
-#: manager.php:433
+#: manager.php:429
 msgid "Name"
-msgstr ""
+msgstr "Meno"
 
 #: templates/manager/manager.html:49 templates/manager/manager.html:65
 msgid "Name:"
-msgstr ""
+msgstr "Meno:"
 
 #: manager.php:35
 msgid "New folder created: "
-msgstr ""
+msgstr "Nový prieèinok bol vytvorený: "
 
 #: config/prefs.php.dist:91
 msgid "No"
-msgstr ""
+msgstr "Nie"
 
 #: templates/quota/quota.html:12
 msgid "No quota found."
-msgstr ""
+msgstr "®iadne kvóta neboli nájdené."
 
 #: manager.php:264
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
-#: manager.php:466 templates/manager/manager.html:9
+#: manager.php:462 templates/manager/manager.html:9
 msgid "Owner"
-msgstr ""
+msgstr "Vlastník"
 
 #: config/credentials.php.dist:23
 msgid "Password"
-msgstr ""
+msgstr "Heslo"
 
 #: clipboard.php:39
 msgid "Paste"
-msgstr ""
+msgstr "Vlo¾i»"
 
-#: manager.php:460
+#: manager.php:456
 msgid "Permission"
-msgstr ""
+msgstr "Právo"
 
 #: selectlist.php:63
 #, php-format
 msgid "Permission denied to %s: %s"
-msgstr ""
+msgstr "Prístup zamietnutý do %s: %s"
 
 #: manager.php:200
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
-msgstr ""
+msgstr "Prístup zamietnutý do prieèinka \"%s\": %s"
 
-#: lib/Gollem.php:784
+#: lib/Gollem.php:787
 msgid "Permissions"
-msgstr ""
+msgstr "Práva"
 
 #: templates/login/javascript.inc:36
 msgid "Please provide your password."
-msgstr ""
+msgstr "Prosím zadajte svoje heslo"
 
 #: templates/login/javascript.inc:31
 msgid "Please provide your username."
-msgstr ""
+msgstr "Prosím zadajte svoje pou¾ívateµské meno"
 
 #: templates/prefs/columnselect.html:5
 msgid "Please select a backend:"
-msgstr ""
+msgstr "Prosím vyberte backend:"
 
 #: templates/manager/javascript.inc:132
 msgid "Please select an item before this action."
-msgstr ""
+msgstr "Prosím vyberte polo¾ku pred vykonaním tejto operácie."
 
 #: templates/manager/javascript.inc:456
 msgid "Please specify at least one file to upload."
-msgstr ""
+msgstr "Prosím vyberte aspoò jeden súbor na nahranie."
 
 #: quota.php:18 templates/quota/quota.html:2
 msgid "Quota Display"
-msgstr ""
+msgstr "Zobrazenie kvót"
 
 #: quota.php:61
 msgid "Quota Usage"
-msgstr ""
+msgstr "Vyu¾ité kvóta"
 
 #: templates/manager/manager.html:14
 msgid "Read"
-msgstr ""
+msgstr "Èíta»"
 
 #: manager.php:270
 msgid "Refresh"
-msgstr ""
+msgstr "Obnovi»"
 
 #: templates/prefs/columnselect.inc:43
 msgid "Remove column"
-msgstr ""
+msgstr "Odstráni» ståpec"
 
 #: templates/manager/manager.html:47 templates/manager/manager.html:123
 msgid "Rename"
-msgstr ""
+msgstr "Premenova»"
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
+#: lib/Gollem.php:737 lib/Gollem.php:742
 msgid "Root"
-msgstr ""
+msgstr "Koreòový prieèinok"
 
 #: manager.php:262
 msgid "Save"
-msgstr ""
+msgstr "Ulo¾i»"
 
 #: templates/prefs/columnselect.html:30
 msgid "Selected Columns:"
-msgstr ""
+msgstr "Vyberte ståpce:"
 
 #: templates/login/login.html:31
 msgid "Server"
-msgstr ""
+msgstr "Server"
 
 #: config/prefs.php.dist:20
 msgid "Settings"
-msgstr ""
+msgstr "Nastavenia"
 
 #: config/prefs.php.dist:30
 msgid "Show dotfiles?"
-msgstr ""
+msgstr "Zobrazi» súbory zaèínajúce bodkou?"
 
-#: manager.php:453
+#: manager.php:449
 msgid "Size"
-msgstr ""
+msgstr "Veµkos»"
 
-#: manager.php:479
+#: manager.php:475
 msgid "Sort Direction"
-msgstr ""
+msgstr "Smer triedenia"
 
 #: templates/manager/javascript.inc:202
 msgid "The following item(s) are folders: "
-msgstr ""
+msgstr "Nasledujúce polo¾ky sú prieèinky: "
 
 #: templates/manager/javascript.inc:198
 msgid "The following items will be permanently deleted: "
-msgstr ""
+msgstr "Nasledujúce polo¾ky budú trvale vymazané: "
 
 #: templates/selectlist/javascript.inc:9
 msgid "The original opener window has been closed. Exiting."
-msgstr ""
+msgstr "Pôvodné okno bolo zavreté. Koniec."
 
 #: login.php:150
 msgid "There are no backends available for the current user."
-msgstr ""
+msgstr "Pre aktuálneho pou¾ívateµa nie sú k dispozícii ¾iadne backendy."
 
 #: selectlist.php:185 templates/manager/manager.html:134
 msgid "There are no files in this folder."
-msgstr ""
+msgstr "V tomto prieèinku nie sú ¾iadne súbory."
 
 #: templates/clipboard/clipboard.html:15
 msgid ""
 "To clear items from the clipboard, check the box next to the filename and "
 "click on &quot;Clear&quot;."
 msgstr ""
+"Ak chcete odstráni» polo¾ky zo schránky, za¹krtnite ¹tvorèek vedµa súboru a "
+"kliknite na &quot;Odstráni»&quot;."
 
 #: templates/clipboard/clipboard.html:13
 msgid ""
 "To paste items from the clipboard to the current directory, check the box "
 "next to the filename and click on &quot;Paste&quot;."
 msgstr ""
+"Ak chcete vlo¾i» polo¾ky zo schránky do aktuálneho prieèinka, za¹krtnite "
+"¹tvorèek vedµa súboru a kliknite na  &quot;Vlo¾i»&quot;."
 
-#: manager.php:426
+#: manager.php:422
 msgid "Type"
-msgstr ""
+msgstr "Typ"
 
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
-msgstr ""
+msgstr "Nepodarilo sa vytvori» právo pre backend: %s"
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: lib/Gollem.php:742 lib/Gollem.php:752
 #, php-format
 msgid "Up to %s"
-msgstr ""
+msgstr "Vy¹¹ie na %s"
 
 #: manager.php:283
 msgid "Upload File(s)"
-msgstr ""
+msgstr "Nahra» súbory"
 
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
-msgstr ""
+msgstr "Pou¾ívateµské rozhranie"
 
 #: config/credentials.php.dist:18
 msgid "Username"
-msgstr ""
+msgstr "Pou¾ívateµské meno"
 
 #: manager.php:278
 msgid "View Clipboard"
-msgstr ""
+msgstr "Zobrazi» schránku"
 
 #: login.php:195
 #, php-format
 msgid "Welcome to %s"
-msgstr ""
+msgstr "Víta Vás %s"
 
 #: templates/manager/manager.html:20
 msgid "Write"
-msgstr ""
+msgstr "Zapísa»"
 
 #: config/prefs.php.dist:92
 msgid "Yes"
-msgstr ""
+msgstr "Áno"
 
 #: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
-msgstr ""
+msgstr "Musíte ma» nastavený aspoò jeden backend na nastavenie práv."
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
-msgstr ""
+msgstr "Vá¹ prehliadaè nepodporuje priame zobrazenie tohto typu obrázkov"
 
-#: lib/Gollem.php:819 lib/Gollem.php:822
+#: lib/Gollem.php:822 lib/Gollem.php:825
 msgid "_Change Server"
-msgstr ""
+msgstr "_Zmeni» server"
 
 #: manager.php:215 selectlist.php:74
 msgid "folder"
-msgstr ""
+msgstr "prieèinok"
 
 #: manager.php:216 selectlist.php:75
 msgid "symlink"
-msgstr ""
+msgstr "symlinka"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 5f52120..e5a344f 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -1,6 +1,6 @@
 # Slovenian translations for Gollem packaga
 # Slovenski prevod Gollem paketa
-# Copyright (C) 2006 Horde Project
+# Copyright 2006-2009 The Horde Project
 # This file is distributed under the same license as the horde package.
 # Automatically generated, 2006.
 #
diff --git a/po/sv_SE.po b/po/sv_SE.po
index f8b31d5..9c27153 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -1,103 +1,95 @@
 # Gollem Swedish translation
-# Copyright (C) 2002-2006 Horde Project
-# This file is distributed under the same license as the Gollem package.
-# Joaquim Homrighausen <joho at webbplatsen.se>, 2006.
+# Copyright 2002-2005 Andreas Dahlén.
 # Andreas Dahlén <andreas at dahlen.ws>, 2005.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Gollem 1.02\n"
+"Project-Id-Version: Gollem 0.0.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-02-28 20:53+0100\n"
-"PO-Revision-Date: 2006-02-28 21:13+0100\n"
-"Last-Translator: Joaquim Homrighausen <joho at webbplatsen.se>\n"
+"POT-Creation-Date: 2005-06-14 22:08+0200\n"
+"PO-Revision-Date: 2005-06-16 08:48+0100\n"
+"Last-Translator: Andreas Dahlén <andreas at dahlen.ws>\n"
 "Language-Team: Swedish <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: manager.php:52
-#, php-format
-msgid "\"%s\" renamed to \"%s\""
-msgstr "'%s' döptes om till '%s'"
-
-#: quota.php:59
-#, php-format
-msgid "%.2fMB / %.2fMB  (%.2f%%)"
-msgstr "%.2fMB / %.2fMB  (%2f%%)"
-
-#: manager.php:260 templates/manager/header.inc:93
+#: templates/manager/header.inc:639
 #, php-format
 msgid "%d items"
 msgstr "%d poster"
 
-#: manager.php:414
+#: templates/manager/file_headers.inc:22
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s mappar och %s filer (%s Kb)"
 
-#: manager.php:412
+#: templates/manager/file_headers.inc:20
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s mappar och 1 fil (%s Kb)"
 
-#: login.php:143 templates/login/login.inc:88 templates/login/nologin.inc:8
+#: templates/login/login.inc:72 templates/xppublish/backend.inc:10
 #, php-format
 msgid "%s Login"
 msgstr "%s inloggning"
 
-#: manager.php:159
+#: manager.php:171
 #, php-format
 msgid "%s was successfully pasted."
 msgstr "%s klistrades in."
 
-#: manager.php:409
+#: manager.php:67
+#, php-format
+msgid "'%s' renamed to '%s'"
+msgstr "namet på '%s' byttes till '%s'"
+
+#: templates/manager/file_headers.inc:17
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 mapp och %s fil (%s Kb)"
 
-#: manager.php:407
+#: templates/manager/file_headers.inc:15
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 mapp och 1 fil (%s Kb)"
 
-#: manager.php:260 templates/manager/header.inc:93
+#: templates/manager/header.inc:639
 msgid "1 item"
 msgstr "1 post"
 
-#: view.php:31
+#: view.php:23
 #, php-format
 msgid "Access denied to %s"
-msgstr "Åtkomst nekades till %s"
+msgstr "Access nekades till %s"
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
+#: lib/Gollem.php:119 lib/Gollem.php:413 lib/Gollem.php:448 lib/Gollem.php:471
 #: lib/Gollem.php:490
 #, php-format
 msgid "Access denied to folder \"%s\"."
-msgstr "Åtkomst nekad till mapp '%s'."
+msgstr "Access nekades till mapp '%s'."
 
-#: templates/manager/header.inc:118 templates/manager/manager.html:105
+#: templates/manager/header.inc:660
 msgid "Actions"
 msgstr "Åtgärder"
 
-#: selectlist.php:100
+#: templates/selectlist/footer.inc:3
 msgid "Add"
 msgstr "Lägg till"
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:234
 msgid "Add column"
 msgstr "Lägg till kolumn"
 
-#: templates/manager/header.inc:10 templates/manager/manager.html:9
+#: templates/manager/header.inc:499
 msgid "All"
 msgstr "Alla"
 
-#: templates/manager/javascript.inc:204
+#: templates/manager/header.inc:180
 msgid "Are you sure you wish to continue?"
 msgstr "Är det säkert att du vill fortsätta?"
 
-#: templates/manager/javascript.inc:200
+#: templates/manager/header.inc:176
 msgid "Are you sure?"
 msgstr "Är du säker?"
 
@@ -105,15 +97,15 @@ msgstr "
 msgid "Ascending"
 msgstr "Stigande"
 
-#: config/prefs.php.dist:93
+#: config/prefs.php.dist:94
 msgid "Ask"
 msgstr "Fråga"
 
-#: templates/manager/header.inc:4 templates/manager/manager.html:3
+#: templates/manager/header.inc:493
 msgid "Attributes"
 msgstr "Attribut"
 
-#: templates/prefs/columnselect.html:20
+#: templates/prefs/columnselect.inc:230
 msgid "Available Columns:"
 msgstr "Tillgängliga kolumner:"
 
@@ -121,52 +113,52 @@ msgstr "Tillg
 msgid "Backends"
 msgstr "Backends"
 
-#: templates/clipboard/clipboard.html:11
-msgid "Below is the current contents of your clipboard."
-msgstr "Nedan visas aktuellt innehåll i utklippshanteraren."
+#: templates/xppublish/browse.inc:7
+msgid "Browse to the folder to upload files to"
+msgstr "Bläddra till den mapp som filer skall laddas upp till"
 
-#: manager.php:254 selectlist.php:102 clipboard.php:36
-#: templates/manager/header.inc:32 templates/manager/header.inc:50
-#: templates/manager/header.inc:63 templates/manager/header.inc:76
+#: templates/manager/header.inc:521 templates/manager/header.inc:554
+#: templates/manager/header.inc:586 templates/manager/header.inc:618
+#: templates/selectlist/footer.inc:5
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: manager.php:72
+#: manager.php:89
 #, php-format
 msgid "Cannot chmod %s"
-msgstr "Kan inte äntra rättigheter för %s"
+msgstr "Kan inte chmod %s"
 
-#: manager.php:133
+#: manager.php:147
 msgid "Cannot copy items onto clipboard."
-msgstr "Kan inte kopiera poster till utklippshanteraren."
+msgstr "Kan inte kopiera poster till klippbord."
 
-#: manager.php:192
+#: manager.php:194
 #, php-format
 msgid "Cannot create home directory: %s"
 msgstr "Kan inte skapa hemmamapp: %s"
 
-#: manager.php:135
+#: manager.php:149
 msgid "Cannot cut items onto clipboard."
-msgstr "Kan inte klippa ut poster till utklippshanteraren."
+msgstr "Kan inte klippa ut poster till klippbord."
 
-#: manager.php:80
+#: manager.php:97
 #, php-format
-msgid "Cannot delete \"%s\": %s"
+msgid "Cannot delete '%s': %s"
 msgstr "Kan inte radera '%s': %s"
 
-#: manager.php:157
-#, fuzzy, php-format
-msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
-msgstr "Kan inte klistra in '%s' (utklippshanteraren rensad): %s"
+#: manager.php:169
+#, php-format
+msgid "Cannot paste '%s' (clipboard cleared): %s"
+msgstr "Kan inte klistra in '%s' (urklippshanteraren rensad): %s"
 
-#: templates/manager/header.inc:70 lib/Gollem.php:777
-#: templates/manager/manager.html:71
+#: lib/Gollem.php:751 templates/manager/header.inc:599
+#: templates/manager/header.inc:662
 msgid "Change Folder"
-msgstr "Byt mapp"
+msgstr "Ändra mapp"
 
-#: selectlist.php:110 templates/menu.inc:8 lib/Gollem.php:819
+#: templates/menu.inc:8 templates/selectlist/header.inc:17
 msgid "Change Server"
-msgstr "Ändra server"
+msgstr "_Ändra server"
 
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
@@ -176,75 +168,37 @@ msgstr "
 msgid "Change your file sorting options."
 msgstr "Ändra inställningar för sortering av filer."
 
-#: lib/Gollem.php:793
-msgid "Check Quota"
-msgstr "Kontrollera kvota"
-
-#: manager.php:492
+#: templates/manager/file_headers.inc:28
 msgid "Check _All/None"
 msgstr "Markera _Alla/Ingen"
 
-#: templates/manager/header.inc:126 templates/manager/manager.html:113
+#: templates/manager/header.inc:675
 msgid "Chmod Items"
 msgstr "Chmod poster"
 
-#: manager.php:70
+#: manager.php:87
 msgid "Chmod done: "
 msgstr "Chmod klar: "
 
-#: templates/prefs/columnselect.html:12
+#: templates/prefs/columnselect.inc:224
 msgid "Choose the columns to display in the file manager."
 msgstr "Välj kolumner som visas i filhanteraren."
 
-#: clipboard.php:37
-msgid "Clear"
-msgstr "Rensa"
-
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr "Utklippshanteraren"
-
-#: quota.php:31
-msgid "Close"
-msgstr "Stäng"
-
-#: login.php:254 templates/login/login.inc:111
+#: templates/login/login.inc:95 templates/xppublish/backend.inc:33
 #, php-format
 msgid "Connect to: %s"
 msgstr "Anslut till: %s"
 
-#: clipboard.php:40
-msgid "Copy"
-msgstr "Kopiera"
-
-#: templates/manager/header.inc:128 templates/manager/manager.html:116
+#: templates/manager/header.inc:678
 msgid "Copy Items"
 msgstr "Kopiera poster"
 
-#: templates/manager/header.inc:57 lib/Gollem.php:774
-#: templates/manager/manager.html:57
+#: lib/Gollem.php:748 templates/manager/header.inc:567
+#: templates/manager/header.inc:665
 msgid "Create Folder"
 msgstr "Skapa mapp"
 
-#: permissions.php:47
-#, php-format
-msgid ""
-"Created empty permissions for \"%s\". You must explicitly grant access to "
-"this backend now."
-msgstr ""
-"Skapade tomma behörigheter för '%s'. Du måste uttryckligen ge åtkomst till "
-"denna databaskoppling nu."
-
-#: clipboard.php:41
-#, php-format
-msgid "Current directory: %s"
-msgstr "Aktuell katalog: %s"
-
-#: clipboard.php:39
-msgid "Cut"
-msgstr "Klipp ut"
-
-#: templates/manager/header.inc:127 templates/manager/manager.html:115
+#: templates/manager/header.inc:677
 msgid "Cut Items"
 msgstr "Klipp ut poster"
 
@@ -256,11 +210,11 @@ msgstr "F
 msgid "Default sorting direction:"
 msgstr "Förvald sorteringsriktning:"
 
-#: templates/manager/header.inc:123 templates/manager/manager.html:110
+#: templates/manager/header.inc:672
 msgid "Delete Items"
-msgstr "Radera poster"
+msgstr "Radera post"
 
-#: config/prefs.php.dist:95
+#: config/prefs.php.dist:96
 msgid "Delete folders recursively?"
 msgstr "Radera mappar rekursivt?"
 
@@ -268,33 +222,28 @@ msgstr "Radera mappar rekursivt?"
 msgid "Descending"
 msgstr "Fallande"
 
-#: selectlist.php:101
+#: templates/selectlist/footer.inc:4
 msgid "Done"
 msgstr "Klar"
 
-#: manager.php:214
+#: manager.php:222 templates/manager/file_headers.inc:42
 msgid "Download"
 msgstr "Hämta"
 
-#: manager.php:381
+#: xppublish.php:138
 #, php-format
-msgid "Download %s"
-msgstr "Hämta %s"
-
-#: templates/quota/quota.html:7
-msgid "ERROR:"
-msgstr "FEL:"
+msgid "ERROR: %s"
+msgstr "Fel: %s"
 
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "E-post"
 
-#: templates/manager/header.inc:25 templates/manager/manager.html:24
+#: templates/manager/header.inc:514
 msgid "Execute"
 msgstr "Kör"
 
-#: templates/manager/javascript.inc:487 templates/manager/header.inc:106
-#: templates/manager/manager.html:179
+#: templates/manager/header.inc:464 templates/manager/header.inc:649
 msgid "File"
 msgstr "Fil"
 
@@ -318,208 +267,186 @@ msgstr "Filstorlek"
 msgid "File Type"
 msgstr "Filtyp"
 
-#: manager.php:76
+#: templates/xppublish/javascript.inc:63
+msgid "File Upload"
+msgstr "Ladda upp"
+
+#: manager.php:93
 msgid "File deleted: "
 msgstr "Fil raderad: "
 
-#: manager.php:101
+#: manager.php:120
 #, php-format
 msgid "File received: %s"
 msgstr "Fil mottagen: %s"
 
-#: manager.php:78
+#: manager.php:95
 msgid "Folder removed: "
 msgstr "Mapp raderad: "
 
-#: templates/manager/header.inc:72 templates/manager/manager.html:73
+#: templates/manager/header.inc:607
 msgid "Go to:"
 msgstr "Gå till:"
 
-#: permissions.php:21
-msgid "Gollem Backend Permissions Administration"
-msgstr "Gollem behörighetsadministration"
-
-#: manager.php:471 templates/manager/header.inc:9
-#: templates/manager/manager.html:8
+#: templates/manager/header.inc:498 templates/manager/file_headers.inc:64
 msgid "Group"
 msgstr "Grupp"
 
-#: lib/Gollem.php:770
+#: lib/Gollem.php:744
 msgid "Home"
 msgstr "Hem"
 
-#: manager.php:56
+#: manager.php:71
 msgid "Incorrect number of items."
 msgstr "Felaktigt antal poster."
 
-#: manager.php:126
+#: manager.php:140
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "Poster kopierade till klippbord: %s"
 
-#: manager.php:128
+#: manager.php:142
 #, php-format
 msgid "Item cut to clipboard: %s"
-msgstr "Poster flyttade till utklippshanteraren: %s"
-
-#: templates/login/login.inc:136 templates/login/login.html:67
-msgid "Language"
-msgstr "Språk"
+msgstr "Poster urklippta till klippbord: %s"
 
 #: config/prefs.php.dist:81
 msgid "List folders first?"
 msgstr "Visa mappar först?"
 
-#: templates/login/login.inc:145
+#: templates/login/login.inc:119
 msgid "Log in"
 msgstr "Logga in"
 
-#: login.php:303
-msgid "Login"
-msgstr "Login"
-
-#: quota.php:62
-msgid "MB free"
-msgstr "MB lediga"
-
-#: quota.php:62
-msgid "MB used"
-msgstr "MB använda"
+#: templates/xppublish/login.inc:2
+#, php-format
+msgid "Login to %s"
+msgstr "Logga in på %s"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "Menylista"
 
-#: manager.php:445
+#: templates/manager/file_headers.inc:47
 msgid "Modified"
 msgstr "Ändrad"
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:244
 msgid "Move left"
 msgstr "Flytta vänster"
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:246
 msgid "Move right"
 msgstr "Flytta höger"
 
-#: manager.php:432
+#: templates/manager/file_headers.inc:38
 msgid "Name"
 msgstr "Namn"
 
-#: templates/manager/header.inc:46 templates/manager/header.inc:59
-#: templates/manager/manager.html:45 templates/manager/manager.html:59
+#: templates/manager/header.inc:543 templates/manager/header.inc:575
 msgid "Name:"
 msgstr "Namn:"
 
-#: manager.php:35
+#: manager.php:48
 msgid "New folder created: "
 msgstr "Ny mapp skapades: "
 
-#: config/prefs.php.dist:91
+#: config/prefs.php.dist:92
 msgid "No"
 msgstr "Nej"
 
-#: templates/quota/quota.html:12
-msgid "No quota found."
-msgstr "Kvota saknas."
-
-#: manager.php:255 templates/manager/header.inc:49
-#: templates/manager/header.inc:62 templates/manager/header.inc:75
+#: templates/manager/header.inc:553 templates/manager/header.inc:585
+#: templates/manager/header.inc:617
 msgid "OK"
 msgstr "OK"
 
-#: manager.php:465 templates/manager/header.inc:8
-#: templates/manager/manager.html:7
+#: templates/manager/header.inc:497 templates/manager/file_headers.inc:60
 msgid "Owner"
 msgstr "Ägare"
 
-#: config/credentials.php.dist:23
+#: templates/xppublish/login.inc:14 config/credentials.php.dist:23
 msgid "Password"
 msgstr "Lösenord"
 
-#: clipboard.php:38
-msgid "Paste"
-msgstr "Klistra in"
+#: templates/manager/header.inc:684
+msgid "Paste Items"
+msgstr "Klistra in post"
 
-#: manager.php:459
+#: templates/manager/file_headers.inc:56
 msgid "Permission"
 msgstr "Behörighet"
 
-#: selectlist.php:63
+#: selectlist.php:65 templates/xppublish/browse.inc:28
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "Behörighet nekades till %s: %s"
 
-#: manager.php:200
+#: manager.php:202
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
 msgstr "Behörighet nekades till mapp '%s': %s"
 
-#: lib/Gollem.php:783
-msgid "Permissions"
-msgstr "Behörigheter"
+#: xppublish.php:55
+msgid "Please enter your Username and Password."
+msgstr "Ange ditt användarnamn och lösenord."
 
-#: templates/login/login.inc:49 templates/login/javascript.inc:36
+#: templates/login/login.inc:36
 msgid "Please provide your password."
 msgstr "Ange ditt lösenord."
 
-#: templates/login/login.inc:44 templates/login/javascript.inc:31
+#: templates/login/login.inc:31
 msgid "Please provide your username."
 msgstr "Ange ditt användarnamn."
 
-#: templates/prefs/columnselect.html:5
+#: templates/prefs/columnselect.inc:215
 msgid "Please select a backend:"
-msgstr "Välj databaskoppling:"
+msgstr "Völj backend:"
 
-#: templates/manager/javascript.inc:134
+#: templates/manager/header.inc:109
 msgid "Please select an item before this action."
 msgstr "Välj en post först."
 
-#: templates/manager/javascript.inc:458
+#: templates/manager/header.inc:435
 msgid "Please specify at least one file to upload."
 msgstr "Ange minst en fil att ladda upp."
 
-#: quota.php:18 templates/quota/quota.html:2
-msgid "Quota Display"
-msgstr "Kvota"
-
-#: quota.php:61
-msgid "Quota Usage"
-msgstr "Kvotastatus"
-
-#: templates/manager/header.inc:13 templates/manager/manager.html:12
+#: templates/manager/header.inc:502
 msgid "Read"
 msgstr "Läs"
 
-#: manager.php:262 templates/manager/header.inc:96
+#: templates/manager/header.inc:642
 msgid "Refresh"
-msgstr "Uppdatera"
+msgstr "Förnya"
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:236
 msgid "Remove column"
 msgstr "Ta bort kolumn"
 
-#: templates/manager/header.inc:44 templates/manager/manager.html:43
+#: templates/manager/header.inc:535
 msgid "Rename"
 msgstr "Byt namn"
 
-#: templates/manager/header.inc:120 templates/manager/manager.html:107
+#: templates/manager/header.inc:669
 msgid "Rename Items"
 msgstr "Byt namn på poster"
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
+#: lib/Gollem.php:710 lib/Gollem.php:715
 msgid "Root"
 msgstr "Root"
 
-#: manager.php:253 templates/manager/header.inc:31
+#: templates/manager/header.inc:520
 msgid "Save"
 msgstr "Spara"
 
-#: templates/prefs/columnselect.html:30
+#: templates/xppublish/backend.inc:27
+msgid "Select"
+msgstr "Välj"
+
+#: templates/prefs/columnselect.inc:240
 msgid "Selected Columns:"
 msgstr "Valda kolumner:"
 
-#: templates/login/login.inc:101 templates/login/login.html:31
+#: templates/login/login.inc:85 templates/xppublish/backend.inc:22
 msgid "Server"
 msgstr "Server"
 
@@ -531,113 +458,136 @@ msgstr "Inst
 msgid "Show dotfiles?"
 msgstr "Visa punktfiler?"
 
-#: manager.php:452
+#: templates/manager/file_headers.inc:52
 msgid "Size"
 msgstr "Storlek"
 
-#: manager.php:478
+#: templates/manager/file_headers.inc:32 templates/manager/file_headers.inc:37
+#: templates/manager/file_headers.inc:46 templates/manager/file_headers.inc:51
 msgid "Sort Direction"
 msgstr "Sorteringsriktning"
 
-#: templates/manager/javascript.inc:204
+#: templates/manager/header.inc:180
 msgid "The following item(s) are folders: "
 msgstr "Följande post(er) är mappar: "
 
-#: templates/manager/javascript.inc:200
+#: templates/manager/header.inc:176
 msgid "The following items will be permanently deleted: "
 msgstr "Följande post(er) kommer att raderas: "
 
-#: templates/selectlist/javascript.inc:9
-msgid "The original opener window has been closed. Exiting."
-msgstr "Det ursprungliga fönstret har stängts. Avslutar."
-
-#: login.php:150
-msgid "There are no backends available for the current user."
-msgstr ""
-"Det finns ingen tillgänglig databaskoppling för den aktuella användaren."
-
-#: selectlist.php:193 templates/manager/empty_dir.inc:1
-#: templates/manager/manager.html:128
+#: templates/manager/empty_dir.inc:1 templates/selectlist/empty_dir.inc:2
 msgid "There are no files in this folder."
 msgstr "Det finns inga filer i aktuell mapp."
 
-#: templates/clipboard/clipboard.html:15
+#: templates/xppublish/browse.inc:74
 msgid ""
-"To clear items from the clipboard, check the box next to the filename and "
-"click on &quot;Clear&quot;."
+"There are no folders in the current folder; click 'Next' if you want to "
+"upload files to this folder."
 msgstr ""
-"För att ta bort poster från utklippshanteraren, markera rutan vid filnamnet "
-"och klicka på 'Rensa'."
+"Det finns inga mappar i aktuell mapp; klicka 'Nästa' om du vill ladda upp "
+"filer till aktuell mapp."
 
-#: templates/clipboard/clipboard.html:13
-msgid ""
-"To paste items from the clipboard to the current directory, check the box "
-"next to the filename and click on &quot;Paste&quot;."
-msgstr ""
-"För att klistra poster från utklippshanteraren, markera rutan vid filnamnet "
-"och klicka på 'Klistra in'."
-
-#: manager.php:425
+#: templates/manager/file_headers.inc:33
 msgid "Type"
 msgstr "Typ"
 
-#: permissions.php:42
-#, php-format
-msgid "Unable to create backend permission: %s"
-msgstr "Kan inte skapa kopplingsbehörighet: %s"
-
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: lib/Gollem.php:715 lib/Gollem.php:725
 #, php-format
 msgid "Up to %s"
 msgstr "Upp till %s"
 
-#: manager.php:274 templates/manager/header.inc:111
+#: templates/manager/header.inc:654
 msgid "Upload File(s)"
 msgstr "Ladda upp fil(er)"
 
+#: templates/xppublish/javascript.inc:63
+#, php-format
+msgid "Upload Files to %s"
+msgstr "Ladda upp filer till %s"
+
+#: xppublish.php:37
+#, php-format
+msgid "Upload to %s"
+msgstr "Ladda upp till %s"
+
+#: xppublish.php:25
+#, php-format
+msgid "Upload your files to %s on %s."
+msgstr "Ladda upp filer till %s på %s."
+
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
 msgstr "Användargränssnitt"
 
-#: config/credentials.php.dist:18
+#: templates/xppublish/login.inc:11 config/credentials.php.dist:18
 msgid "Username"
 msgstr "Användarnamn"
 
-#: manager.php:269 templates/manager/header.inc:98
-msgid "View Clipboard"
-msgstr "Visa utklippshanteraren"
+#: xppublish.php:51
+msgid "Username and Password are incorrect."
+msgstr "Felaktigt användarnamn och/eller lösenord."
 
-#: login.php:195
+#: login.php:167
 #, php-format
 msgid "Welcome to %s"
 msgstr "Välkommen till %s"
 
-#: templates/manager/header.inc:19 templates/manager/manager.html:18
+#: templates/xppublish/browse.inc:10
+msgid ""
+"When you are inside the folder you wish to upload to, click the 'Next' "
+"button to upload files."
+msgstr ""
+"När du är i den mapp som du vill ladda upp till, klicka på 'Nästa' för att "
+"ladda upp filer."
+
+#: templates/manager/header.inc:508
 msgid "Write"
 msgstr "Skriv"
 
-#: config/prefs.php.dist:92
+#: config/prefs.php.dist:93
 msgid "Yes"
 msgstr "Ja"
 
-#: permissions.php:25
-msgid "You need at least one backend defined to set permissions."
-msgstr ""
-"Det måste finnas minst en databaskoppling för att definera behörigheter."
+#: manager.php:52
+msgid "You do not have permission to create this folder."
+msgstr "Behörighet saknas för att skapa mapp."
+
+#: manager.php:153
+msgid "You do not have permission to cut/copy items."
+msgstr "Behörighet saknas för att kopiera/klippa ut poster."
+
+#: manager.php:103
+msgid "You do not have permission to delete or change permissions on items."
+msgstr "Behörighet saknas för att radera eller ändra behörigheter på poster."
+
+#: manager.php:179
+msgid "You do not have permission to paste items."
+msgstr "Behörighet saknas för att klistra in poster."
 
-#: lib/MIME/Viewer/images.php:35
+#: manager.php:74
+msgid "You do not have permission to rename items."
+msgstr "Börighet saknas för att byta namn på poster."
+
+#: manager.php:125
+msgid "You do not have permission to upload items."
+msgstr "Behörighet saknas för att ladda upp poster."
+
+#: lib/MIME/Viewer/images.php:39
 msgid "Your browser does not support inline display of this image type"
-msgstr "Din webbläsare stödjer inte inline-visning av den här bildtypen"
+msgstr "Din webläsare stödjer inte inline-visning av den här bildtypen"
+
+#: lib/Gollem.php:183 lib/Gollem.php:194
+msgid "[home]"
+msgstr "[hem]"
 
-#: templates/menu.inc:6 templates/menu.inc:19 lib/Gollem.php:817
-#: lib/Gollem.php:820
+#: templates/menu.inc:6 templates/menu.inc:19
 msgid "_Change Server"
-msgstr "Ändra server"
+msgstr "_Ändra server"
 
-#: manager.php:215 selectlist.php:74
+#: manager.php:223 selectlist.php:76
 msgid "folder"
 msgstr "mapp"
 
-#: manager.php:216 selectlist.php:75
+#: manager.php:224 selectlist.php:77
 msgid "symlink"
-msgstr "symlänk"
+msgstr "symlink"
diff --git a/po/tr_TR.po b/po/tr_TR.po
new file mode 100755
index 0000000..d6c5ae0
--- /dev/null
+++ b/po/tr_TR.po
@@ -0,0 +1,681 @@
+# Turkish translations for Gollem package
+# Dosya Yöneticisi paketi için Türkçe çeviriler.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the Gollem package.
+# horde-tr at metu.edu.tr, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Gollem H3 (1.1-cvs)\n"
+"Report-Msgid-Bugs-To: dev at lists.horde.org\n"
+"POT-Creation-Date: 2008-04-15 12:57+0300\n"
+"PO-Revision-Date: 2008-04-15 12:57+0300\n"
+"Last-Translator: Emre Sezginer\n"
+"Language-Team: i18n at lists.horde.org\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: manager.php:54
+#, php-format
+msgid "\"%s\" renamed to \"%s\""
+msgstr "\"%s\", \"%s\" olarak yeniden isimlendirilmiþtir"
+
+#: quota.php:56
+#, php-format
+msgid "%.2fMB / %.2fMB  (%.2f%%)"
+msgstr "%.2fMB / %.2fMB  (%.2f%%)"
+
+#: manager.php:273
+#, php-format
+msgid "%d items"
+msgstr "%d madde"
+
+#: manager.php:435
+#, php-format
+msgid "%s Folders and %s Files (%s Kb)"
+msgstr "%s Dizin ve %s Dosya (%s KB)"
+
+#: manager.php:433
+#, php-format
+msgid "%s Folders and 1 File (%s Kb)"
+msgstr "%s Dizin ve 1 Dosya (%s KB)"
+
+#: login.php:144
+#, php-format
+msgid "%s Login"
+msgstr "%s Giriþ"
+
+#: edit.php:35
+#, php-format
+msgid "%s successfully saved."
+msgstr "%s baþarýlý olarak kaydedildi."
+
+#: manager.php:169
+#, php-format
+msgid "%s was successfully pasted."
+msgstr "%s baþarýlý olarak yapýþtýrýldý."
+
+#: manager.php:430
+#, php-format
+msgid "1 Folder and %s Files (%s Kb)"
+msgstr "1 Dizin ve %s Dosya (%s KB)"
+
+#: manager.php:428
+#, php-format
+msgid "1 Folder and 1 File (%s Kb)"
+msgstr "1 Dizin und 1 Dosya (%s KB)"
+
+#: manager.php:273
+msgid "1 item"
+msgstr "1 madde"
+
+#: templates/javascript_defs.php:14
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+"Pop-up pencere açýlamadý. Tarayýcýnýzýn pop-up pencere "
+"açýlmasýnýengellemediðinden emin olunuz."
+
+#: edit.php:33 edit.php:43 view.php:35 view.php:42
+#, php-format
+msgid "Access denied to %s"
+msgstr "%s için eriþim engellendi"
+
+#: lib/Gollem.php:109 lib/Gollem.php:383 lib/Gollem.php:445 lib/Gollem.php:466
+#: lib/Gollem.php:483
+#, php-format
+msgid "Access denied to folder \"%s\"."
+msgstr "\"%s\" dizinine eriþim engellendi."
+
+#: templates/manager/manager.html:124
+msgid "Actions:"
+msgstr "Eylemler:"
+
+#: selectlist.php:99
+msgid "Add"
+msgstr "Ekle"
+
+#: templates/prefs/columnselect.inc:43
+msgid "Add column"
+msgstr "Kolon ekle"
+
+#: templates/manager/manager.html:11
+msgid "All"
+msgstr "Tümü"
+
+#: templates/javascript_defs.php:25
+msgid "Are you sure you wish to continue?"
+msgstr "Devam etmek istediðinize emin misiniz?"
+
+#: templates/javascript_defs.php:23
+msgid "Are you sure?"
+msgstr "Emin misiniz?"
+
+#: config/prefs.php.dist:69
+msgid "Ascending"
+msgstr "Artan"
+
+#: config/prefs.php.dist:93
+msgid "Ask"
+msgstr "Sor"
+
+#: templates/manager/manager.html:5
+msgid "Attributes"
+msgstr "Özellikler"
+
+#: templates/prefs/columnselect.html:20
+msgid "Available Columns:"
+msgstr "Kullanýlabilir Kolonlar:"
+
+#: lib/api.php:483
+msgid "Backends"
+msgstr "Arka Araçlar"
+
+#: templates/clipboard/clipboard.html:11
+msgid "Below is the current contents of your clipboard."
+msgstr "Unten sehen Sie den aktuellen Inhalt der Zwischenablage."
+
+#: manager.php:268 selectlist.php:101 clipboard.php:38
+#: templates/edit/edit.inc:13
+msgid "Cancel"
+msgstr "Ýptal"
+
+#: manager.php:74
+#, php-format
+msgid "Cannot chmod %s: %s"
+msgstr "%s için izin %s yapýlamadý."
+
+#: manager.php:143
+msgid "Cannot copy items onto clipboard."
+msgstr "Maddeler, panoya kopyalanamadý."
+
+#: manager.php:202
+#, php-format
+msgid "Cannot create home directory: %s"
+msgstr "Ev dizini %s yaratýlamadý."
+
+#: manager.php:145
+msgid "Cannot cut items onto clipboard."
+msgstr "Maddeler kesilip, panoya aktarilamadý."
+
+#: manager.php:167
+#, php-format
+msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
+msgstr "\"%s\" yapýþtýrýlamadý (dosya panodan kaldýrýldý): %s"
+
+#: templates/manager/manager.html:70
+msgid "Change Folder"
+msgstr "Dizini Deðiþtir"
+
+#: templates/manager/manager.html:126
+msgid "Change Permissions"
+msgstr "Ýzinleri Deðiþtir"
+
+#: selectlist.php:109 lib/Gollem.php:816
+msgid "Change Server"
+msgstr "Sunucu Deðiþtir"
+
+#: lib/Gollem.php:773
+msgid "Change _Folder"
+msgstr "_Dizin Deðiþtir"
+
+#: config/prefs.php.dist:21
+msgid "Change file and folder handling settings."
+msgstr "Dosya ve dizin kullama ayarlarýný deðiþtir."
+
+#: config/prefs.php.dist:14
+msgid "Change your file sorting options."
+msgstr "Dosya sýralama seçeneklerini deðiþtir."
+
+#: lib/Gollem.php:791
+msgid "Check Quota"
+msgstr "Kotayý Kontrol Et"
+
+#: manager.php:526
+msgid "Check _All/None"
+msgstr "_Hepsini/Hiçbirini Seç"
+
+#: manager.php:72
+msgid "Chmod done: "
+msgstr "Ýzin deðiþimi yapýldý:"
+
+#: templates/prefs/columnselect.html:12
+msgid "Choose the columns to display in the file manager."
+msgstr "Dosya yöneticisinde görüntülenecek kolonlarý seçiniz."
+
+#: clipboard.php:39
+msgid "Clear"
+msgstr "Temizle"
+
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
+msgid "Clipboard"
+msgstr "Pano"
+
+#: quota.php:32
+msgid "Close"
+msgstr "Kapat"
+
+#: login.php:258
+#, php-format
+msgid "Connect to: %s"
+msgstr "%s sunucusuna baðlan"
+
+#: clipboard.php:42 templates/manager/manager.html:129
+msgid "Copy"
+msgstr "Kopyala"
+
+#: lib/Template.php:234
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Derlenen geçici dosya, '%s' saklanamadý."
+
+#: templates/manager/manager.html:58
+msgid "Create Folder"
+msgstr "Dizin Yarat"
+
+#: permissions.php:47
+#, php-format
+msgid ""
+"Created empty permissions for \"%s\". You must explicitly grant access to "
+"this backend now."
+msgstr ""
+"\"%s\" için boþ izin yaratýldý. Þimdi bu arka araç için açýkca izin "
+"vermelisiniz."
+
+#: templates/clipboard/clipboard.html:17
+msgid "Current directory:"
+msgstr "Geçerli olan dizin:"
+
+#: clipboard.php:41 templates/manager/manager.html:130
+msgid "Cut"
+msgstr "Kes"
+
+#: config/prefs.php.dist:59
+msgid "Default sorting criteria:"
+msgstr "Varsayýlan sýralama ölçütü:"
+
+#: config/prefs.php.dist:72
+msgid "Default sorting direction:"
+msgstr "Varsayýlan sýralama yönü:"
+
+#: templates/manager/manager.html:133
+msgid "Delete"
+msgstr "Sil"
+
+#: config/prefs.php.dist:95
+msgid "Delete folders recursively?"
+msgstr "Dizinler özyineli olarak silinsin mi?"
+
+#: config/prefs.php.dist:70
+msgid "Descending"
+msgstr "Azalan"
+
+#: selectlist.php:100
+msgid "Done"
+msgstr "Tamam"
+
+#: manager.php:228
+msgid "Download"
+msgstr "Ýndir"
+
+#: manager.php:402
+#, php-format
+msgid "Download %s"
+msgstr "%s indir"
+
+#: templates/quota/quota.html:7
+msgid "ERROR:"
+msgstr "HATA:"
+
+#: manager.php:227
+msgid "Edit"
+msgstr "Düzenle"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Düzenle %s"
+
+#: config/credentials.php.dist:28
+msgid "Email"
+msgstr "Eposta"
+
+#: templates/manager/manager.html:26
+msgid "Execute"
+msgstr "Çalýþtýr"
+
+#: templates/javascript_defs.php:27 templates/manager/manager.html:203
+msgid "File"
+msgstr "Dosya"
+
+#: config/prefs.php.dist:13
+msgid "File Display"
+msgstr "Dosya Görüntüle"
+
+#: config/prefs.php.dist:56
+msgid "File Modification Time"
+msgstr "Dosya Deðiþim Saati"
+
+#: config/prefs.php.dist:55
+msgid "File Name"
+msgstr "Dosya Adý"
+
+#: config/prefs.php.dist:57
+msgid "File Size"
+msgstr "Dosya Boyutu"
+
+#: config/prefs.php.dist:54
+msgid "File Type"
+msgstr "Dosya Tipi"
+
+#: manager.php:89
+msgid "File deleted: "
+msgstr "Dosya silindi: "
+
+#: manager.php:111
+#, php-format
+msgid "File received: %s"
+msgstr "Dosya alýndý: %s"
+
+#: lib/api.php:223
+msgid "Files must be written inside a VFS backend."
+msgstr ""
+"Dosyalar, bir VFS (sanal dosya sistemi) arka aracý içerisine yazýlmalýdýr."
+
+#: manager.php:82
+msgid "Folder removed: "
+msgstr "Dizin silindi: "
+
+#: lib/api.php:286 lib/api.php:292 lib/api.php:352
+msgid "Folders must be created inside a VFS backend."
+msgstr ""
+"Dizinler, bir VFS (sanal dosya sistemi) arka aracý içerisine yazýlmalýdýr."
+
+#: templates/manager/manager.html:72
+msgid "Go to:"
+msgstr "Git:"
+
+#: permissions.php:21
+msgid "Gollem Backend Permissions Administration"
+msgstr "Gollem Arka Araç Ýzin Yönetimi"
+
+#: manager.php:506 templates/manager/manager.html:10
+msgid "Group"
+msgstr "Grup"
+
+#: manager.php:58
+msgid "Incorrect number of items."
+msgstr "Yanlýþ sayýda madde."
+
+#: lib/api.php:117 lib/api.php:235 lib/api.php:299 lib/api.php:376
+#: lib/api.php:441
+#, php-format
+msgid "Invalid backend requested: %s"
+msgstr "Geçersiz arka araç istemi: %s"
+
+#: manager.php:136
+#, php-format
+msgid "Item copied to clipboard: %s"
+msgstr "Madde, panoya kopyalandý: %s"
+
+#: manager.php:138
+#, php-format
+msgid "Item cut to clipboard: %s"
+msgstr "Madde, kesildi ve panoya yerleþtirildi: %s"
+
+#: templates/login/login.html:68
+msgid "Language"
+msgstr "Dil"
+
+#: config/prefs.php.dist:81
+msgid "List folders first?"
+msgstr "Dizinler önce listelensin mi?"
+
+#: login.php:307
+msgid "Login"
+msgstr "Giriþ"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menü Listesi"
+
+#: manager.php:476
+msgid "Modified"
+msgstr "Deðiþtirildi"
+
+#: templates/prefs/columnselect.inc:45
+msgid "Move left"
+msgstr "Sola taþý"
+
+#: templates/prefs/columnselect.inc:46
+msgid "Move right"
+msgstr "Saða taþý"
+
+#: manager.php:454
+msgid "Name"
+msgstr "Ad"
+
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
+msgid "Name:"
+msgstr "Ad:"
+
+#: manager.php:37
+msgid "New folder created: "
+msgstr "Yeni dizin yaratýldý: "
+
+#: config/prefs.php.dist:91
+msgid "No"
+msgstr "Hayýr"
+
+#: templates/quota/quota.html:12
+msgid "No quota found."
+msgstr "Kota bulunamadý."
+
+#: manager.php:269
+msgid "OK"
+msgstr "Tamam"
+
+#: manager.php:499 templates/manager/manager.html:9
+msgid "Owner"
+msgstr "Sahip"
+
+#: config/credentials.php.dist:23
+msgid "Password"
+msgstr "Þifre"
+
+#: clipboard.php:40
+msgid "Paste"
+msgstr "Yapýþtýr"
+
+#: manager.php:492
+msgid "Permission"
+msgstr "Ýzin"
+
+#: selectlist.php:64
+#, php-format
+msgid "Permission denied to %s: %s"
+msgstr "%s için izin yok: %s"
+
+#: manager.php:210
+#, php-format
+msgid "Permission denied to folder \"%s\": %s"
+msgstr "\"%s\" dizini için izin yok: %s"
+
+#: lib/api.php:128 lib/api.php:246 lib/api.php:310 lib/api.php:387
+#: lib/api.php:452
+msgid "Permission denied to this backend."
+msgstr "Bu arka araç için izin yok."
+
+#: templates/javascript_defs.php:18
+msgid "Please provide your password."
+msgstr "Lütfen þifrenizi giriniz."
+
+#: templates/javascript_defs.php:17
+msgid "Please provide your username."
+msgstr "Lütfen kullanýcý adýnýzý giriniz."
+
+#: templates/prefs/columnselect.html:5
+msgid "Please select a backend:"
+msgstr "Lütfen bir arka araç seçiniz"
+
+#: templates/javascript_defs.php:21
+msgid "Please select an item before this action."
+msgstr "Lütfen bu eylem için bir madde seçiniz."
+
+#: templates/javascript_defs.php:26
+msgid "Please specify at least one file to upload."
+msgstr "Lütfen yüklemek için en az bir dosya belirtiniz."
+
+#: quota.php:19 templates/quota/quota.html:2
+msgid "Quota Display"
+msgstr "Kota Görüntüle"
+
+#: templates/manager/manager.html:14
+msgid "Read"
+msgstr "Okuma"
+
+#: manager.php:275
+msgid "Refresh"
+msgstr "Tazale"
+
+#: templates/prefs/columnselect.inc:44
+msgid "Remove column"
+msgstr "Kolonu kaldýr"
+
+#: templates/manager/manager.html:44 templates/manager/manager.html:136
+msgid "Rename"
+msgstr "Ýsim deðiþtir"
+
+#: lib/api.php:370
+msgid "Renaming across backends is not supported."
+msgstr "Arka araçlar arasý isim deðiþimi desteklenmemektedir."
+
+#: lib/api.php:358 lib/api.php:366
+msgid "Renaming of backends is not allowed."
+msgstr "Arka araçlarýn isimleri deðiþtirilemez."
+
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Sýfýrla"
+
+#: lib/Gollem.php:730 lib/Gollem.php:735
+msgid "Root"
+msgstr "Kök"
+
+#: manager.php:267 templates/edit/edit.inc:11
+msgid "Save"
+msgstr "Kaydet"
+
+#: templates/prefs/columnselect.html:30
+msgid "Selected Columns:"
+msgstr "Seçilen Kolonlar:"
+
+#: templates/login/login.html:32
+msgid "Server"
+msgstr "Sunucu"
+
+#: config/prefs.php.dist:20
+msgid "Settings"
+msgstr "Ayarlar"
+
+#: config/prefs.php.dist:30
+msgid "Show dotfiles?"
+msgstr "Nokta ile baþlayan dosyalar görüntülensin mi?"
+
+#: manager.php:484
+msgid "Size"
+msgstr "Boyut"
+
+#: lib/api.php:429
+msgid "The application folder can not be deleted."
+msgstr "Uygulama dizini silinemez."
+
+#: templates/javascript_defs.php:24
+msgid "The following item(s) are folders:"
+msgstr "Bu maddeler dizindir:"
+
+#: templates/javascript_defs.php:22
+msgid "The following items will be permanently deleted:"
+msgstr "Bu maddeler kalýcý olarak silinecektir:"
+
+#: templates/javascript_defs.php:30
+msgid "The original opener window has been closed. Exiting."
+msgstr "Kaynak pencere kapatýldý. Çýkýlýyor."
+
+#: login.php:151
+msgid "There are no backends available for the current user."
+msgstr "Bu kullanýcý için, hiç kullanýlabilir arka araç yok."
+
+#: selectlist.php:199 templates/manager/manager.html:147
+msgid "There are no files in this folder."
+msgstr "Bu dizinde hiç dosya yok."
+
+#: templates/clipboard/clipboard.html:15
+msgid ""
+"To clear items from the clipboard, check the box next to the filename and "
+"click on &quot;Clear&quot;."
+msgstr ""
+"Panodan maddeleri silmek için, yanýndaki kutucuðu iþaretleyip, &quot;"
+"Temizle&quot; ye týklayýnýz."
+
+#: templates/clipboard/clipboard.html:13
+msgid ""
+"To paste items from the clipboard to the current directory, check the box "
+"next to the filename and click on &quot;Paste&quot;."
+msgstr ""
+"Panodaki maddeleri geçerli dizine yapýþtýrmak için, yanýndaki kutucuðu "
+"iþaretleyip, &quot;Yapýþtýr&quot; a týklayýnýz."
+
+#: manager.php:446
+msgid "Type"
+msgstr "Tip"
+
+#: lib/api.php:125 lib/api.php:243 lib/api.php:307 lib/api.php:384
+#: lib/api.php:449
+msgid "Unable to create Gollem session"
+msgstr "Gollem oturumu açýlamadý"
+
+#: permissions.php:42
+#, php-format
+msgid "Unable to create backend permission: %s"
+msgstr "Arka araç izni yaratýlamadý: %s"
+
+#: manager.php:87
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "\"%s\" dosyasý silinemedi: %s"
+
+#: manager.php:80
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "\"%s\" dizini silinemedi: %s"
+
+#: lib/Gollem.php:735 lib/Gollem.php:745
+#, php-format
+msgid "Up to %s"
+msgstr "%s e kadar"
+
+#: manager.php:288
+msgid "Upload File(s)"
+msgstr "Dosya Yükleme"
+
+#: config/prefs.php.dist:12 config/prefs.php.dist:19
+msgid "User Interface"
+msgstr "Kullanýcý Arayüzü"
+
+#: config/credentials.php.dist:18
+msgid "Username"
+msgstr "Kullanýcý Adý"
+
+#: manager.php:283
+msgid "View Clipboard"
+msgstr "Panoyu Göster"
+
+#: login.php:201
+#, php-format
+msgid "Welcome to %s"
+msgstr "%s Hoþgeldiniz"
+
+#: templates/manager/manager.html:20
+msgid "Write"
+msgstr "Yazma"
+
+#: config/prefs.php.dist:92
+msgid "Yes"
+msgstr "Evet"
+
+#: permissions.php:25
+msgid "You need at least one backend defined to set permissions."
+msgstr ""
+"Ýzinleri belirleyebilmek için en az bir arka araç tanýmlanmýþ olmalýdýr."
+
+#: lib/MIME/Viewer/images.php:35
+msgid "Your browser does not support inline display of this image type"
+msgstr "Tarayýcýnýzýn, bu resim türünü içsel olarak görüntüleme desteði yok"
+
+#: lib/Gollem.php:814 lib/Gollem.php:817
+msgid "_Change Server"
+msgstr "_Sunucu Deðiþtir"
+
+#: lib/Gollem.php:770
+msgid "_Create Folder"
+msgstr "_Dizin Yarat"
+
+#: lib/Gollem.php:766
+msgid "_My Home"
+msgstr "_Evim"
+
+#: lib/Gollem.php:780
+msgid "_Permissions"
+msgstr "_Haklar"
+
+#: manager.php:229 selectlist.php:75
+msgid "folder"
+msgstr "dizin"
+
+#: manager.php:230 selectlist.php:76
+msgid "symlink"
+msgstr "symbolik bað"
diff --git a/po/gollem.pot b/po/uk_UA.po
similarity index 50%
copy from po/gollem.pot
copy to po/uk_UA.po
index 0ed957c..0dd0d7e 100644
--- a/po/gollem.pot
+++ b/po/uk_UA.po
@@ -1,122 +1,134 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Horde Project
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Ukrainian translations for Gollem package.
+# Copyright 2007-2009 The Horde Project
+# This file is distributed under the same license as the Gollem package.
+# Automatically generated, 2007.
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: Gollem H3 (1.1-cvs)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-11-03 23:12+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"POT-Creation-Date: 2007-06-18 13:25+0300\n"
+"PO-Revision-Date: 2007-06-19 12:05+0300\n"
+"Last-Translator: Andriy Kopystyansky <webmaster at polynet.lviv.ua>\n"
+"Language-Team: Ukrainian <anri at polynet.lviv.ua>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Type: text/plain; charset=CP1251\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
 #: manager.php:52
 #, php-format
 msgid "\"%s\" renamed to \"%s\""
-msgstr ""
+msgstr "\"%s\" ïåðåéìåíîâàíî íà \"%s\""
 
-#: quota.php:59
+#: quota.php:56
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
-msgstr ""
+msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:268
+#: manager.php:271
 #, php-format
 msgid "%d items"
-msgstr ""
+msgstr "%d items"
 
-#: manager.php:415
+#: manager.php:437
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
-msgstr ""
+msgstr "%s ïàïîê ³ %s ôàéë³â (%s Êá)"
 
-#: manager.php:413
+#: manager.php:435
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
-msgstr ""
+msgstr "%s ïàïîê ³ 1 ôàéë (%s Êá)"
 
-#: login.php:143
+#: login.php:144
 #, php-format
 msgid "%s Login"
 msgstr ""
 
-#: manager.php:159
+#: edit.php:35
+#, php-format
+msgid "%s successfully saved."
+msgstr "%s óñï³øíî çáåðåæåíî."
+
+#: manager.php:167
 #, php-format
 msgid "%s was successfully pasted."
-msgstr ""
+msgstr "%s óñï³øíî âñòàâëåíî."
 
-#: manager.php:410
+#: manager.php:432
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
-msgstr ""
+msgstr "1 ïàïêà ³ %s ôàéë³â (%s Êá)"
 
-#: manager.php:408
+#: manager.php:430
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
-msgstr ""
+msgstr "1 ïàïêà ³ 1 ôàéë (%s Êá)"
 
-#: manager.php:268
+#: manager.php:271
 msgid "1 item"
 msgstr ""
 
-#: view.php:31
+#: gollem.js.php:44
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr ""
+
+#: edit.php:33 edit.php:43 view.php:33
 #, php-format
 msgid "Access denied to %s"
-msgstr ""
+msgstr "Äîñòóï äî %s çàáîðîíåíî"
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
-#: lib/Gollem.php:490
+#: lib/Gollem.php:109 lib/Gollem.php:383 lib/Gollem.php:445 lib/Gollem.php:466
+#: lib/Gollem.php:483
 #, php-format
 msgid "Access denied to folder \"%s\"."
-msgstr ""
+msgstr "Äîñòóï äî ïàïêè \"%s\" çàáîðîíåíèé."
 
-#: templates/manager/manager.html:111
+#: templates/manager/manager.html:124
 msgid "Actions:"
-msgstr ""
+msgstr "ij¿:"
 
-#: selectlist.php:91
+#: selectlist.php:99
 msgid "Add"
-msgstr ""
+msgstr "Äîäàòè"
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
-msgstr ""
+msgstr "Äîäàòè êîëîíêó"
 
 #: templates/manager/manager.html:11
 msgid "All"
-msgstr ""
+msgstr "Âñ³"
 
-#: templates/manager/javascript.inc:202
+#: gollem.js.php:55
 msgid "Are you sure you wish to continue?"
-msgstr ""
+msgstr " Âïåâíåí³, ùî õî÷åòå ïðîäîâæèòè?"
 
-#: templates/manager/javascript.inc:198
+#: gollem.js.php:53
 msgid "Are you sure?"
-msgstr ""
+msgstr "Âè âïåâíåí³?"
 
 #: config/prefs.php.dist:69
 msgid "Ascending"
-msgstr ""
+msgstr "Ïî çðîñòàííþ"
 
 #: config/prefs.php.dist:93
 msgid "Ask"
-msgstr ""
+msgstr "Ïèòàòè"
 
 #: templates/manager/manager.html:5
 msgid "Attributes"
-msgstr ""
+msgstr "Àòðèáóòè"
 
 #: templates/prefs/columnselect.html:20
 msgid "Available Columns:"
-msgstr ""
+msgstr "Äîñòóïí³ êîëîíêè:"
 
-#: lib/api.php:46
+#: lib/api.php:50
 msgid "Backends"
 msgstr ""
 
@@ -124,45 +136,49 @@ msgstr ""
 msgid "Below is the current contents of your clipboard."
 msgstr ""
 
-#: manager.php:263 selectlist.php:93 clipboard.php:37
+#: clipboard.php:38 manager.php:266 selectlist.php:101
+#: templates/edit/edit.inc:13
 msgid "Cancel"
-msgstr ""
+msgstr "³äì³íèòè"
 
 #: manager.php:72
 #, php-format
-msgid "Cannot chmod %s"
+msgid "Cannot chmod %s: %s"
 msgstr ""
 
-#: manager.php:133
+#: manager.php:141
 msgid "Cannot copy items onto clipboard."
 msgstr ""
 
-#: manager.php:192
+#: manager.php:200
 #, php-format
 msgid "Cannot create home directory: %s"
-msgstr ""
+msgstr "Íå ìîæó ñòâîðèòè äîìàøíþ ïàïêó: %s"
 
-#: manager.php:135
+#: manager.php:143
 msgid "Cannot cut items onto clipboard."
 msgstr ""
 
-#: manager.php:80
-#, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr ""
-
-#: manager.php:157
+#: manager.php:165
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr ""
 
-#: lib/Gollem.php:777 templates/manager/manager.html:77
+#: templates/manager/manager.html:70
 msgid "Change Folder"
-msgstr ""
+msgstr "Çì³íèòè ïàïêó"
+
+#: templates/manager/manager.html:126
+msgid "Change Permissions"
+msgstr "Çì³íèòè ïðàâà"
 
-#: selectlist.php:101 lib/Gollem.php:821
+#: selectlist.php:109 lib/Gollem.php:813
 msgid "Change Server"
-msgstr ""
+msgstr "Çì³íèòè ñåðâåð"
+
+#: lib/Gollem.php:770
+msgid "Change _Folder"
+msgstr "Çì³íèòè ïàïêó"
 
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
@@ -170,19 +186,15 @@ msgstr ""
 
 #: config/prefs.php.dist:14
 msgid "Change your file sorting options."
-msgstr ""
+msgstr "Çì³í³òü îïö³¿ ñîðòóâàííÿ ôàéë³â."
 
-#: lib/Gollem.php:795
+#: lib/Gollem.php:788
 msgid "Check Quota"
 msgstr ""
 
-#: manager.php:492
+#: manager.php:528
 msgid "Check _All/None"
-msgstr ""
-
-#: templates/manager/manager.html:113
-msgid "Chmod"
-msgstr ""
+msgstr "Âèáðàòè âñ³/æîäíîãî"
 
 #: manager.php:70
 msgid "Chmod done: "
@@ -192,30 +204,35 @@ msgstr ""
 msgid "Choose the columns to display in the file manager."
 msgstr ""
 
-#: clipboard.php:38
+#: clipboard.php:39
 msgid "Clear"
-msgstr ""
+msgstr "ßñíî"
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
 msgstr ""
 
-#: quota.php:31
+#: quota.php:32
 msgid "Close"
-msgstr ""
+msgstr "Çàêðèòè"
 
-#: login.php:254
+#: login.php:258
 #, php-format
 msgid "Connect to: %s"
-msgstr ""
+msgstr "Ç'ºäíàííÿ ç: %s"
 
-#: clipboard.php:41 templates/manager/manager.html:116
+#: clipboard.php:42 templates/manager/manager.html:129
 msgid "Copy"
-msgstr ""
+msgstr "Êîï³þâàòè"
+
+#: lib/Template.php:235
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "Íå ìîæó çáåðåãòè ñêîìï³ëüîâàíèé ôàéë øàáëîíó '%s'."
 
-#: lib/Gollem.php:774 templates/manager/manager.html:63
+#: templates/manager/manager.html:58
 msgid "Create Folder"
-msgstr ""
+msgstr "Ñòâîðèòè ïàïêó"
 
 #: permissions.php:47
 #, php-format
@@ -226,23 +243,23 @@ msgstr ""
 
 #: templates/clipboard/clipboard.html:17
 msgid "Current directory:"
-msgstr ""
+msgstr "Ïîòî÷íà ïàïêà:"
 
-#: clipboard.php:40 templates/manager/manager.html:117
+#: clipboard.php:41 templates/manager/manager.html:130
 msgid "Cut"
 msgstr ""
 
 #: config/prefs.php.dist:59
 msgid "Default sorting criteria:"
-msgstr ""
+msgstr "Òèïîâèé êðèòåð³é ñîðòóâàííÿ:"
 
 #: config/prefs.php.dist:72
 msgid "Default sorting direction:"
-msgstr ""
+msgstr "Òèïîâèé íàïðÿì ñîðòóâàííÿ:"
 
-#: templates/manager/manager.html:120
+#: templates/manager/manager.html:133
 msgid "Delete"
-msgstr ""
+msgstr "Âèòåðòè"
 
 #: config/prefs.php.dist:95
 msgid "Delete folders recursively?"
@@ -250,36 +267,45 @@ msgstr ""
 
 #: config/prefs.php.dist:70
 msgid "Descending"
-msgstr ""
+msgstr "Ïî ñïàäàííþ"
 
-#: selectlist.php:92
+#: selectlist.php:100
 msgid "Done"
 msgstr ""
 
-#: manager.php:214
+#: manager.php:226
 msgid "Download"
-msgstr ""
+msgstr "Ñêà÷àòè"
 
-#: manager.php:382
+#: manager.php:404
 #, php-format
 msgid "Download %s"
-msgstr ""
+msgstr "Ñêà÷àòè %s"
 
 #: templates/quota/quota.html:7
 msgid "ERROR:"
 msgstr ""
 
+#: manager.php:225
+msgid "Edit"
+msgstr "Ðåäàãóâàòè"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "Ðåäàãóâàòè %s"
+
 #: config/credentials.php.dist:28
 msgid "Email"
-msgstr ""
+msgstr "Å-ïîøòà"
 
 #: templates/manager/manager.html:26
 msgid "Execute"
-msgstr ""
+msgstr "Âèêîíàòè"
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:183
+#: gollem.js.php:57 templates/manager/manager.html:203
 msgid "File"
-msgstr ""
+msgstr "Ôàéë"
 
 #: config/prefs.php.dist:13
 msgid "File Display"
@@ -287,34 +313,34 @@ msgstr ""
 
 #: config/prefs.php.dist:56
 msgid "File Modification Time"
-msgstr ""
+msgstr "×àñ çì³íè ôàéëó"
 
 #: config/prefs.php.dist:55
 msgid "File Name"
-msgstr ""
+msgstr "Íàçâà ôàéëó"
 
 #: config/prefs.php.dist:57
 msgid "File Size"
-msgstr ""
+msgstr "Îá'ºì ôàéëó"
 
 #: config/prefs.php.dist:54
 msgid "File Type"
-msgstr ""
+msgstr "Òèï ôàéëó"
 
-#: manager.php:76
+#: manager.php:87
 msgid "File deleted: "
-msgstr ""
+msgstr "Ôàéë âèòåðòî: "
 
-#: manager.php:101
+#: manager.php:109
 #, php-format
 msgid "File received: %s"
-msgstr ""
+msgstr "Ôàéë îòðèìàíî: %s"
 
-#: manager.php:78
+#: manager.php:80
 msgid "Folder removed: "
 msgstr ""
 
-#: templates/manager/manager.html:79
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr ""
 
@@ -322,213 +348,193 @@ msgstr ""
 msgid "Gollem Backend Permissions Administration"
 msgstr ""
 
-#: manager.php:472 templates/manager/manager.html:10
+#: manager.php:508 templates/manager/manager.html:10
 msgid "Group"
-msgstr ""
-
-#: lib/Gollem.php:770
-msgid "Home"
-msgstr ""
+msgstr "Ãðóïà"
 
 #: manager.php:56
 msgid "Incorrect number of items."
 msgstr ""
 
-#: manager.php:126
+#: manager.php:134
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr ""
 
-#: manager.php:128
+#: manager.php:136
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr ""
 
-#: templates/login/login.html:67
+#: templates/login/login.html:68
 msgid "Language"
-msgstr ""
+msgstr "Ìîâà"
 
 #: config/prefs.php.dist:81
 msgid "List folders first?"
 msgstr ""
 
-#: login.php:303
+#: login.php:307
 msgid "Login"
-msgstr ""
-
-#: quota.php:62
-msgid "MB free"
-msgstr ""
-
-#: quota.php:62
-msgid "MB used"
-msgstr ""
+msgstr "Âõ³ä"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
-msgstr ""
+msgstr "Ñïèñîê ìåíþ"
 
-#: manager.php:446
+#: manager.php:478
 msgid "Modified"
 msgstr ""
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
-msgstr ""
+msgstr "Ïîñóíóòè âë³âî"
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
-msgstr ""
+msgstr "Ïîñóíóòè âïðàâî"
 
-#: manager.php:433
+#: manager.php:456
 msgid "Name"
-msgstr ""
+msgstr "²ì'ÿ"
 
-#: templates/manager/manager.html:49 templates/manager/manager.html:65
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr ""
 
 #: manager.php:35
 msgid "New folder created: "
-msgstr ""
+msgstr "Íîâó ïàïêó ñòâîðåíî: "
 
 #: config/prefs.php.dist:91
 msgid "No"
-msgstr ""
+msgstr "ͳ"
 
 #: templates/quota/quota.html:12
 msgid "No quota found."
-msgstr ""
+msgstr "Êâîòó íå çíàéäåíî."
 
-#: manager.php:264
+#: manager.php:267
 msgid "OK"
-msgstr ""
+msgstr "ÎÊ"
 
-#: manager.php:466 templates/manager/manager.html:9
+#: manager.php:501 templates/manager/manager.html:9
 msgid "Owner"
-msgstr ""
+msgstr "Âëàñíèê"
 
 #: config/credentials.php.dist:23
 msgid "Password"
-msgstr ""
+msgstr "Ïàðîëü"
 
-#: clipboard.php:39
+#: clipboard.php:40
 msgid "Paste"
-msgstr ""
+msgstr "Âñòàâèòè"
 
-#: manager.php:460
+#: manager.php:494
 msgid "Permission"
-msgstr ""
+msgstr "Ïðàâà"
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
-msgstr ""
+msgstr "Äîñòóï äî %s çàáîðîíåíî: %s"
 
-#: manager.php:200
+#: manager.php:208
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
-msgstr ""
+msgstr "Äîñòóï äî ïàïêè \"%s\" çàáîðîíåíî: %s"
 
-#: lib/Gollem.php:784
-msgid "Permissions"
-msgstr ""
-
-#: templates/login/javascript.inc:36
+#: gollem.js.php:48
 msgid "Please provide your password."
-msgstr ""
+msgstr "Áóäü-ëàñêà, ââåä³òü ïàðîëü."
 
-#: templates/login/javascript.inc:31
+#: gollem.js.php:47
 msgid "Please provide your username."
-msgstr ""
+msgstr "Áóäü-ëàñêà, âêàæ³òü íàçâó êîðèñòóâà÷à."
 
 #: templates/prefs/columnselect.html:5
 msgid "Please select a backend:"
 msgstr ""
 
-#: templates/manager/javascript.inc:132
+#: gollem.js.php:51
 msgid "Please select an item before this action."
 msgstr ""
 
-#: templates/manager/javascript.inc:456
+#: gollem.js.php:56
 msgid "Please specify at least one file to upload."
-msgstr ""
+msgstr "Áóäü-ëàñêà, âêàæ³òü õî÷à á îäèí ôàéë äëÿ ï³äâàíòàæåííÿ."
 
-#: quota.php:18 templates/quota/quota.html:2
+#: quota.php:19 templates/quota/quota.html:2
 msgid "Quota Display"
 msgstr ""
 
-#: quota.php:61
-msgid "Quota Usage"
-msgstr ""
-
 #: templates/manager/manager.html:14
 msgid "Read"
-msgstr ""
+msgstr "×èòàòè"
 
-#: manager.php:270
+#: manager.php:273
 msgid "Refresh"
-msgstr ""
+msgstr "Îíîâèòè"
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
-msgstr ""
+msgstr "Âèäàëèòè êîëîíêó"
 
-#: templates/manager/manager.html:47 templates/manager/manager.html:123
+#: templates/manager/manager.html:44 templates/manager/manager.html:136
 msgid "Rename"
-msgstr ""
+msgstr "Ïåðåéìåíóâàòè"
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "Î÷èñòèòè"
+
+#: lib/Gollem.php:727 lib/Gollem.php:732
 msgid "Root"
 msgstr ""
 
-#: manager.php:262
+#: manager.php:265 templates/edit/edit.inc:11
 msgid "Save"
-msgstr ""
+msgstr "Çáåðåãòè"
 
 #: templates/prefs/columnselect.html:30
 msgid "Selected Columns:"
-msgstr ""
+msgstr "Âèáðàí³ êîëîíêè:"
 
-#: templates/login/login.html:31
+#: templates/login/login.html:32
 msgid "Server"
-msgstr ""
+msgstr "Ñåðâåð"
 
 #: config/prefs.php.dist:20
 msgid "Settings"
-msgstr ""
+msgstr "Íàëàøòóâàííÿ"
 
 #: config/prefs.php.dist:30
 msgid "Show dotfiles?"
 msgstr ""
 
-#: manager.php:453
+#: manager.php:486
 msgid "Size"
-msgstr ""
-
-#: manager.php:479
-msgid "Sort Direction"
-msgstr ""
+msgstr "Îá'ºì"
 
-#: templates/manager/javascript.inc:202
-msgid "The following item(s) are folders: "
+#: gollem.js.php:54
+msgid "The following item(s) are folders:"
 msgstr ""
 
-#: templates/manager/javascript.inc:198
-msgid "The following items will be permanently deleted: "
+#: gollem.js.php:52
+msgid "The following items will be permanently deleted:"
 msgstr ""
 
-#: templates/selectlist/javascript.inc:9
+#: gollem.js.php:60
 msgid "The original opener window has been closed. Exiting."
 msgstr ""
 
-#: login.php:150
+#: login.php:151
 msgid "There are no backends available for the current user."
 msgstr ""
 
-#: selectlist.php:185 templates/manager/manager.html:134
+#: selectlist.php:199 templates/manager/manager.html:147
 msgid "There are no files in this folder."
-msgstr ""
+msgstr " ö³é ïàïö³ íåìà ôàéë³â."
 
 #: templates/clipboard/clipboard.html:15
 msgid ""
@@ -542,40 +548,50 @@ msgid ""
 "next to the filename and click on &quot;Paste&quot;."
 msgstr ""
 
-#: manager.php:426
+#: manager.php:448
 msgid "Type"
-msgstr ""
+msgstr "Òèï"
 
 #: permissions.php:42
 #, php-format
 msgid "Unable to create backend permission: %s"
 msgstr ""
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: manager.php:85
+#, php-format
+msgid "Unable to delete file %s: %s"
+msgstr "Íå ìîæó âèòåðòè ôàéë %s: %s"
+
+#: manager.php:78
+#, php-format
+msgid "Unable to delete folder %s: %s"
+msgstr "Íå ìîæó âèòåðòè ïàïêó %s: %s"
+
+#: lib/Gollem.php:732 lib/Gollem.php:742
 #, php-format
 msgid "Up to %s"
 msgstr ""
 
-#: manager.php:283
+#: manager.php:286
 msgid "Upload File(s)"
 msgstr ""
 
 #: config/prefs.php.dist:12 config/prefs.php.dist:19
 msgid "User Interface"
-msgstr ""
+msgstr "²íòåðôåéñ êîðèñòóâà÷à"
 
 #: config/credentials.php.dist:18
 msgid "Username"
-msgstr ""
+msgstr "Íàçâà êîðèñòóâà÷à"
 
-#: manager.php:278
+#: manager.php:281
 msgid "View Clipboard"
 msgstr ""
 
-#: login.php:195
+#: login.php:201
 #, php-format
 msgid "Welcome to %s"
-msgstr ""
+msgstr "Âàñ â³òຠ%s"
 
 #: templates/manager/manager.html:20
 msgid "Write"
@@ -583,7 +599,7 @@ msgstr ""
 
 #: config/prefs.php.dist:92
 msgid "Yes"
-msgstr ""
+msgstr "Òàê"
 
 #: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
@@ -591,16 +607,28 @@ msgstr ""
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
-msgstr ""
+msgstr "Âàø áðîóçåð íå ï³äòðèìóº â³äîáðàæåííÿ ïî òåêñòó çîáðàæåíü öüîãî òèïó"
 
-#: lib/Gollem.php:819 lib/Gollem.php:822
+#: lib/Gollem.php:811 lib/Gollem.php:814
 msgid "_Change Server"
 msgstr ""
 
-#: manager.php:215 selectlist.php:74
-msgid "folder"
+#: lib/Gollem.php:767
+msgid "_Create Folder"
+msgstr "Ñòâîðèòè ïàïêó"
+
+#: lib/Gollem.php:763
+msgid "_My Home"
 msgstr ""
 
-#: manager.php:216 selectlist.php:75
+#: lib/Gollem.php:777
+msgid "_Permissions"
+msgstr "Ïðàâà"
+
+#: manager.php:227 selectlist.php:75
+msgid "folder"
+msgstr "ïàïêà"
+
+#: manager.php:228 selectlist.php:76
 msgid "symlink"
 msgstr ""
diff --git a/po/zh_TW.po b/po/zh_TW.po
index fbd5e21..2b86957 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,12 +1,12 @@
 # GOLLEM Traditional Chinese Translation
-# Copyright (C) 2001 David Chang. ±i¨}¤å,¥xÆW
+# Copyright 2001 David Chang. ±i¨}¤å,¥xÆW
 # David Chang <david at tmv.gov.tw>, 2001.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gollem H3 (1.0.2)\n"
+"Project-Id-Version: gollem H3 (1.1-cvs)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2006-03-16 15:27+0800\n"
+"POT-Creation-Date: 2007-01-25 15:09+0800\n"
 "PO-Revision-Date: 2003-01-08 10:53+0100\n"
 "Last-Translator: David Chang <david at tmv.gov.tw>\n"
 "Language-Team: Chinese <i18n at lists.horde.org>\n"
@@ -19,70 +19,81 @@ msgstr ""
 msgid "\"%s\" renamed to \"%s\""
 msgstr "\"%s\" ¤w§ó¦W¬° \"%s\""
 
-#: quota.php:59
+#: quota.php:56
 #, php-format
 msgid "%.2fMB / %.2fMB  (%.2f%%)"
 msgstr "%.2fMB / %.2fMB  (%.2f%%)"
 
-#: manager.php:264
+#: manager.php:271
 #, php-format
 msgid "%d items"
 msgstr "%d ­Ó¶µ¥Ø"
 
-#: manager.php:417
+#: manager.php:437
 #, php-format
 msgid "%s Folders and %s Files (%s Kb)"
 msgstr "%s ­Ó¥Ø¿ý¤Î %s ­ÓÀÉ®× (%s ¤d¦ì¤¸²Õ)"
 
-#: manager.php:415
+#: manager.php:435
 #, php-format
 msgid "%s Folders and 1 File (%s Kb)"
 msgstr "%s ­Ó¥Ø¿ý¤Î 1 ­ÓÀÉ®× (%s ¤d¦ì¤¸²Õ)"
 
-#: login.php:143
+#: login.php:144
 #, php-format
 msgid "%s Login"
 msgstr "%s µn¤J"
 
-#: manager.php:159
+#: edit.php:35
+#, php-format
+msgid "%s successfully saved."
+msgstr "%s ¤wÀx¦s§¹¦¨."
+
+#: manager.php:167
 #, php-format
 msgid "%s was successfully pasted."
-msgstr "%s ¤w§¹¦¨±i¶K."
+msgstr "%s ¤w±i¶K§¹¦¨."
 
-#: manager.php:412
+#: manager.php:432
 #, php-format
 msgid "1 Folder and %s Files (%s Kb)"
 msgstr "1 ­Ó¥Ø¿ý¤Î %s ­ÓÀÉ®× (%s ¤d¦ì¤¸²Õ)"
 
-#: manager.php:410
+#: manager.php:430
 #, php-format
 msgid "1 Folder and 1 File (%s Kb)"
 msgstr "1 ­Ó¥Ø¿ý¤Î 1 ­ÓÀÉ®× (%s ¤d¦ì¤¸²Õ)"
 
-#: manager.php:264
+#: manager.php:271
 msgid "1 item"
 msgstr "1 ­Ó¶µ¥Ø"
 
-#: view.php:31
+#: js/gollem.js.php:3 js/src/gollem.js.php:45
+msgid ""
+"A popup window could not be opened. Perhaps you have set your browser to "
+"block popup windows?"
+msgstr "µLªk¶}±Ò¤@­ÓÂÛ¼uµøµ¡. ¦³¥i¯à§AªºÂsÄý¾¹¤w³]©w­n«ÊÂêÂÛ¼uµøµ¡?"
+
+#: edit.php:33 edit.php:43 view.php:33
 #, php-format
 msgid "Access denied to %s"
 msgstr "¦s¨ú %s ¾D©Ú"
 
-#: lib/Gollem.php:116 lib/Gollem.php:390 lib/Gollem.php:452 lib/Gollem.php:473
-#: lib/Gollem.php:490
+#: lib/Gollem.php:118 lib/Gollem.php:392 lib/Gollem.php:454 lib/Gollem.php:475
+#: lib/Gollem.php:492
 #, php-format
 msgid "Access denied to folder \"%s\"."
 msgstr "¦s¨ú¥Ø¿ý \"%s\" ¾D©Ú."
 
-#: templates/manager/manager.html:111
+#: templates/manager/manager.html:124
 msgid "Actions:"
 msgstr "§@¥Î¤è¦¡:"
 
-#: selectlist.php:100
+#: selectlist.php:99
 msgid "Add"
 msgstr "·s¼W"
 
-#: templates/prefs/columnselect.inc:42
+#: templates/prefs/columnselect.inc:43
 msgid "Add column"
 msgstr "·s¼WÄæ¦ì"
 
@@ -90,11 +101,11 @@ msgstr "
 msgid "All"
 msgstr "¥þ³¡"
 
-#: templates/manager/javascript.inc:202
+#: js/gollem.js.php:3 js/src/gollem.js.php:56
 msgid "Are you sure you wish to continue?"
 msgstr "§A½T©wÄ~Äò¶Ü?"
 
-#: templates/manager/javascript.inc:198
+#: js/gollem.js.php:3 js/src/gollem.js.php:54
 msgid "Are you sure?"
 msgstr "§A½T©w?"
 
@@ -120,48 +131,51 @@ msgstr "
 
 #: templates/clipboard/clipboard.html:11
 msgid "Below is the current contents of your clipboard."
-msgstr "¥H¤U¬O°Å¶Kï¥Ø«eªº¤º®e."
+msgstr "¥H¤U¬O§A¥Ø«e°Å¶K諸¤º®e."
 
-#: clipboard.php:37 manager.php:258 selectlist.php:102
+#: clipboard.php:38 manager.php:266 selectlist.php:101
+#: templates/edit/edit.inc:13
 msgid "Cancel"
 msgstr "¨ú®ø"
 
 #: manager.php:72
-#, php-format
-msgid "Cannot chmod %s"
-msgstr "µLªkÅܧó¦s¨ú¼Ò¦¡ %s"
+msgid "Cannot chmod %s: %s"
+msgstr "µLªkÅܧó¦s¨ú¼Ò¦¡ %s: %s"
 
-#: manager.php:133
+#: manager.php:141
 msgid "Cannot copy items onto clipboard."
 msgstr "µLªk½Æ»s¶µ¥Ø¨ì°Å¶Kï¤W."
 
-#: manager.php:192
+#: manager.php:200
 #, php-format
 msgid "Cannot create home directory: %s"
 msgstr "µLªk«Ø¥ß®a¥Ø¿ý: %s"
 
-#: manager.php:135
+#: manager.php:143
 msgid "Cannot cut items onto clipboard."
 msgstr "µLªk°Å¤U¶µ¥Ø¨ì°Å¶Kï¤W."
 
-#: manager.php:80
-#, php-format
-msgid "Cannot delete \"%s\": %s"
-msgstr "µLªk§R°£ \"%s\": %s"
-
-#: manager.php:157
+#: manager.php:165
 #, php-format
 msgid "Cannot paste \"%s\" (file cleared from clipboard): %s"
 msgstr "µLªk¶K¤W \"%s\" (°Å¶K諸Àɮפw²M°£): %s"
 
-#: lib/Gollem.php:777 templates/manager/manager.html:77
+#: templates/manager/manager.html:70
 msgid "Change Folder"
 msgstr "¤Á´«¸ô®|"
 
-#: selectlist.php:110 lib/Gollem.php:819
+#: templates/manager/manager.html:126
+msgid "Change Permissions"
+msgstr "Åܧó¦s¨ú¼Ò¦¡"
+
+#: selectlist.php:109 lib/Gollem.php:822
 msgid "Change Server"
 msgstr "Åܧó¦øªA¾¹"
 
+#: lib/Gollem.php:779
+msgid "Change _Folder"
+msgstr "¤Á´«¸ô®|_F"
+
 #: config/prefs.php.dist:21
 msgid "Change file and folder handling settings."
 msgstr "ÅܧóÀɮפΥؿý±±¨î³]©w."
@@ -170,18 +184,14 @@ msgstr "
 msgid "Change your file sorting options."
 msgstr "ÅܧóÀɮױƦC¤è¦¡."
 
-#: lib/Gollem.php:793
+#: lib/Gollem.php:797
 msgid "Check Quota"
 msgstr "ºÏºÐ°t¸m"
 
-#: manager.php:495
+#: manager.php:528
 msgid "Check _All/None"
 msgstr "Àˬd ¥þ³¡/µL_A"
 
-#: templates/manager/manager.html:113
-msgid "Chmod"
-msgstr "¦s¨ú¼Ò¦¡"
-
 #: manager.php:70
 msgid "Chmod done: "
 msgstr "¦s¨ú¼Ò¦¡Åܧ󧹦¨: "
@@ -190,28 +200,33 @@ msgstr "
 msgid "Choose the columns to display in the file manager."
 msgstr "¿ï¾Ü­nÅã¥Ü©óÀÉ®×Á`ºÞªºÄæ¦ì¦WºÙ."
 
-#: clipboard.php:38
+#: clipboard.php:39
 msgid "Clear"
 msgstr "²M°£"
 
-#: clipboard.php:17 templates/clipboard/clipboard.html:7
+#: clipboard.php:18 templates/clipboard/clipboard.html:7
 msgid "Clipboard"
 msgstr "°Å¶Kï"
 
-#: quota.php:31
+#: quota.php:32
 msgid "Close"
 msgstr "Ãö³¬"
 
-#: login.php:254
+#: login.php:256
 #, php-format
 msgid "Connect to: %s"
 msgstr "µLªk³sµ²¦Ü: %s"
 
-#: clipboard.php:41 templates/manager/manager.html:116
+#: clipboard.php:42 templates/manager/manager.html:129
 msgid "Copy"
 msgstr "½Æ»s"
 
-#: lib/Gollem.php:774 templates/manager/manager.html:63
+#: lib/Template.php:235
+#, php-format
+msgid "Could not save the compiled template file '%s'."
+msgstr "µLªkÀx¦s¤w½sĶªº¼Ë¥»ÀÉ®× '%s'."
+
+#: templates/manager/manager.html:58
 msgid "Create Folder"
 msgstr "«Ø¥ß¥Ø¿ý"
 
@@ -220,13 +235,13 @@ msgstr "
 msgid ""
 "Created empty permissions for \"%s\". You must explicitly grant access to "
 "this backend now."
-msgstr "\"%s\" ªºªÅ¥ÕÅv­­¤w«Ø§´. §A²{¦b¥²¶·¬°¦¹¦øªAºÝºë½T©w¸qÅv­­¥H«O¦w¥þ."
+msgstr "\"%s\"ªºªÅ¥ÕÅv­­¤w«Ø§´. §A²{¦b¥²¶·¬°¦¹¦øªAºÝºë½T©w¸qÅv­­¥H«O¦w¥þ."
 
 #: templates/clipboard/clipboard.html:17
 msgid "Current directory:"
 msgstr "²{¦æ¥Ø¿ý:"
 
-#: clipboard.php:40 templates/manager/manager.html:117
+#: clipboard.php:41 templates/manager/manager.html:130
 msgid "Cut"
 msgstr "°Å¤U"
 
@@ -238,7 +253,7 @@ msgstr "
 msgid "Default sorting direction:"
 msgstr "¤º©wªº±Æ¦C¤è¦V:"
 
-#: templates/manager/manager.html:120
+#: templates/manager/manager.html:133
 msgid "Delete"
 msgstr "§R°£"
 
@@ -250,15 +265,15 @@ msgstr "
 msgid "Descending"
 msgstr "¤U­°"
 
-#: selectlist.php:101
+#: selectlist.php:100
 msgid "Done"
 msgstr "§¹¦¨"
 
-#: manager.php:214
+#: manager.php:226
 msgid "Download"
 msgstr "¤U¸ü"
 
-#: manager.php:384
+#: manager.php:404
 #, php-format
 msgid "Download %s"
 msgstr "¤U¸ü %s"
@@ -267,6 +282,15 @@ msgstr "
 msgid "ERROR:"
 msgstr "¿ù»~:"
 
+#: manager.php:225
+msgid "Edit"
+msgstr "½s¿è"
+
+#: templates/edit/edit.inc:8
+#, php-format
+msgid "Edit %s"
+msgstr "½s¿è %s"
+
 #: config/credentials.php.dist:28
 msgid "Email"
 msgstr "¹q¤l¶l¥ó"
@@ -275,7 +299,8 @@ msgstr "
 msgid "Execute"
 msgstr "°õ¦æ"
 
-#: templates/manager/javascript.inc:485 templates/manager/manager.html:185
+#: js/gollem.js.php:3 js/src/gollem.js.php:58
+#: templates/manager/manager.html:203
 msgid "File"
 msgstr "ªþ¥ó"
 
@@ -299,20 +324,20 @@ msgstr "
 msgid "File Type"
 msgstr "Àɮ׫¬ºA"
 
-#: manager.php:76
+#: manager.php:87
 msgid "File deleted: "
 msgstr "Àɮפw§R°£: "
 
-#: manager.php:101
+#: manager.php:109
 #, php-format
 msgid "File received: %s"
 msgstr "¤w±µ¦¬¨ìÀÉ®×: %s"
 
-#: manager.php:78
+#: manager.php:80
 msgid "Folder removed: "
 msgstr "¥Ø¿ý¤w§R°£: "
 
-#: templates/manager/manager.html:79
+#: templates/manager/manager.html:72
 msgid "Go to:"
 msgstr "¨ì:"
 
@@ -320,24 +345,20 @@ msgstr "
 msgid "Gollem Backend Permissions Administration"
 msgstr "Gollem ¦øªAºÝÅv­­ºÞ²z"
 
-#: manager.php:474 templates/manager/manager.html:10
+#: manager.php:508 templates/manager/manager.html:10
 msgid "Group"
 msgstr "¸s²Õ"
 
-#: lib/Gollem.php:770
-msgid "Home"
-msgstr "®a¥Ø¿ý"
-
 #: manager.php:56
 msgid "Incorrect number of items."
 msgstr "¶µ¥Øªº¸¹½X¤£¥¿½T."
 
-#: manager.php:126
+#: manager.php:134
 #, php-format
 msgid "Item copied to clipboard: %s"
 msgstr "¶µ¥Ø¤w³Q½Æ»s¨ì°Å¶Kï: %s"
 
-#: manager.php:128
+#: manager.php:136
 #, php-format
 msgid "Item cut to clipboard: %s"
 msgstr "¶µ¥Ø¤w³Q°Å¤U¨Ã°e¨ì°Å¶Kï: %s"
@@ -350,39 +371,31 @@ msgstr "
 msgid "List folders first?"
 msgstr "¥ý¦C¥X¥Ø¿ý?"
 
-#: login.php:303
+#: login.php:305
 msgid "Login"
 msgstr "µn¤J"
 
-#: quota.php:62
-msgid "MB free"
-msgstr "MB ¥¼¨Ï¥Î"
-
-#: quota.php:62
-msgid "MB used"
-msgstr "MB ¤w¨Ï¥Î"
-
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
 msgstr "¥\¯àªí"
 
-#: manager.php:448
+#: manager.php:478
 msgid "Modified"
 msgstr "³Ìªñ§ó·s"
 
-#: templates/prefs/columnselect.inc:44
+#: templates/prefs/columnselect.inc:45
 msgid "Move left"
 msgstr "½Õª@"
 
-#: templates/prefs/columnselect.inc:45
+#: templates/prefs/columnselect.inc:46
 msgid "Move right"
 msgstr "½Õ­°"
 
-#: manager.php:435
+#: manager.php:456
 msgid "Name"
 msgstr "ÀɦW"
 
-#: templates/manager/manager.html:49 templates/manager/manager.html:65
+#: templates/manager/manager.html:46 templates/manager/manager.html:60
 msgid "Name:"
 msgstr "ÀɦW:"
 
@@ -396,13 +409,13 @@ msgstr "
 
 #: templates/quota/quota.html:12
 msgid "No quota found."
-msgstr "§ä¤£¨ìºÏºÐ°t¸m."
+msgstr "§ä¤£¨ìºÏºÐ°tÃB."
 
-#: manager.php:259
+#: manager.php:267
 msgid "OK"
 msgstr "½T©w"
 
-#: manager.php:468 templates/manager/manager.html:9
+#: manager.php:501 templates/manager/manager.html:9
 msgid "Owner"
 msgstr "¾Ö¦³ªÌ"
 
@@ -410,33 +423,29 @@ msgstr "
 msgid "Password"
 msgstr "±K½X"
 
-#: clipboard.php:39
+#: clipboard.php:40
 msgid "Paste"
 msgstr "¶K¤W"
 
-#: manager.php:462
+#: manager.php:494
 msgid "Permission"
 msgstr "Åv­­"
 
-#: selectlist.php:63
+#: selectlist.php:64
 #, php-format
 msgid "Permission denied to %s: %s"
 msgstr "¦s¨ú¾D©Ú %s: %s"
 
-#: manager.php:200
+#: manager.php:208
 #, php-format
 msgid "Permission denied to folder \"%s\": %s"
-msgstr "¦s¨ú¥Ø¿ý\"%s\": %s ¾D©Ú"
-
-#: lib/Gollem.php:783
-msgid "Permissions"
-msgstr "Åv­­"
+msgstr "¦s¨ú¥Ø¿ý \"%s\": %s ¾D©Ú"
 
-#: templates/login/javascript.inc:36
+#: js/gollem.js.php:3 js/src/gollem.js.php:49
 msgid "Please provide your password."
 msgstr "½Ð¿é¤J§Aªº±K½X."
 
-#: templates/login/javascript.inc:31
+#: js/gollem.js.php:3 js/src/gollem.js.php:48
 msgid "Please provide your username."
 msgstr "½Ð¿é¤J§Aªº¨Ï¥ÎªÌ¦WºÙ."
 
@@ -444,43 +453,43 @@ msgstr "
 msgid "Please select a backend:"
 msgstr "½Ð¿ï¾Ü¤@­Ó¦øªAºÝ:"
 
-#: templates/manager/javascript.inc:132
+#: js/gollem.js.php:3 js/src/gollem.js.php:52
 msgid "Please select an item before this action."
 msgstr "¦b°õ¦æ¦¹¤@°Ê§@«e½Ð¿ï¾Ü¤@­Ó¶µ¥Ø."
 
-#: templates/manager/javascript.inc:456
+#: js/gollem.js.php:3 js/src/gollem.js.php:57
 msgid "Please specify at least one file to upload."
 msgstr "½Ð¦Ü¤Ö¿ï¾Ü¤@­Ó¤W¶ÇÀÉ®×."
 
-#: quota.php:18 templates/quota/quota.html:2
+#: quota.php:19 templates/quota/quota.html:2
 msgid "Quota Display"
 msgstr "ºÏºÐ°t¸mª¬ªp"
 
-#: quota.php:61
-msgid "Quota Usage"
-msgstr "ºÏºÐ°t¸m»yªk"
-
 #: templates/manager/manager.html:14
 msgid "Read"
 msgstr "Ū¨ú"
 
-#: manager.php:266
+#: manager.php:273
 msgid "Refresh"
 msgstr "­«·s¾ã²z"
 
-#: templates/prefs/columnselect.inc:43
+#: templates/prefs/columnselect.inc:44
 msgid "Remove column"
 msgstr "²¾°£Äæ¦ì"
 
-#: templates/manager/manager.html:47 templates/manager/manager.html:123
+#: templates/manager/manager.html:44 templates/manager/manager.html:136
 msgid "Rename"
 msgstr "§ó¦W"
 
-#: lib/Gollem.php:734 lib/Gollem.php:739
+#: templates/edit/edit.inc:12
+msgid "Reset"
+msgstr "­«³]"
+
+#: lib/Gollem.php:736 lib/Gollem.php:741
 msgid "Root"
 msgstr "®Ú¥Ø¿ý"
 
-#: manager.php:257
+#: manager.php:265 templates/edit/edit.inc:11
 msgid "Save"
 msgstr "Àx¦s"
 
@@ -500,31 +509,27 @@ msgstr "
 msgid "Show dotfiles?"
 msgstr "Åã¥ÜÁôÂÃÀÉ®×?"
 
-#: manager.php:455
+#: manager.php:486
 msgid "Size"
 msgstr "¤j¤p"
 
-#: manager.php:481
-msgid "Sort Direction"
-msgstr "±Æ¦C¤è¦¡"
-
-#: templates/manager/javascript.inc:202
-msgid "The following item(s) are folders: "
+#: js/gollem.js.php:3 js/src/gollem.js.php:55
+msgid "The following item(s) are folders:"
 msgstr "¤U¦C¶µ¥ØÄÝ©ó¥Ø¿ý: "
 
-#: templates/manager/javascript.inc:198
-msgid "The following items will be permanently deleted: "
-msgstr "¤U¦C¶µ¥Ø±N¥Ã»·§R°£: "
+#: js/gollem.js.php:3 js/src/gollem.js.php:53
+msgid "The following items will be permanently deleted:"
+msgstr "¤U¦C¶µ¥Ø±N¥Ã»·§R°£:"
 
-#: templates/selectlist/javascript.inc:9
+#: js/gollem.js.php:3 js/src/gollem.js.php:61
 msgid "The original opener window has been closed. Exiting."
-msgstr "­ì¶}±Òªºµøµ¡¤wÃö³¬. µ²§ô¤¤."
+msgstr "­ì¶}±Òµøµ¡¤w³QÃö³¬. µ²§ô¤¤."
 
-#: login.php:150
+#: login.php:151
 msgid "There are no backends available for the current user."
 msgstr "µL¥ô¦ó¦øªAºÝ¥i¨Ñ¥Ø«eªº¨Ï¥ÎªÌ¾Þ§@."
 
-#: selectlist.php:193 templates/manager/manager.html:134
+#: selectlist.php:199 templates/manager/manager.html:147
 msgid "There are no files in this folder."
 msgstr "¦¹¥Ø¿ý¥Ø«e¨S¦³¥ô¦óÀÉ®×."
 
@@ -540,7 +545,7 @@ msgid ""
 "next to the filename and click on &quot;Paste&quot;."
 msgstr "±ý±N°Å¶Kï¤Wªº¶µ¥Ø¶K¨ì²{¦æ¥Ø¿ý¤¤, ¤Ä¿ïÀÉ®×µM«áÂI¿ï&quot;¶K¤W&quot;."
 
-#: manager.php:428
+#: manager.php:448
 msgid "Type"
 msgstr "«¬ºA"
 
@@ -549,12 +554,20 @@ msgstr "
 msgid "Unable to create backend permission: %s"
 msgstr "µLªk«Ø¥ß¦øªAºÝÅv­­: %s"
 
-#: lib/Gollem.php:739 lib/Gollem.php:749
+#: manager.php:85
+msgid "Unable to delete file %s: %s"
+msgstr "µLªk§R°£ÀÉ®× %s: %s"
+
+#: manager.php:78
+msgid "Unable to delete folder %s: %s"
+msgstr "µLªk§R°£¥Ø¿ý %s: %s"
+
+#: lib/Gollem.php:741 lib/Gollem.php:751
 #, php-format
 msgid "Up to %s"
 msgstr "¦^¨ì %s"
 
-#: manager.php:279
+#: manager.php:286
 msgid "Upload File(s)"
 msgstr "¤W¶ÇÀÉ®×"
 
@@ -566,11 +579,11 @@ msgstr "
 msgid "Username"
 msgstr "¨Ï¥ÎªÌ¦WºÙ"
 
-#: manager.php:274
+#: manager.php:281
 msgid "View Clipboard"
 msgstr "À˵ø°Å¶Kï"
 
-#: login.php:195
+#: login.php:200
 #, php-format
 msgid "Welcome to %s"
 msgstr "Åwªï¨ì %s"
@@ -585,20 +598,32 @@ msgstr "
 
 #: permissions.php:25
 msgid "You need at least one backend defined to set permissions."
-msgstr "¦b³]©wÅv­­«e,§A¥²¶·©w¸q¦Ü¤Ö¤@²Õªº¦øªAºÝ."
+msgstr "§A¥²¶·©w¸q¦Ü¤Ö¤@­Ó¦øªAºÝ¥H³]©wÅv­­."
 
 #: lib/MIME/Viewer/images.php:35
 msgid "Your browser does not support inline display of this image type"
 msgstr "§AªºÂsÄý¾¹¨Ã¥¼¤ä´©³oÃþ«¬ªº¼v¹³ÀÉ°µª½±µ¶}±Òªº°Ê§@"
 
-#: lib/Gollem.php:817 lib/Gollem.php:820
+#: lib/Gollem.php:820 lib/Gollem.php:823
 msgid "_Change Server"
 msgstr "Åܧó¦øªA¾¹_C"
 
-#: manager.php:215 selectlist.php:74
+#: lib/Gollem.php:776
+msgid "_Create Folder"
+msgstr "«Ø¥ß¥Ø¿ý_C"
+
+#: lib/Gollem.php:772
+msgid "_My Home"
+msgstr "§Úªº®a¥Ø¿ý_M"
+
+#: lib/Gollem.php:786
+msgid "_Permissions"
+msgstr "Åv­­_P"
+
+#: manager.php:227 selectlist.php:75
 msgid "folder"
 msgstr "¥Ø¿ý"
 
-#: manager.php:216 selectlist.php:75
+#: manager.php:228 selectlist.php:76
 msgid "symlink"
 msgstr "²Å¸¹³sµ²"
diff --git a/pref_api.php b/pref_api.php
new file mode 100644
index 0000000..5826efd
--- /dev/null
+++ b/pref_api.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * $Horde: gollem/pref_api.php,v 1.4.2.2 2009/01/06 15:23:53 jan Exp $
+ *
+ * Copyright 2006-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @author Chuck Hagenbuch <chuck at horde.org>
+ */
+
+ at define('HORDE_BASE', dirname(dirname(__FILE__)));
+require_once HORDE_BASE . '/lib/core.php';
+
+$registry = &Registry::singleton();
+
+/* Which application. */
+$app = Util::getFormData('app');
+if (!$app) {
+    echo '<ul id="app">';
+    foreach ($registry->listApps() as $app) {
+        echo '<li>' . htmlspecialchars($app) . '</li>';
+    }
+    echo '</ul>';
+    exit;
+}
+
+/* Load $app's base environment, but don't request that the app perform
+ * authentication beyond Horde's. */
+$authentication = 'none';
+$appbase = $registry->get('fileroot', $app);
+require_once $appbase . '/lib/base.php';
+
+/* Which preference. */
+$pref = Util::getFormData('pref');
+if (!$pref) {
+    $_prefs = array();
+    if (is_callable(array('Horde', 'loadConfiguration'))) {
+        $result = Horde::loadConfiguration('prefs.php', array('_prefs'), $app);
+        if (is_a($result, 'PEAR_Error')) {
+            exit;
+        }
+        extract($result);
+    } elseif (file_exists($appbase . '/config/prefs.php')) {
+        require $appbase . '/config/prefs.php';
+    }
+
+    echo '<ul id="pref">';
+    foreach ($_prefs as $pref => $params) {
+        switch ($params['type']) {
+        case 'special':
+        case 'link':
+            break;
+
+        default:
+            echo '<li preftype="' . htmlspecialchars($params['type']) . '">' . htmlspecialchars($pref) . '</li>';
+        }
+    }
+    echo '</ul>';
+}
+
+/* Which action. */
+if (Util::getPost('pref') == $pref) {
+    /* POST for saving a pref. */
+    $prefs->setValue($pref, Util::getPost('value'));
+}
+
+/* GET returns the current value, POST returns the new value. */
+header('Content-type: text/plain');
+echo $prefs->getValue($pref);
diff --git a/quota.php b/quota.php
index 8f0627e..8946ea1 100644
--- a/quota.php
+++ b/quota.php
@@ -1,16 +1,17 @@
 <?php
 /**
- * $Horde: gollem/quota.php,v 1.2.2.6 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/quota.php,v 1.2.2.8 2009/01/06 15:23:53 jan Exp $
  *
- * Copyright 2005-2007 Michael Slusarz <slusarz at horde.org>
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Michael Slusarz <slusarz at horde.org>
  */
 
 @define('GOLLEM_BASE', dirname(__FILE__));
 require_once GOLLEM_BASE . '/lib/base.php';
-require_once 'Horde/Template.php';
 
 /* Is this a popup window? */
 $isPopup = $browser->hasFeature('javascript');
@@ -23,7 +24,7 @@ if (!$isPopup) {
 }
 
 /* Set up the template object. */
-$template = &new Horde_Template();
+$template = new Gollem_Template();
 $template->setOption('gettext', true);
 $template->set('hasjs', false, true);
 if ($isPopup) {
@@ -46,23 +47,13 @@ if ($GLOBALS['gollem_be']['quota_val'] > -1) {
         $usage = $quota_info['usage'] / (1024 * 1024.0);
         $limit = $quota_info['limit'] / (1024 * 1024.0);
 
-        /* Output graph, if possible. */
-        require_once 'Horde/Graph.php';
-        $graph = &new Horde_Graph(array('width' => 300, 'height' => 250, 'type' => 'png', 'imgType' => !empty($conf['image']['convert']) ? 'im' : 'gd', 'temp' => Horde::getTempDir()));
-        if (is_a($graph, 'PEAR_Error')) {
-            $percent = ($usage * 100) / $limit;
-            if ($percent >= 90) {
-                $template->set('quotastyle', '<div style="color:red">');
-            } else {
-                $template->set('quotastyle', '<div>');
-            }
-            $template->set('quotadisplay', sprintf(_("%.2fMB / %.2fMB  (%.2f%%)"), $usage, $limit, $percent), true);
+        $percent = ($usage * 100) / $limit;
+        if ($percent >= 90) {
+            $template->set('quotastyle', '<div style="color:red">');
         } else {
-            $graph->set('title', _("Quota Usage"));
-            $graph->addXData(array(_("MB used"), _("MB free")));
-            $graph->addChart('pie', array('dataset' => $graph->addYData(array(sprintf('%.2f', $usage), sprintf('%.2f', $limit - $usage))), 'colors' => array('blue', 'red')));
-            $template->set('quotagraph', $graph->display(), true);
+            $template->set('quotastyle', '<div>');
         }
+        $template->set('quotadisplay', sprintf(_("%.2fMB / %.2fMB  (%.2f%%)"), $usage, $limit, $percent), true);
     }
 }
 
diff --git a/redirect.php b/redirect.php
index 45b7917..42581ff 100644
--- a/redirect.php
+++ b/redirect.php
@@ -1,14 +1,39 @@
 <?php
 /**
- * $Horde: gollem/redirect.php,v 1.55.2.7 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/redirect.php,v 1.55.2.9 2009/01/06 15:23:53 jan Exp $
  *
- * Copyright 1999-2007 Charles J. Hagenbuch <chuck at horde.org>
- * Copyright 1999-2007 Max Kalika <max at horde.org>
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Max Kalika <max at horde.org>
+ * @author Chuck Hagenbuch <chuck at horde.org>
  */
 
+/* Add anchor to outgoing URL. */
+function _addAnchor($url, $type)
+{
+    switch ($type) {
+    case 'param':
+        if (!empty($GLOBALS['url_anchor'])) {
+            $url .= '#' . $GLOBALS['url_anchor'];
+        }
+        break;
+
+    case 'url':
+        $anchor = Util::getFormData('anchor_string');
+        if (!empty($anchor)) {
+            $url .= '#' . $anchor;
+        } else {
+            return _addAnchor($url, 'param');
+        }
+        break;
+    }
+
+    return $url;
+}
+
 @define('AUTH_HANDLER', true);
 @define('GOLLEM_BASE', dirname(__FILE__));
 $authentication = 'none';
@@ -18,7 +43,7 @@ require GOLLEM_BASE . '/config/credentials.php';
 $actionID = Util::getFormData('actionID');
 $backend_key = Util::getFormData('backend_key');
 
-if (is_null($backend_key)) {
+if ($backend_key === null) {
     $autologin = Util::getFormData('autologin', false);
 } else {
     $autologin = Util::getFormData('autologin', Gollem::canAutoLogin($backend_key, true));
@@ -27,17 +52,25 @@ if (is_null($backend_key)) {
 $user = (empty($autologin)) ? Util::getPost('username') : Gollem::getAutologinID($backend_key);
 $pass = (empty($autologin)) ? Util::getPost('password') : Auth::getCredential('password');
 
+/* Get URL/Anchor strings now. */
+$url_anchor = null;
+$url_in = $url_form = Util::getFormData('url');
+if (($pos = strrpos($url_in, '#')) !== false) {
+    $url_anchor = substr($url_in, $pos + 1);
+    $url_in = substr($url_in, 0, $pos);
+}
+
 /* If we already have a session. */
 if (isset($_SESSION['gollem']) &&
     is_array($_SESSION['gollem']) &&
     ($_SESSION['gollem']['backend_key'] == $backend_key)) {
     /* Make sure that if a username was specified, it is the current
      * username. */
-    if ((is_null($user) ||
+    if ((($user === null) ||
          ($user == $GLOBALS['gollem_be']['params']['username'])) &&
-        (is_null($pass) ||
+        (($pass === null) ||
          ($pass == Secret::read(Secret::getKey('gollem'), $GLOBALS['gollem_be']['params']['password'])))) {
-        $url = Util::getFormData('url');
+        $url = $url_in;
         if (empty($url)) {
             $url = Horde::applicationUrl('manager.php', true);
         } elseif (!empty($actionID)) {
@@ -46,10 +79,10 @@ if (isset($_SESSION['gollem']) &&
 
         if (Util::getFormData('load_frameset')) {
             $full_url = Horde::applicationUrl($registry->get('webroot', 'horde') . '/index.php', true);
-            $url = Util::addParameter($full_url, 'url', $url, false);
+            $url = Util::addParameter($full_url, 'url', _addAnchor($url, 'param'), false);
         }
 
-        header('Refresh: 0; URL=' . $url);
+        header('Refresh: 0; URL=' . _addAnchor($url, 'url'));
         exit;
     } else {
         /* Disable the old session. */
@@ -71,13 +104,22 @@ if (Util::getFormData('gollem_loginform') ||
 
     /* Get the required parameters from the form data. */
     $args = array();
-    $postdata = array_keys($GLOBALS['gollem_backends'][$backend_key]['loginparams']);
+    if (isset($GLOBALS['gollem_backends'][$backend_key]['loginparams'])) {
+        $postdata = array_keys($GLOBALS['gollem_backends'][$backend_key]['loginparams']);
+    } else {
+        $postdata = array();
+    }
     if (empty($autologin)) {
-        $GLOBALS['gollem_vfs'] = &VFS::singleton($GLOBALS['gollem_backends'][$backend_key]['driver']);
+        // Allocate a global VFS object
+        $GLOBALS['gollem_vfs'] = &Gollem::getVFSOb($backend_key, array());
+        if (is_a($GLOBALS['gollem_vfs'], 'PEAR_Error')) {
+            Horde::fatal($GLOBALS['gollem_vfs']);
+        }
+
         $postdata = array_merge($postdata, $GLOBALS['gollem_vfs']->getRequiredCredentials());
     } else {
         /* We are attempting autologin.  If hordeauth is off, we need to make
-         * sure we are not trying to use horde auth info to login. */ 
+         * sure we are not trying to use horde auth info to login. */
         if (empty($GLOBALS['gollem_backends'][$backend_key]['hordeauth'])) {
             $pass = Util::getPost('password');
         }
@@ -101,9 +143,8 @@ if (Util::getFormData('gollem_loginform') ||
             $_SESSION['horde_language'] = $horde_language;
         }
 
-        $url = '';
-        if (Util::getFormData('url')) {
-            $url = Horde::url(Util::removeParameter(Util::getFormData('url'), session_name()), true);
+        if (!empty($url_in)) {
+            $url = Horde::url(Util::removeParameter($url_in, session_name()), true);
             if ($actionID) {
                 $url = Util::addParameter($url, 'actionID', $actionID, false);
             }
@@ -121,10 +162,10 @@ if (Util::getFormData('gollem_loginform') ||
 
     if (Util::getFormData('load_frameset')) {
         $full_url = Horde::applicationUrl($registry->get('webroot', 'horde') . '/index.php', true);
-        $url = Util::addParameter($full_url, 'url', $url, false);
+        $url = Util::addParameter($full_url, 'url', _addAnchor($url, 'param'), false);
     }
 
-    header('Refresh: 0; URL=' . $url);
+    header('Refresh: 0; URL=' . _addAnchor($url, 'url'));
     exit;
 }
 
diff --git a/selectlist.php b/selectlist.php
index 6b60ed9..ce092a5 100644
--- a/selectlist.php
+++ b/selectlist.php
@@ -1,18 +1,19 @@
 <?php
 /**
- * $Horde: gollem/selectlist.php,v 1.13.2.4 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/selectlist.php,v 1.13.2.6 2009/01/06 15:23:53 jan Exp $
  *
- * Copyright 2004-2007 Michael Slusarz <slusarz at curecanti.org>
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
- * did notcan receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Michael Slusarz <slusarz at horde.org>
  */
 
 @define('AUTH_HANDLER', true);
 @define('GOLLEM_BASE', dirname(__FILE__));
 $authentication = 'selectlist';
 require_once GOLLEM_BASE . '/lib/base.php';
-require_once 'Horde/Template.php';
 
 /* Set directory. */
 if (is_a($result = Gollem::changeDir(), 'PEAR_Error')) {
@@ -23,7 +24,7 @@ $currdir = Gollem::getDir();
 /* Create a new cache ID if one does not already exist. */
 $cacheid = Util::getFormData('cacheid');
 if (empty($cacheid)) {
-    $cacheid = substr(base_convert(microtime() . mt_rand(), 10, 36), -16);
+    $cacheid = uniqid(mt_rand(), true);
     $_SESSION['gollem']['selectlist'][$cacheid] = array();
 }
 
@@ -50,7 +51,7 @@ case 'select':
                 }
             }
         }
-        $filelist = array_unique($_SESSION['gollem']['selectlist'][$cacheid]['files']);
+        $filelist = array_keys(array_flip($_SESSION['gollem']['selectlist'][$cacheid]['files']));
     }
     break;
 }
@@ -71,8 +72,8 @@ if (is_a($info['list'], 'PEAR_Error')) {
 $info['title'] = htmlspecialchars($GLOBALS['gollem_be']['label']);
 
 /* Image links. */
-$folder_img = Horde::img('manager/folder.png', _("folder"));
-$symlink_img = Horde::img('manager/symlink.png', _("symlink"));
+$folder_img = Horde::img('folder.png', _("folder"));
+$symlink_img = Horde::img('folder_symlink.png', _("symlink"));
 
 /* Commonly used URLs. */
 $self_url = Horde::applicationUrl('selectlist.php');
@@ -83,28 +84,33 @@ $backkey = $_SESSION['gollem']['backend_key'];
 $list = $info['list'];
 $title = $info['title'];
 
+$js_code = array(
+    'var cacheid = \'' . $cacheid . '\'',
+    'var formid = \'' . $formid . '\'',
+);
+
+Horde::addScriptFile('selectlist.js', 'gollem', true);
 require GOLLEM_TEMPLATES . '/common-header.inc';
-require GOLLEM_TEMPLATES . '/selectlist/javascript.inc';
+Gollem::addInlineScript(implode(';', $js_code));
+Gollem::status();
 
 /* Set up the template object. */
-$template = new Horde_Template();
-$template->set('addbutton', _("Add"));
-$template->set('donebutton', _("Done"));
-$template->set('cancelbutton', _("Cancel"));
-$template->set('self_url', $self_url);
-$template->set('forminput', Util::formInput());
-$template->set('cacheid', htmlspecialchars($cacheid));
-$template->set('currdir', htmlspecialchars($currdir));
-$template->set('formid', htmlspecialchars($formid));
-$template->set('navlink', Gollem::directoryNavLink($currdir, Util::addParameter($self_url, array('cacheid' => $cacheid, 'formid' => $formid))));
+$t = new Gollem_Template();
+$t->set('addbutton', _("Add"));
+$t->set('donebutton', _("Done"));
+$t->set('cancelbutton', _("Cancel"));
+$t->set('self_url', $self_url);
+$t->set('forminput', Util::formInput());
+$t->set('cacheid', htmlspecialchars($cacheid));
+$t->set('currdir', htmlspecialchars($currdir));
+$t->set('formid', htmlspecialchars($formid));
+$t->set('navlink', Gollem::directoryNavLink($currdir, Util::addParameter($self_url, array('cacheid' => $cacheid, 'formid' => $formid))));
 if ($GLOBALS['conf']['backend']['backend_list'] == 'shown') {
-    $template->set('changeserver', Horde::link(htmlspecialchars(Auth::addLogoutParameters(Util::addParameter(Horde::applicationUrl('login.php'), array('url' => Util::addParameter(Horde::url('selectlist.php'), array('formid' => $formid)))), AUTH_REASON_LOGOUT)), _("Change Server")) . Horde::img('logout.png', _("Change Server"), null, $GLOBALS['registry']->getImageDir('horde')) . '</a>', true);
+    $t->set('changeserver', Horde::link(htmlspecialchars(Auth::addLogoutParameters(Util::addParameter(Horde::applicationUrl('login.php'), array('url' => Util::addParameter(Horde::url('selectlist.php'), array('formid' => $formid)))), AUTH_REASON_LOGOUT)), _("Change Server")) . Horde::img('logout.png', _("Change Server"), null, $GLOBALS['registry']->getImageDir('horde')) . '</a>', true);
 } else {
-    $template->set('changeserver', '', true);
+    $t->set('changeserver', '', true);
 }
 
-
-
 if (is_array($list) &&
     count($list) &&
     Gollem::checkPermissions('backend', PERMS_READ)) {
@@ -131,8 +137,16 @@ if (is_array($list) &&
             if (empty($icon_cache[$val['type']])) {
                 require_once 'Horde/MIME/Magic.php';
                 require_once 'Horde/MIME/Viewer.php';
-                require HORDE_BASE . '/config/mime_drivers.php';
-                require GOLLEM_BASE . '/config/mime_drivers.php';
+                if (is_callable(array('Horde', 'loadConfiguration'))) {
+                    $result = Horde::loadConfiguration('mime_drivers.php', array('mime_drivers', 'mime_drivers_map'), 'horde');
+                    extract($result);
+                    $result = Horde::loadConfiguration('mime_drivers.php', array('mime_drivers', 'mime_drivers_map'), 'gollem');
+                    $mime_drivers = array_merge_recursive($mime_drivers, $result['mime_drivers']);
+                    $mime_drivers_map = array_merge_recursive($mime_drivers_map, $result['mime_drivers_map']);
+                } else {
+                    require HORDE_BASE . '/config/mime_drivers.php';
+                    require GOLLEM_BASE . '/config/mime_drivers.php';
+                }
                 $icon_cache[$val['type']] = Horde::img(MIME_Viewer::getIcon(MIME_Magic::extToMIME($val['type'])), '', '', '');
             }
             $item['graphic'] = $icon_cache[$val['type']];
@@ -179,11 +193,11 @@ if (is_array($list) &&
         $entry[] = $item;
     }
 
-    $template->set('entry', $entry, true);
-    $template->set('nofiles', '', true);
+    $t->set('entry', $entry, true);
+    $t->set('nofiles', '', true);
 } else {
-    $template->set('nofiles', _("There are no files in this folder."), true);
+    $t->set('nofiles', _("There are no files in this folder."), true);
 }
 
-echo $template->fetch(GOLLEM_TEMPLATES . '/selectlist/selectlist.html');
+echo $t->fetch(GOLLEM_TEMPLATES . '/selectlist/selectlist.html');
 require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/templates/clipboard/clipboard.html b/templates/clipboard/clipboard.html
index ec38c8d..826d50f 100644
--- a/templates/clipboard/clipboard.html
+++ b/templates/clipboard/clipboard.html
@@ -17,21 +17,34 @@
  <gettext>Current directory:</gettext> <tt><tag:currdir /></tt>
 </div>
 
-<table class="striped nowrap" width="100%" cellspacing="0">
+<table class="clipboard striped nowrap" width="100%" cellspacing="0">
+<thead>
+ <tr>
+  <td>
+   <label><input type="checkbox" class="checkbox" onclick="$$('.clipboard tbody .checkbox').each((function(e) { e.checked = this.checked; }).bind(this));" /> Select All/None</label>
+  </td>
+   </tr>
+</thead>
+<tbody>
 <loop:entry>
  <tr>
   <td>
-   <input type="checkbox" name="items[]" value="<tag:entry.id />" />
-   &nbsp;<if:entry.cut><tag:cutgraphic /></if:entry.cut><if:entry.copy><tag:copygraphic /></if:entry.copy>
-   &nbsp;<tag:entry.name />
+   <label><input type="checkbox" class="checkbox" name="items[]" value="<tag:entry.id />" />
+   <if:entry.cut><tag:cutgraphic /></if:entry.cut><if:entry.copy><tag:copygraphic /></if:entry.copy>
+   <tag:entry.name /></label>
   </td>
  </tr>
 </loop:entry>
+</tbody>
+<tfoot>
+ <tr>
+  <td>
+   <input class="button" type="button" value="<tag:pastebutton />" onclick="document.clipboard.actionID.value='paste_items';document.clipboard.submit();" />
+   <input class="button" type="button" value="<tag:clearbutton />" onclick="document.clipboard.actionID.value='clear_items';document.clipboard.submit();" />
+   <input class="button" type="button" value="<tag:cancelbutton />" onclick="document.clipboard.submit();" />
+  </td>
+ </tr>
+</tfoot>
 </table>
 
-<div style="text-align: center">
- <input class="button" type="button" value="<tag:pastebutton />" onclick="document.clipboard.actionID.value='paste_items';document.clipboard.submit();" />
- <input class="button" type="button" value="<tag:clearbutton />" onclick="document.clipboard.actionID.value='clear_items';document.clipboard.submit();" />
- <input class="button" type="button" value="<tag:cancelbutton />" onclick="document.clipboard.submit();" />
-</div>
 </form>
diff --git a/templates/common-header.inc b/templates/common-header.inc
index c7486ca..d466dd7 100644
--- a/templates/common-header.inc
+++ b/templates/common-header.inc
@@ -5,9 +5,9 @@ if (isset($language)) {
 }
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
-<!-- Gollem: Copyright 2001-2006, The Horde Project. Gollem is under the GPL. -->
-<!-- Horde Project: http://horde.org/ | Gollem: http://horde.org/gollem/ -->
-<!-- GNU Public License: http://www.fsf.org/copyleft/gpl.html -->
+<!--  Gollem: Copyright 2001-2009 The Horde Project.  Gollem is under the GPL.   -->
+<!-- Horde Project: http://www.horde.org/ | Gollem: http://www.horde.org/gollem/ -->
+<!--          GNU Public License: http://www.fsf.org/copyleft/gpl.html           -->
 <?php
 echo (!empty($language)) ? '<html lang="' . strtr($language, '_', '-') . '"' : '<html';
 echo (!empty($ie_clientcaps)) ? ' xmlns:IE>' : '>';
@@ -22,6 +22,7 @@ if (!empty($refresh_time) && ($refresh_time > 0) && !empty($refresh_url)) {
 }
 
 Horde::includeScriptFiles();
+require GOLLEM_TEMPLATES . '/javascript_defs.php';
 
 ?>
 <title><?php echo htmlspecialchars($page_title) ?></title>
@@ -30,5 +31,5 @@ Horde::includeScriptFiles();
 <?php if (!empty($ie_clientcaps)): ?><style>IE\:clientcaps {behavior:url(#default#clientcaps)}</style><?php endif; ?>
 </head>
 
-<body<?php if (Util::nonInputVar('bodyClass')) echo ' class="' . $bodyClass . '"' ?>>
+<body<?php if ($bc = Util::nonInputVar('bodyClass')) echo ' class="' . $bc . '"' ?><?php if ($bi = Util::nonInputVar('bodyId')) echo ' id="' . $bi . '"'; ?>>
 <?php if (!empty($ie_clientcaps)): ?><IE:clientcaps ID="objCCaps" /><?php endif; ?>
diff --git a/templates/edit/edit.inc b/templates/edit/edit.inc
new file mode 100644
index 0000000..3c377ab
--- /dev/null
+++ b/templates/edit/edit.inc
@@ -0,0 +1,18 @@
+<form name="edit_form" action="<?php echo Horde::applicationUrl('edit.php') ?>" method="post">
+<?php echo Util::formInput() ?>
+<input type="hidden" name="actionID" value="save_file" />
+<input type="hidden" name="driver" value="<?php echo $driver ?>" />
+<input type="hidden" name="dir" value="<?php echo $filedir ?>" />
+<input type="hidden" name="file" value="<?php echo $filename ?>" />
+
+<h1 class="header"><?php echo sprintf(_("Edit %s"), $filename) ?></h1>
+
+<textarea name="content" id="content" rows="40" style="width:99%;"><?php echo htmlspecialchars($data) ?></textarea>
+<input type="submit" class="button" value="<?php echo _("Save") ?>" />
+<input type="reset" class="button" value="<?php echo _("Reset") ?>" />
+<input type="button" class="button" value="<?php echo _("Cancel") ?>" onclick="window.close()" />
+</form>
+
+<script type="text/javascript">
+document.edit_form.content.focus();
+</script>
diff --git a/templates/javascript/open_quota_win.js b/templates/javascript/open_quota_win.js
deleted file mode 100644
index 6763cda..0000000
--- a/templates/javascript/open_quota_win.js
+++ /dev/null
@@ -1,21 +0,0 @@
-function open_quota_win(args)
-{
-    var url = "<?php echo Horde::url($GLOBALS['registry']->applicationWebPath('%application%/quota.php', 'gollem')) ?>";
-    if (url.indexOf('?') == -1) {
-        var glue = '?';
-    } else {
-        var glue = '&';
-    }
-    var now = new Date();
-    var name = "quota_window_" + now.getTime();
-    if (args != "") {
-        url = url + glue + args + "&uniq=" + now.getTime();
-    } else {
-        url = url + glue + "uniq=" + now.getTime();
-    }
-    var param = "toolbar=no,location=no,status=yes,scrollbars=yes,resizable=no,width=300,height=300,left=0,top=0";
-    eval("name = window.open(url, name, param)");
-    if (!eval("name.opener")) {
-        eval("name.opener = self");
-    }
-}
diff --git a/templates/javascript/open_selectlist_win.js b/templates/javascript/open_selectlist_win.js
deleted file mode 100644
index 3ad23a2..0000000
--- a/templates/javascript/open_selectlist_win.js
+++ /dev/null
@@ -1,11 +0,0 @@
-function open_selectlist_win(formid, cacheid)
-{
-    var url = '<?php echo Util::addParameter(Horde::url($GLOBALS['registry']->get('webroot', 'gollem') . '/selectlist.php', true), 'formid', '', false) ?>' + formid + '&cacheid=' + cacheid;
-    var now = new Date();
-    var name = "selectlist_window_" + now.getTime();
-    var param = "toolbar=no,location=no,status=yes,scrollbars=yes,resizable=no,width=300,height=500,left=0,top=0";
-    eval("name = window.open(url, name, param)");
-    if (!eval("name.opener")) {
-        eval("name.opener = self");
-    }
-}
diff --git a/templates/javascript_defs.php b/templates/javascript_defs.php
new file mode 100644
index 0000000..6108ade
--- /dev/null
+++ b/templates/javascript_defs.php
@@ -0,0 +1,38 @@
+<?php
+
+require_once GOLLEM_BASE . '/lib/JSON.php';
+$charset = NLS::getCharset();
+
+/* Variables used in core javascript files. */
+$var = array(
+    'empty_input' => intval($GLOBALS['browser']->hasQuirk('empty_file_input_value')),
+    'prefs_api' => Horde::applicationUrl('pref_api.php', true),
+);
+
+/* Gettext strings used in core javascript files. */
+$gettext = array_map('addslashes', array(
+    /* Strings used in popup.js */
+    'popup_block' => _("A popup window could not be opened. Perhaps you have set your browser to block popup windows?"),
+
+    /* Strings used in login.js */
+    'login_username' => _("Please provide your username."),
+    'login_password' => _("Please provide your password."),
+
+    /* Strings used in manager.js */
+    'select_item' => _("Please select an item before this action."),
+    'delete_confirm_1' => _("The following items will be permanently deleted:"),
+    'delete_confirm_2' => _("Are you sure?"),
+    'delete_recurs_1' => _("The following item(s) are folders:"),
+    'delete_recurs_2' => _("Are you sure you wish to continue?"),
+    'specify_upload' => _("Please specify at least one file to upload."),
+    'file' => _("File"),
+
+    /* Strings used in selectlist.js */
+    'opener_window' => _("The original opener window has been closed. Exiting."),
+));
+
+?>
+<script type="text/javascript">//<![CDATA[
+var GollemVar = <?php echo Gollem_Serialize_JSON::encode(String::convertCharset($var, $charset, 'UTF-8')) ?>;
+var GollemText = <?php echo Gollem_Serialize_JSON::encode(String::convertCharset($gettext, $charset, 'UTF-8')) ?>;
+//]]></script>
diff --git a/templates/login/javascript.inc b/templates/login/javascript.inc
deleted file mode 100644
index 6dddc3c..0000000
--- a/templates/login/javascript.inc
+++ /dev/null
@@ -1,77 +0,0 @@
-<script type="text/javascript">
-<!--
-
-function setFocus()
-{
-    if (document.gollem_login.username) {
-        document.gollem_login.username.focus();
-    }
-}
-
-<?php if ($GLOBALS['conf']['backend']['backend_list'] == 'shown'): ?>
-function gollem_reload()
-{
-    var url = '<?php echo Util::addParameter(htmlspecialchars(Horde::selfUrl(false, true, true)), array('backend_key' => null), null, false) ?>' + document.gollem_login.backend_key[document.gollem_login.backend_key.selectedIndex].value;
-    if (document.gollem_login.url &&
-        document.gollem_login.url.value) {
-        url += '&url=' + document.gollem_login.url.value;
-    }
-    window.location = url;
-}
-<?php endif; ?>
-
-function submit_login(e)
-{
-    if (typeof e != 'undefined' && !enter_key_trap(e)) {
-        return;
-    }
-
-    if (document.gollem_login.username &&
-        document.gollem_login.username.value == "") {
-        alert('<?php echo addslashes(_("Please provide your username.")) ?>');
-        document.gollem_login.username.focus();
-        return false;
-    } else if (document.gollem_login.password &&
-               document.gollem_login.password.value == "") {
-        alert('<?php echo addslashes(_("Please provide your password.")) ?>');
-        document.gollem_login.password.focus();
-        return false;
-    } else {
-        document.gollem_login.loginButton.disabled = true;
-<?php if (!empty($ie_clientcaps)): ?>
-        try {
-            document.gollem_login.ie_version.value = objCCaps.getComponentVersion("{89820200-ECBD-11CF-8B85-00AA005B4383}","componentid");
-        } catch (e) {
-        }
-<?php endif; ?>
-        document.gollem_login.submit();
-        return true;
-    }
-}
-
-<?php if ($choose_language): ?>
-function selectLang()
-{
-    // We need to reload the login page here, but only if the user hasn't
-    // already entered a username and password.
-    var lang_page = 'login.php?new_lang=' + document.gollem_login.new_lang[document.gollem_login.new_lang.selectedIndex].value;
-<?php if (!is_null($lang_url)): ?>
-    lang_page += '&url=<?php echo $lang_url ?>';
-<?php endif; ?>
-    self.location = lang_page;
-}
-<?php endif; ?>
-
-<?php if ($gollem_auth): ?>
-if (parent.frames.horde_main) {
-    document.gollem_login.target = '_parent';
-}
-<?php endif; ?>
-
-// Set up the enter keytrap code
-if (typeof document.captureEvents != 'undefined') {
-    document.captureEvents(Event.KEYPRESS);
-    document.onkeypress = submit_login;
-}
-//-->
-</script>
diff --git a/templates/login/login.html b/templates/login/login.html
index 65931cb..a9e3dd0 100644
--- a/templates/login/login.html
+++ b/templates/login/login.html
@@ -15,6 +15,7 @@
 <input type="hidden" name="load_frameset" value="<tag:load_frameset />" />
 <input type="hidden" name="url" value="<tag:url />" />
 <input type="hidden" name="autologin" value="<tag:autologin />" />
+<input type="hidden" name="anchor_string" id="anchor_string" value="<tag:anchor_string />" />
 <if:clientcaps>
 <input type="hidden" name="ie_version" value="" />
 </if:clientcaps>
@@ -28,9 +29,9 @@
    <table width="300" align="center">
 <if:backend_shown>
     <tr>
-     <td align="right" class="light"><strong><gettext>Server</gettext></strong></td>
+     <td align="right" class="light"><strong><label for="backend_key"><gettext>Server</gettext></label></strong></td>
      <td class="light" align="left">
-      <select tabindex="<tag:shown_tabindex />" name="backend_key" onchange="gollem_reload()">
+      <select tabindex="<tag:shown_tabindex />" id="backend_key" name="backend_key" onchange="gollem_reload()">
 <loop:shown_array>
        <option value="<tag:shown_array.val />" <if:shown_array.sel>selected="selected"</if:shown_array.sel>><tag:shown_array.name /></option>
 </loop:shown_array>
@@ -48,25 +49,25 @@
 
 <loop:loginparams>
     <tr>
-     <td align="right" class="light"><strong><tag:loginparams.label /></strong></td>
+     <td align="right" class="light"><strong><label for="<tag:loginparams.name />"><tag:loginparams.label /></label></strong></td>
      <td align="left" class="light">
-      <input type="text" tabindex="<tag:loginparams.tabindex />" name="<tag:loginparams.name />" value="<tag:loginparams.val />" />
+      <input type="text" tabindex="<tag:loginparams.tabindex />" id="<tag:loginparams.name />" name="<tag:loginparams.name />" value="<tag:loginparams.val />" />
      </td>
     </tr>
 </loop:loginparams>
 
 <loop:log_creds>
     <tr>
-     <td align="right" class="light"><strong><tag:log_creds.label /></strong></td>
-     <td align="left"><input tabindex="<tag:log_creds.tabindex />" type="<tag:log_creds.type />" name="<tag:log_creds.name />" value="<tag:log_creds.val />" /></td>
+     <td align="right" class="light"><strong><label for="<tag:log_creds.name />"><tag:log_creds.label /></label></strong></td>
+     <td align="left"><input tabindex="<tag:log_creds.tabindex />" type="<tag:log_creds.type />" id="<tag:log_creds.name />" name="<tag:log_creds.name />" value="<tag:log_creds.val />" /></td>
     </tr>
 </loop:log_creds>
 
 <if:choose_language>
     <tr>
-     <td align="right" class="light"><strong><gettext>Language</gettext></strong></td>
+     <td align="right" class="light"><strong><label for="new_lang"><gettext>Language</gettext></label></strong></td>
      <td align="left" class="light">
-      <select tabindex="<tag:langs_tabindex />" name="new_lang" onchange="selectLang()">
+      <select tabindex="<tag:langs_tabindex />" id="new_lang" name="new_lang" onchange="selectLang()">
 <loop:langs>
        <option value="<tag:langs.val />" <if:langs.sel>selected="selected"</if:langs.sel>><tag:langs.name /></option>
 </loop:langs>
diff --git a/templates/manager/javascript.inc b/templates/manager/javascript.inc
deleted file mode 100644
index 9c9b8d4..0000000
--- a/templates/manager/javascript.inc
+++ /dev/null
@@ -1,503 +0,0 @@
-<script type="text/javascript">
-<!--
-
-function toggleRow()
-{
-    if (!document.getElementsByTagName) {
-        return;
-    }
-
-    tables = document.getElementsByTagName('table');
-    for (i = 0; i < tables.length; i++) {
-        if (tables[i].className.indexOf('striped') != -1) {
-            var trs = tables[i].getElementsByTagName('tr');
-            for (var j = 0; j < trs.length; j++) {
-                trs[j].onmouseover=function(){
-                    this.className += ' selected'; return false
-                }
-                trs[j].onmouseout=function(){
-                    this.className = this.className.replace('selected', ''); return false
-                }
-            }
-        }
-    }
-}
-window.onload = toggleRow;
-
-function checkedCount()
-{
-    numChecked = 0;
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].checked) {
-            numChecked++;
-        }
-    }
-    return numChecked;
-}
-
-function getSelected()
-{
-    var sel = '';
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].name == 'items[]') {
-            if (document.manager.elements[i].checked == 1) {
-                sel += document.manager.elements[i].value + "\n";
-            }
-        }
-    }
-
-    if (sel.charAt(sel.length - 1) == "\n") {
-        sel = sel.substring(0, sel.length - 1);
-    }
-
-    return sel;
-}
-
-function getNumItems()
-{
-    var numItems = 0;
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].name == 'items[]') {
-            numItems++;
-        }
-    }
-
-    return numItems;
-}
-
-function getItemsArray()
-{
-    var itemsArray = new Array(getNumItems() * 3);
-    var arrayPointer = 0;
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].name == 'items[]') {
-            itemsArray[arrayPointer] = document.manager.elements[i].checked;
-            itemsArray[arrayPointer+1] = document.manager.elements[i].value;
-            arrayPointer += 3;
-        }
-    }
-    arrayPointer = 2;
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].name == 'itemTypes[]') {
-            itemsArray[arrayPointer] = document.manager.elements[i].value;
-            arrayPointer += 3;
-        }
-    }
-
-    return itemsArray;
-}
-
-function getSelectedFoldersList()
-{
-    var selectedFolders = '';
-    var itemsArray = getItemsArray();
-    for (var i = 0; i < itemsArray.length; i += 3) {
-        if (itemsArray[i] && itemsArray[i + 2] == '**dir') {
-            selectedFolders += itemsArray[i + 1] + '\n';
-        }
-    }
-
-    if (selectedFolders.length > 0) {
-        if (selectedFolders.charAt(selectedFolders.length - 1) == "\n") {
-            selectedFolders = selectedFolders.substring(0, selectedFolders.length - 1);
-        }
-    }
-
-    return selectedFolders;
-}
-
-function AnySelected()
-{
-    for (i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].checked) return true;
-    }
-    return false;
-}
-
-function chooseAction(i)
-{
-    if (i == 1) {
-        action = document.manager.action1.options[document.manager.action1.selectedIndex].value;
-    } else {
-        action = document.manager.action2.options[document.manager.action2.selectedIndex].value;
-    }
-
-    if (action == 'create_folder') {
-        createFolder();
-    } else if (action == 'change_directory') {
-        changeDirectory();
-    } else if (action == 'paste_items') {
-        pasteItems();
-    } else if (checkedCount() == 0) {
-        alert('<?php echo addslashes(_("Please select an item before this action.")) ?>');
-    } else if (action == 'rename_items') {
-        renameItems();
-    } else if (action == 'delete_items') {
-        deleteItems();
-    } else if (action == 'chmod_modify') {
-        chmodItems();
-    } else if (action == 'cut_items') {
-        cutItems();
-    } else if (action == 'copy_items') {
-        copyItems();
-    }
-}
-
-function createFolder()
-{
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].checked) {
-            document.manager.elements[i].checked = false;
-        }
-    }
-
-    var popup = document.getElementById('createFolder');
-    popup.style.visibility = 'visible';
-    document.createfrm.foldername.focus();
-}
-
-function changeDirectory()
-{
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].checked) {
-            document.manager.elements[i].checked = false;
-        }
-    }
-
-    var popup = document.getElementById('changeDirectory');
-    popup.style.visibility = 'visible';
-    document.cdfrm.foldername.focus();
-}
-
-function renameItems()
-{
-    var found = false;
-
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].name == "items[]" &&
-            document.manager.elements[i].checked) {
-            document.manager.elements[i].checked = false;
-            document.renamefrm.oldname.value = document.manager.elements[i].value;
-            document.renamefrm.newname.value = document.manager.elements[i].value;
-            found = true;
-            break;
-        }
-    }
-
-    if (found) {
-        var popup = document.getElementById('rename');
-        popup.style.visibility = 'visible';
-        document.renamefrm.newname.focus();
-    }
-}
-
-function deleteItems()
-{
-    var cont = false;
-
-    if (window.confirm('<?php echo addslashes(_("The following items will be permanently deleted: ")) ?>\n' + getSelected() + '\n<?php echo addslashes(_("Are you sure?")) ?>')) {
-    <?php if ($GLOBALS['prefs']->getValue('recursive_deletes') == 'warn'): ?>
-        var selectedFolders = getSelectedFoldersList();
-        if (selectedFolders.length > 0) {
-            if (window.confirm('<?php echo addslashes(_("The following item(s) are folders: ")) ?>\n' + selectedFolders + '\n<?php echo addslashes(_("Are you sure you wish to continue?")) ?>')) {
-                cont = true;
-            }
-        } else {
-            cont = true;
-        }
-    <?php else: ?>
-        cont = true;
-    <?php endif; ?>
-    }
-
-    if (cont) {
-        document.manager.actionID.value = 'delete_items';
-        document.manager.submit();
-    }
-}
-
-function chmodItems()
-{
-    var popup = document.getElementById('attributes');
-    popup.style.visibility = 'visible';
-}
-
-function cutItems()
-{
-    document.manager.actionID.value = 'cut_items';
-    document.manager.submit();
-}
-
-function copyItems()
-{
-    document.manager.actionID.value = 'copy_items';
-    document.manager.submit();
-}
-
-function pasteItems()
-{
-    document.manager.actionID.value = 'paste_items';
-    document.manager.submit();
-}
-
-function toggleSelection()
-{
-    var total = 0;
-    var checked = 0;
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].name == "items[]") {
-            total++;
-            if (document.manager.elements[i].checked) {
-                checked++;
-            }
-        }
-    }
-
-    var new_value = (total != checked);
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].name == "items[]") {
-            document.manager.elements[i].checked = new_value;
-        }
-    }
-}
-
-function createFolderOK()
-{
-    var popup = document.getElementById('createFolder');
-    popup.style.visibility = 'hidden';
-
-    if (document.createfrm.foldername.value != '') {
-        document.manager.new_folder.value = document.createfrm.foldername.value;
-        document.manager.actionID.value = 'create_folder';
-        document.manager.submit();
-    }
-}
-
-function createFolderKeyCheck(event)
-{
-    if (event.keyCode == 27) {
-        createFolderCancel();
-        return false;
-    } else if (event.keyCode == 13) {
-        createFolderOK();
-        return false;
-    }
-    return true;
-}
-
-function createFolderCancel()
-{
-    var popup = document.getElementById('createFolder');
-    popup.style.visibility = 'hidden';
-    document.createfrm.reset();
-}
-
-function chmodCancel()
-{
-    document.chmodfrm.reset();
-    var popup = document.getElementById('attributes');
-    popup.style.visibility = 'hidden';
-}
-
-function chmodSave()
-{
-    owner = 0;
-    group = 0;
-    all = 0;
-
-    for (var i = 0; i < document.chmodfrm.elements.length; i++) {
-        if (document.chmodfrm.elements[i].name == "owner[]" && document.chmodfrm.elements[i].checked) {
-            owner |= document.chmodfrm.elements[i].value;
-        }
-        else if (document.chmodfrm.elements[i].name == "group[]" && document.chmodfrm.elements[i].checked) {
-            group |= document.chmodfrm.elements[i].value;
-        }
-        else if (document.chmodfrm.elements[i].name == "all[]" && document.chmodfrm.elements[i].checked) {
-            all |= document.chmodfrm.elements[i].value;
-        }
-    }
-
-    var popup = document.getElementById('attributes');
-    popup.style.visibility = 'hidden';
-
-    document.manager.chmod.value = "0" + owner + "" + group + "" + all;
-    document.manager.actionID.value = 'chmod_modify';
-    document.manager.submit();
-}
-
-function renameOK()
-{
-    var newNames = document.manager.new_names.value;
-    var oldNames = document.manager.old_names.value;
-
-    if (document.renamefrm.newname.value != '' &&
-        document.renamefrm.newname.value != document.renamefrm.oldname.value) {
-        newNames += "|" + document.renamefrm.newname.value;
-        oldNames += "|" + document.renamefrm.oldname.value;
-    }
-
-    if (newNames.charAt(0) == "|") {
-        newNames = newNames.substring(1);
-    }
-    if (oldNames.charAt(0) == "|") {
-        oldNames = oldNames.substring(1);
-    }
-
-    document.manager.new_names.value = newNames;
-    document.manager.old_names.value = oldNames;
-
-    var found = false;
-
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].name == "items[]" && document.manager.elements[i].checked) {
-            document.manager.elements[i].checked = false;
-            document.renamefrm.oldname.value = document.manager.elements[i].value;
-            document.renamefrm.newname.value = document.manager.elements[i].value;
-            found = true;
-            break;
-        }
-    }
-
-    if (found) {
-        var popup = document.getElementById('rename');
-        popup.style.visibility = 'visible';
-        document.renamefrm.newname.focus();
-    } else {
-        document.manager.actionID.value = 'rename_items';
-        document.manager.submit();
-    }
-
-    return false;
-}
-
-function renameCancel()
-{
-    document.manager.new_names.value = '';
-    document.manager.old_names.value = '';
-
-    var popup = document.getElementById('rename');
-    popup.style.visibility = 'hidden';
-}
-
-function renameKeyCheck(event)
-{
-    if (event.keyCode == 13) {
-        renameOK();
-        return false;
-    }
-    if (event.keyCode == 27) {
-        renameCancel();
-        return false;
-    }
-    return true;
-}
-
-function changeDirectoryOK()
-{
-    var popup = document.getElementById('changeDirectory');
-    popup.style.visibility = 'hidden';
-
-    if (document.cdfrm.foldername.value != '') {
-        document.manager.dir.value = document.cdfrm.foldername.value;
-        document.manager.submit();
-    }
-}
-
-function changeDirectoryKeyCheck(event)
-{
-    if (event.keyCode == 27) {
-        changeDirectoryCancel();
-        return false;
-    } else if (event.keyCode == 13) {
-        changeDirectoryOK();
-        return false;
-    }
-    return true;
-}
-
-function changeDirectoryCancel()
-{
-    var popup = document.getElementById('changeDirectory');
-    popup.style.visibility = 'hidden';
-    document.cdfrm.reset();
-}
-
-function uploadFields()
-{
-    var fields = new Array();
-    for (var i = 0; i < document.manager.elements.length; i++) {
-        if (document.manager.elements[i].type == 'file' &&
-            document.manager.elements[i].name.substr(0, 12) == 'file_upload_') {
-            fields[fields.length] = document.manager.elements[i];
-        }
-    }
-    return fields;
-}
-
-function uploadFile()
-{
-    if (uploadsExist()) {
-        document.manager.actionID.value = 'upload_file';
-        document.manager.submit();
-    }
-}
-
-function uploadsExist()
-{
-<?php if ($GLOBALS['browser']->hasQuirk('empty_file_input_value')): ?>
-    return true;
-<?php else: ?>
-    var fields = uploadFields();
-    for (var i = 0; i < fields.length; i++) {
-        if (fields[i].value.length > 0) {
-            return true;
-        }
-    }
-    alert('<?php echo addslashes(_("Please specify at least one file to upload.")) ?>');
-    document.manager.file_upload_1.focus();
-    return false;
-<?php endif; ?>
-}
-
-function uploadChanged()
-{
-<?php if ($GLOBALS['browser']->hasQuirk('empty_file_input_value') ||
-          !$GLOBALS['browser']->hasFeature('dom')): ?>
-    return;
-<?php else: ?>
-
-    var fields = uploadFields();
-    var usedFields = 0;
-
-    for (var i = 0; i < fields.length; i++) {
-        if (fields[i].value.length > 0) {
-            usedFields++;
-        }
-    }
-
-    if (usedFields == fields.length) {
-        var lastRow = document.getElementById('upload_row_' + usedFields);
-        if (lastRow) {
-            var newRow = document.createElement('DIV');
-            newRow.id = 'upload_row_' + (usedFields + 1);
-            var strong = document.createElement('STRONG');
-            newRow.appendChild(strong);
-            strong.appendChild(document.createTextNode('<?php echo _("File") ?> ' + (usedFields + 1) + ':'));
-            newRow.appendChild(document.createTextNode(' '));
-            var file = document.createElement('INPUT');
-            file.type = 'file';
-            newRow.appendChild(file);
-            file.name = 'file_upload_' + (usedFields + 1);
-            file.onchange = function()
-            {
-                uploadChanged();
-            };
-            file.size = 25;
-            lastRow.parentNode.insertBefore(newRow, lastRow.nextSibling);
-        }
-    }
-<?php endif; ?>
-}
-
-// -->
-</script>
diff --git a/templates/manager/manager.html b/templates/manager/manager.html
index e5172bd..ceeb74c 100644
--- a/templates/manager/manager.html
+++ b/templates/manager/manager.html
@@ -1,7 +1,7 @@
 <if:list_count>
 <if:perms_chmod>
-<div id="attributes" class="managerhidden">
-<form name="chmodfrm" action="<tag:action />">
+<div id="attributes" class="managerpopup" style="display:none;">
+<form id="chmodfrm" name="chmodfrm" action="<tag:action />">
 <h1 class="header"><gettext>Attributes</gettext></h1>
 <table width="100%" cellspacing="0" class="text">
  <tr class="control">
@@ -29,11 +29,8 @@
   <td align="center" width="25%"><input name="all[]" type="checkbox" value="1" <if:all_execute>disabled="disabled" </if:all_execute>/></td>
  </tr>
  <tr class="control">
-  <td align="center" width="50%" colspan="2"><input class="button" type="button" name="Save" value="<tag:save />" onclick="chmodSave();" /></td>
-  <td align="center" width="50%" colspan="2"><input class="button" type="button" name="Cancel" value="<tag:cancel />" onclick="chmodCancel()" /></td>
- </tr>
- <tr class="control">
-  <td align="center" width="100%" colspan="4" height="5"></td>
+  <td align="center" width="50%" colspan="2"><input class="button" type="button" name="Save" value="<tag:save />" onclick="Gollem.chmodSave();" /></td>
+  <td align="center" width="50%" colspan="2"><input class="button" type="button" name="Cancel" value="<tag:cancel />" onclick="Gollem.chmodCancel()" /></td>
  </tr>
 </table>
 </form>
@@ -41,59 +38,53 @@
 </if:perms_chmod>
 
 <if:perms_edit>
-<div id="rename" class="managerhidden">
-<form name="renamefrm" action="<tag:action />">
-<input type="hidden" name="oldname" value="" />
+<div id="rename" class="managerpopup" style="display:none;">
+<form id="renamefrm" action="<tag:action />">
+<input type="hidden" id="renamefrm_oldname" name="oldname" value="" />
 <h1 class="header"><gettext>Rename</gettext></h1>
 <div class="control nowrap" style="padding:3px">
  <gettext>Name:</gettext>
- <input class="input" type="text" name="newname" value="" onkeypress="return renameKeyCheck(event);" />
-</div>
-<div class="control centerAlign" style="padding:3px">
- <input class="button" type="button" value="<tag:ok />" onclick="renameOK();" />
- <input class="button" type="button" value="<tag:cancel />" onclick="renameCancel()" />
+ <input class="input" type="text" id="renamefrm_newname" name="newname" value="" onkeypress="return Gollem.renameKeyCheck(event);" />
+ <input class="button" type="button" value="<tag:ok />" onclick="Gollem.renameOK();" />
+ <input class="button" type="button" value="<tag:cancel />" onclick="Gollem.renameCancel()" />
 </div>
 </form>
 </div>
 </if:perms_edit>
 </if:list_count>
 
-<div id="createFolder" class="managerhidden">
-<form name="createfrm" onsubmit="return false;" action="<tag:action />">
+<div id="createFolder" class="managerpopup" style="display:none;">
+<form id="createfrm" onsubmit="return false;" action="<tag:action />">
 <h1 class="header"><gettext>Create Folder</gettext></h1>
 <div class="control nowrap" style="padding:3px">
  <gettext>Name:</gettext>
- <input class="input" type="text" name="foldername" value="" onkeypress="return createFolderKeyCheck(event);" />
-</div>
-<div class="control centerAlign" style="padding:3px">
- <input class="button" type="button" value="<tag:ok />" onclick="createFolderOK();" />
- <input class="button" type="button" value="<tag:cancel />" onclick="createFolderCancel()" />
+ <input class="input" type="text" id="createfrm_fname" name="foldername" value="" onkeypress="return Gollem.createFolderKeyCheck(event);" />
+ <input class="button" type="button" value="<tag:ok />" onclick="Gollem.createFolderOK();" />
+ <input class="button" type="button" value="<tag:cancel />" onclick="Gollem.createFolderCancel()" />
 </div>
 </form>
 </div>
 
-<div id="changeDirectory" class="managerhidden">
-<form name="cdfrm" onsubmit="return false;" action="<tag:action />">
+<div id="changeDirectory" class="managerpopup" style="display:none;">
+<form id="cdfrm" onsubmit="return false;" action="<tag:action />">
 <h1 class="header"><gettext>Change Folder</gettext></h1>
 <div class="control nowrap" style="padding:3px">
  <gettext>Go to:</gettext>
- <input class="input" type="text" name="foldername" value="" onkeypress="return changeDirectoryKeyCheck(event);" />
-</div>
-<div class="control centerAlign" style="padding:3px">
- <input class="button" type="button" value="<tag:ok />" onclick="changeDirectoryOK();" />
- <input class="button" type="button" value="<tag:cancel />" onclick="changeDirectoryCancel()" />
+ <input class="input" type="text" id="cdfrm_fname" name="foldername" value="" onkeypress="return Gollem.changeDirectoryKeyCheck(event);" />
+ <input class="button" type="button" value="<tag:ok />" onclick="Gollem.changeDirectoryOK();" />
+ <input class="button" type="button" value="<tag:cancel />" onclick="Gollem.changeDirectoryCancel()" />
 </div>
 </form>
 </div>
 
-<form method="post" name="manager" enctype="multipart/form-data" action="<tag:action />">
+<form method="post" id="manager" name="manager" enctype="multipart/form-data" action="<tag:action />">
 <tag:forminput />
-<input type="hidden" name="actionID" value="" />
-<input type="hidden" name="new_folder" value="" />
-<input type="hidden" name="new_names" value="" />
-<input type="hidden" name="old_names" value="" />
-<input type="hidden" name="chmod" value="" />
-<input type="hidden" name="dir" value="<tag:dir />" />
+<input type="hidden" id="actionID" name="actionID" value="" />
+<input type="hidden" id="new_folder" name="new_folder" value="" />
+<input type="hidden" id="new_names" name="new_names" value="" />
+<input type="hidden" id="old_names" name="old_names" value="" />
+<input type="hidden" id="chmod" name="chmod" value="" />
+<input type="hidden" id="dir" name="dir" value="<tag:dir />" />
 <input type="hidden" name="targetFolder" value="" />
 
 <div class="header">
@@ -101,16 +92,22 @@
  <tag:navlink />
  <tag:refresh />
  <tag:clipboard />
+<if:create_folder>
+ <tag:create_folder />
+</if:create_folder>
+<if:change_folder>
+ <tag:change_folder />
+</if:change_folder>
 </div>
 
 <if:list_count>
-<table width="100%" cellspacing="0">
+<table id="filelist_actions" cellspacing="0">
  <tr class="control">
   <td class="leftAlign">
-   <select name="action1" onchange="chooseAction(1);document.manager.action1.selectedIndex=0;">
+   <select id="action1" name="action1" onchange="Gollem.chooseAction(1);$('action1').selectedIndex=0;">
     <option selected="selected"><gettext>Actions:</gettext></option>
 <if:perms_chmod>
-    <option value="chmod_modify"><gettext>Chmod</gettext></option>
+    <option value="chmod_modify"><gettext>Change Permissions</gettext></option>
 </if:perms_chmod>
 <if:hasclipboard>
     <option value="copy_items"><gettext>Copy</gettext></option>
@@ -125,6 +122,13 @@
    </select>
    <tag:actions_help />
   </td>
+  <td class="rightAlign">
+   <strong><gettext>Filter:</gettext></strong><input id="filter" name="filter" type="text" size="25" value="<tag:filter_val />" />
+   <input type="button" class="button" onclick="Gollem.applyFilter()" value="<gettext>Filter</gettext>" />
+<if:filter_val>
+   <input type="button" class="button" onclick="Gollem.clearFilter()" value="<gettext>Clear</gettext>" />
+</if:filter_val>
+  </td>
  </tr>
 </table>
 </if:list_count>
@@ -134,57 +138,65 @@
  <em><gettext>There are no files in this folder.</gettext></em>
 </p>
 <else:empty_dir>
-<table id="filelist" class="striped" cellspacing="0">
- <caption style="caption-side:bottom" align="bottom"><tag:size_caption /></caption>
+<table id="filelist" class="striped sortable" cellspacing="0">
+<thead>
  <tr>
-  <th class="item" style="text-align:center" width="3%"><input type="checkbox" class="checkbox" name="checkAll" onclick="toggleSelection()" <tag:checkall /> /></th>
+  <th class="nosort" style="text-align:center" width="1%"><input type="checkbox" class="checkbox" name="checkAll" onclick="Gollem.toggleSelection()" <tag:checkall /> /></th>
 <loop:headers>
-  <th class="<tag:headers.class />" style="text-align:<tag:headers.align />" width="<tag:headers.width />"><tag:headers.sort /><tag:headers.label /></th>
+  <th<if:headers.id> id="<tag:headers.id />"</if:headers.id><if:headers.class> class="<tag:headers.class />"</if:headers.class> style="text-align:<tag:headers.align />" width="<tag:headers.width />"><tag:headers.sort /><tag:headers.label /></th>
 </loop:headers>
  </tr>
+</thead>
+<tbody>
 <loop:entry>
  <tr>
   <td style="text-align:center"><if:entry.on_clipboard>&nbsp;<else:entry.on_clipboard><input type="checkbox" class="checkbox" name="items[]" value="<tag:entry.name />" /></else:entry.on_clipboard></if:entry.on_clipboard></td>
 <if:columns_type>
-  <td style="text-align:right"><input type="hidden" name="itemTypes[]" value="<tag:entry.type />" /><tag:entry.graphic />&nbsp;</td>
+  <td sortval="<tag:entry.type_sort />" class="rightAlign"><input type="hidden" name="itemTypes[]" value="<tag:entry.type />" /><tag:entry.graphic />&nbsp;</td>
 </if:columns_type>
 <if:columns_name>
   <td><tag:entry.link /></td>
 </if:columns_name>
+<if:columns_edit>
+  <td><if:entry.edit><tag:entry.edit /><else:entry.edit>&nbsp;</else:entry.edit></if:entry.edit>&nbsp;</td>
+</if:columns_edit>
 <if:columns_download>
   <td><if:entry.dl><tag:entry.dl /><else:entry.dl>&nbsp;</else:entry.dl></if:entry.dl>&nbsp;</td>
 </if:columns_download>
 <if:columns_modified>
-  <td><tag:entry.date /></td>
+  <td sortval="<tag:entry.date_sort />"><tag:entry.date /></td>
 </if:columns_modified>
 <if:columns_size>
-  <td style="text-align:right"><tag:entry.size /></td>
+  <td class="rightAlign"><tag:entry.size /></td>
 </if:columns_size>
 <if:columns_permission>
-  <td style="text-align:right" class="fixed">&nbsp;<tag:entry.perms />&nbsp;</td>
+  <td class="rightAlign fixed">&nbsp;<tag:entry.perms />&nbsp;</td>
 </if:columns_permission>
 <if:columns_owner>
-  <td style="text-align:right"><tag:entry.owner /></td>
+  <td class="rightAlign"><tag:entry.owner /></td>
 </if:columns_owner>
 <if:columns_group>
-  <td style="text-align:right"><tag:entry.group /></td>
+  <td class="rightAlign"><tag:entry.group /></td>
 </if:columns_group>
  </tr>
 </loop:entry>
+</tbody>
 </table>
 </else:empty_dir></if:empty_dir>
 
+<tag:page_caption />
+
 <if:perms_edit>
 <br />
-<table class="greybox">
+<table id="filelist_upload">
  <tr>
   <td class="leftAlign">
    <div id="upload_row_1">
-    <strong><gettext>File</gettext> 1:</strong>&nbsp;<input name="file_upload_1" type="file" onchange="uploadChanged()" size="25" />
+    <strong><gettext>File</gettext> 1:</strong>&nbsp;<input id="file_upload_1" name="file_upload_1" type="file" onchange="Gollem.uploadChanged()" size="25" />
    </div>
   </td>
   <td class="leftAlign">
-   &nbsp;<input type="button" class="button" onclick="uploadFile()" value="<tag:upload_file />" />&nbsp;<tag:upload_help />
+   &nbsp;<input type="button" class="button" onclick="Gollem.uploadFile()" value="<tag:upload_file />" />&nbsp;<tag:upload_help />
   </td>
  </tr>
 </table>
diff --git a/templates/menu.html b/templates/menu.html
index d1916d0..526810e 100644
--- a/templates/menu.html
+++ b/templates/menu.html
@@ -5,7 +5,7 @@
 <if:be_select>
  <span class="rightFloat">
   <input type="hidden" name="change_backend" value="1" />
-  <label for="backend" accesskey="<tag:accesskey />">
+  <label for="backend_key" accesskey="<tag:accesskey />">
    <select id="backend_key" name="backend_key" onchange="serverSubmit()">
     <tag:be_select />
    </select>
diff --git a/templates/prefs/columnselect.inc b/templates/prefs/columnselect.inc
index af554e8..47cf498 100644
--- a/templates/prefs/columnselect.inc
+++ b/templates/prefs/columnselect.inc
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: gollem/templates/prefs/columnselect.inc,v 1.9.2.2 2006/01/10 07:25:51 slusarz Exp $
+ * $Horde: gollem/templates/prefs/columnselect.inc,v 1.9.2.3 2008/10/09 20:54:58 jan Exp $
  *
  * Prefs_UI:: always calls a .inc file, so we need to use this file to
  * generate the data needed to display the template.
@@ -12,33 +12,34 @@ if (!$prefs->isLocked('columns')) {
     $source_count = 0;
 
     foreach ($GLOBALS['gollem_backends'] as $source => $info) {
-        $js_columns .= "columns[$source_count] = new Array();\n";
-        $js_columns .= "columns[$source_count][0] = '$source';\n";
+        $js_columns .= "columns[$source_count] = [];";
+        $js_columns .= "columns[$source_count][0] = '$source';";
 
         $column_count = 1;
         $selected = isset($sources[$source]) ? array_flip($sources[$source]) : array();
         foreach ($info['attributes'] as $null => $column) {
             $marked = isset($selected[$column]) ? 'true' : 'false';
-            $js_columns .= "columns[$source_count][$column_count] = ['$column', '" . addslashes($column) . "', $marked, " . (($marked === 'true') ? $selected[$column] : 'null') . "];\n";
-            $column_count++;
+            $js_columns .= "columns[$source_count][$column_count] = ['$column', '" . addslashes($column) . "', $marked, " . (($marked === 'true') ? $selected[$column] : 'null') . "];";
+            ++$column_count;
         }
-        $source_count++;
+        ++$source_count;
     }
 
-    require_once GOLLEM_TEMPLATES . '/prefs/columnselect.js';
+    Horde::addScriptFile('columnselect.js', 'gollem', true);
+    Gollem::addInlineScript($js_columns);
 
-    require_once 'Horde/Template.php';
-    $t = new Horde_Template();
+    $t = new Gollem_Template();
     $t->setOption('gettext', true);
 
     $be = array();
-    $imagedir = $registry->getImageDir('horde');
-
     foreach ($GLOBALS['gollem_backends'] as $key => $info) {
         $be[] = array('val' => $key, 'label' => $info['name']);
     }
     $t->set('be', $be);
+
     $t->set('columns', $prefs->getValue('columns'));
+
+    $imagedir = $registry->getImageDir('horde');
     $t->set('add', Horde::img('rhand.png', _("Add column"), null, $imagedir));
     $t->set('remove', Horde::img('lhand.png', _("Remove column"), null, $imagedir));
     $t->set('left', Horde::img('nav/up.png', _("Move left"), null, $imagedir));
diff --git a/templates/quota/quota.html b/templates/quota/quota.html
index 2af4ec1..475c499 100644
--- a/templates/quota/quota.html
+++ b/templates/quota/quota.html
@@ -17,9 +17,6 @@
   <center><tag:quotadisplay /></center>
  </div>
 </if:quotadisplay>
-<if:quotagraph>
- <center><tag:quotagraph /></center>
-</if:quotagraph>
 
 <if:hasjs>
 <center>
diff --git a/templates/selectlist/javascript.inc b/templates/selectlist/javascript.inc
deleted file mode 100644
index 9ff2ca6..0000000
--- a/templates/selectlist/javascript.inc
+++ /dev/null
@@ -1,21 +0,0 @@
-<script type="text/javascript">
-<!--
-function returnID()
-{
-    field = parent.opener.document.<?php echo $formid ?>.selectlist_selectid;
-    field2 = parent.opener.document.<?php echo $formid ?>.actionID;
-
-    if (parent.opener.closed || !field || !field2) {
-        alert('<?php echo addslashes(_("The original opener window has been closed. Exiting.")) ?>');
-        window.close();
-        return;
-    }
-
-    field.value = '<?php echo $cacheid ?>';
-    field2.value = 'selectlist_process';
-
-    parent.opener.document.<?php echo $formid ?>.submit();
-    window.close();
-}
-//-->
-</script>
diff --git a/templates/selectlist/selectlist.html b/templates/selectlist/selectlist.html
index c746d18..b3de973 100644
--- a/templates/selectlist/selectlist.html
+++ b/templates/selectlist/selectlist.html
@@ -17,9 +17,9 @@
 <else:nofiles>
 <loop:entry>
 <div class="<if:entry.selected>selected<else:entry.selected><tag:entry.item /></else:entry.selected></if:entry.selected> nowrap">
- <if:entry.dir><else:entry.dir><input type="checkbox" name="items[]" value="<tag:entry.name />" /></else:entry.dir></if:entry.dir>
+ <label><if:entry.dir><else:entry.dir><input type="checkbox" name="items[]" value="<tag:entry.name />" /></else:entry.dir></if:entry.dir>
  <input type="hidden" name="itemTypes[]" value="<tag:entry.type />" /><tag:entry.graphic />&nbsp;
- <tag:entry.link />
+ <tag:entry.link /></label>
 </div>
 </loop:entry>
 </else:nofiles>
diff --git a/test.php b/test.php
index ea2a114..69673e5 100644
--- a/test.php
+++ b/test.php
@@ -1,11 +1,13 @@
 <?php
 /**
- * $Horde: gollem/test.php,v 1.5.2.4 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/test.php,v 1.5.2.6 2009/01/06 15:23:53 jan Exp $
  *
- * Copyright 2003-2007 Michael Slusarz <slusarz at bigworm.colorado.edu>
+ * Copyright 2003-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Michael Slusarz <slusarz at horde.org>
  */
 
 /* Include Horde's core.php file. */
@@ -15,17 +17,17 @@ include_once '../lib/core.php';
    package, in core.php. If String:: isn't defined, then we're not
    finding some critical libraries. */
 if (!class_exists('String')) {
-    echo '<br /><span style="color: red; font-size: 18px; font-weight: bold;">The Horde_Util package was not found. If PHP\'s error_reporting setting is high enough, there should be error messages printed above that may help you in debugging the problem. If you are simply missing these files, then you need to get the <a href="http://cvs.horde.org/cvs.php/framework">framework</a> module from <a href="http://horde.org/source/">Horde CVS</a>, and install the packages in it with the install-packages.php script.</span>';
+    echo '<br /><h2 style="color:red">The Horde_Util package was not found. If PHP\'s error_reporting setting is high enough and display_errors is on, there should be error messages printed above that may help you in debugging the problem. If you are simply missing these files, then you need to get the <a href="http://cvs.horde.org/cvs.php/framework">framework</a> module from <a href="http://www.horde.org/source/">Horde CVS</a>, and install the packages in it with the install-packages.php script.</h2>';
     exit;
 }
 
 /* Initialize the Horde_Test:: class. */
-if (!(@is_readable('../lib/Test.php'))) {
+if (!is_readable('../lib/Test.php')) {
     echo 'ERROR: You must install Horde before running this script.';
     exit;
 }
 require_once '../lib/Test.php';
-$horde_test = &new Horde_Test;
+$horde_test = new Horde_Test;
 
 /* Gollem version. */
 $module = 'Gollem';
@@ -50,6 +52,10 @@ $module_list = array(
         'descrip' => 'FTP Support',
         'error' => 'You need FTP support compiled into PHP if you plan to use the FTP VFS driver (see config/backends.php).'
     ),
+    'ssh2' => array(
+        'descrip' => 'SSH2 Support',
+        'error' => 'You need the SSH2 PECL module if you plan to use the SSH2 VFS driver (see config/backends.php).'
+    ),
 );
 
 /* Display versions of other Horde applications. */
@@ -57,14 +63,13 @@ $app_list = array(
     'horde' => array(
         'error' => 'Gollem requires Horde 3.0 or greater to operate.',
         'version' => '3.0'
-    )
+    ),
 );
-$app_output = $horde_test->requiredAppCheck($app_list);
 
 ?>
 <h1>Other Horde Applications</h1>
 <ul>
-    <?php echo $app_output ?>
+    <?php echo $horde_test->requiredAppCheck($app_list) ?>
 </ul>
 <?php
 
@@ -73,7 +78,11 @@ $php_info = $horde_test->getPhpVersionInformation();
 require TEST_TEMPLATES . 'php_version.inc';
 
 /* PEAR */
-$pear_list = array();
+$pear_list = array(
+    'HTTP_WebDAV_Server' => array(
+        'path' => 'HTTP/WebDAV/Server.php',
+        'error' => 'You do not have the HTTP_WebDAV_Server package installed on your system. This module is required to use browse the VFS using WebDAV.  See the INSTALL file for instructions on how to install the package.'    ),
+);
 
 /* Get the status output now. */
 $module_output = $horde_test->phpModuleCheck($module_list);
@@ -92,9 +101,16 @@ if (is_callable(array('VFS', 'getQuota'))) {
 /* Check for VFS drivers not present in Horde 3.0. */
 $smb_check = @include_once 'VFS/smb.php';
 if ($smb_check === false) {
-    $smb_output = '<font color="red"><strong>VFS library does NOT contain the <u>SMB</u> driver.</strong></font>';
+    $smb_output = '<font color="red"><strong>VFS library does NOT contain the SMB driver.</strong></font>';
+} else {
+    $smb_output = '<font color="green"><strong>VFS library contains the SMB driver.</strong></font>';
+}
+
+$ssh2_check = @include_once 'VFS/ssh2.php';
+if ($ssh2_check === false) {
+    $ssh2_output = '<font color="red"><strong>VFS library does NOT contain the SSH2 driver.</strong></font>';
 } else {
-    $smb_output = '<font color="green"><strong>VFS library contains the <u>SMB</u> driver.</strong></font>';
+    $ssh2_output = '<font color="green"><strong>VFS library contains the SSH2 driver.</strong></font>';
 }
 
 ?>
@@ -112,6 +128,7 @@ if ($smb_check === false) {
 <ul>
     <li><?php echo $quota_output ?></li>
     <li><?php echo $smb_output ?></li>
+    <li><?php echo $ssh2_output ?></li>
 </ul>
 
 <h1>PEAR Modules</h1>
diff --git a/themes/brown/screen.css b/themes/brown/screen.css
index f1306b6..329ac00 100644
--- a/themes/brown/screen.css
+++ b/themes/brown/screen.css
@@ -1,11 +1,12 @@
 /**
- * $Horde: gollem/themes/brown/screen.css,v 1.1.2.1 2006/02/22 22:15:27 slusarz Exp $
+ * $Horde: gollem/themes/brown/screen.css,v 1.1.2.2 2008/10/09 20:55:01 jan Exp $
  */
 
 #filelist caption {
     color: #fff;
 }
 
+/* BC */
 input.button {
     color: #fff;
 }
diff --git a/themes/graphics/az.png b/themes/graphics/az.png
new file mode 100644
index 0000000..2b646f9
Binary files /dev/null and b/themes/graphics/az.png differ
diff --git a/themes/graphics/cd.png b/themes/graphics/cd.png
deleted file mode 100644
index 555177a..0000000
Binary files a/themes/graphics/cd.png and /dev/null differ
diff --git a/themes/graphics/clipboard.png b/themes/graphics/clipboard.png
index e7706ce..73f6687 100644
Binary files a/themes/graphics/clipboard.png and b/themes/graphics/clipboard.png differ
diff --git a/themes/graphics/copy.png b/themes/graphics/copy.png
index 56d334a..be34fc6 100644
Binary files a/themes/graphics/copy.png and b/themes/graphics/copy.png differ
diff --git a/themes/graphics/cut.png b/themes/graphics/cut.png
index da15018..dd95bde 100644
Binary files a/themes/graphics/cut.png and b/themes/graphics/cut.png differ
diff --git a/themes/graphics/favicon.ico b/themes/graphics/favicon.ico
index 30136d0..6c8a335 100644
Binary files a/themes/graphics/favicon.ico and b/themes/graphics/favicon.ico differ
diff --git a/themes/graphics/folder.png b/themes/graphics/folder.png
new file mode 100644
index 0000000..883ff61
Binary files /dev/null and b/themes/graphics/folder.png differ
diff --git a/themes/graphics/folder_create.png b/themes/graphics/folder_create.png
new file mode 100644
index 0000000..17fb26f
Binary files /dev/null and b/themes/graphics/folder_create.png differ
diff --git a/themes/graphics/folder_goto.png b/themes/graphics/folder_goto.png
new file mode 100644
index 0000000..e2caf34
Binary files /dev/null and b/themes/graphics/folder_goto.png differ
diff --git a/themes/graphics/folder_home.png b/themes/graphics/folder_home.png
new file mode 100644
index 0000000..6c8a335
Binary files /dev/null and b/themes/graphics/folder_home.png differ
diff --git a/themes/graphics/folder_symlink.png b/themes/graphics/folder_symlink.png
new file mode 100644
index 0000000..55bf63a
Binary files /dev/null and b/themes/graphics/folder_symlink.png differ
diff --git a/themes/graphics/gollem.png b/themes/graphics/gollem.png
index 7fbb3e4..6c8a335 100644
Binary files a/themes/graphics/gollem.png and b/themes/graphics/gollem.png differ
diff --git a/themes/graphics/home.png b/themes/graphics/home.png
deleted file mode 100644
index 1cb60a8..0000000
Binary files a/themes/graphics/home.png and /dev/null differ
diff --git a/themes/graphics/manager/folder.png b/themes/graphics/manager/folder.png
deleted file mode 100644
index c7c3ccc..0000000
Binary files a/themes/graphics/manager/folder.png and /dev/null differ
diff --git a/themes/graphics/manager/symlink.png b/themes/graphics/manager/symlink.png
deleted file mode 100644
index ce48a2c..0000000
Binary files a/themes/graphics/manager/symlink.png and /dev/null differ
diff --git a/themes/graphics/mkdir.png b/themes/graphics/mkdir.png
deleted file mode 100644
index c2b279b..0000000
Binary files a/themes/graphics/mkdir.png and /dev/null differ
diff --git a/themes/graphics/za.png b/themes/graphics/za.png
new file mode 100644
index 0000000..a154237
Binary files /dev/null and b/themes/graphics/za.png differ
diff --git a/themes/purple/screen.css b/themes/purple/screen.css
index 1475863..1375206 100644
--- a/themes/purple/screen.css
+++ b/themes/purple/screen.css
@@ -1,5 +1,5 @@
 /**
- * $Horde: gollem/themes/purple/screen.css,v 1.1 2005/05/01 03:08:47 chuck Exp $
+ * $Horde: gollem/themes/purple/screen.css,v 1.1.2.1 2008/10/09 20:55:03 jan Exp $
  */
 
 #filelist caption {
diff --git a/themes/screen.css b/themes/screen.css
index 2e2af02..e388a4c 100644
--- a/themes/screen.css
+++ b/themes/screen.css
@@ -1,39 +1,83 @@
 /**
- * $Horde: gollem/themes/screen.css,v 1.4.2.1 2006/01/10 07:24:43 slusarz Exp $
+ * $Horde: gollem/themes/screen.css,v 1.4.2.2 2008/10/09 20:55:00 jan Exp $
  */
 
-#filelist {
-    width: 100%;
+/* Align styles, added for BC. */
+.leftAlign {
+   text-align: left;
+}
+.rightAlign {
+   text-align: right;
 }
 
+/* File list table. */
+#filelist {
+    width: 99%;
+    margin: 0 0 8px 5px;
+    border-top: 1px solid #ddd;
+    border-left: 1px solid #ddd;
+}
 #filelist caption {
+    margin: 0 0 0 5px;
     font-weight: bold;
     text-align: left;
+    padding: 3px;
     caption-side: bottom;
 }
-
-#filelist td, #filelist th {
+#filelist th, #filelist td {
+    padding: 3px;
     white-space: nowrap;
 }
+#filelist th {
+    background: #e9e9e9;
+    border-right: 1px solid #ccc;
+    text-align: left;
+}
+#filelist td {
+    border-right: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+}
+#filelist th.sortup {
+    background: #bbcbff url("graphics/za.png") center left no-repeat;
+    padding-left: 10px;
+}
+#filelist th.sortdown {
+    background: #bbcbff url("graphics/az.png") center left no-repeat;
+    padding-left: 10px;
+}
+
+#filelist_upload, #filelist_actions {
+    margin: 0 0 8px 5px;
+    border: 1px solid #ddd;
+}
+#filelist_actions {
+    width: 99%;
+}
 
-.managerhidden {
+.managerpopup {
     background-color: #000;
     position: absolute;
     left: 200px;
     top: 20px;
-    width: 200px;
-    visibility: hidden;
     padding: 1px;
 }
 
-.centerAlign {
-    text-align: center;
+table.clipboard {
+    padding: .2em;
+}
+table.clipboard td {
+    padding: 2px;
 }
 
-/* Align styles, added for BC. */
-.leftAlign {
-   text-align: left;
+#filter {
+    margin-left: 4px;
+    margin-right: 2px;
 }
-.rightAlign {
-   text-align: right;
+
+.header a:hover {
+    text-decoration: underline;
+}
+
+#refreshimg {
+    margin-left: 7px;
 }
diff --git a/themes/silver/graphics/clipboard.png b/themes/silver/graphics/clipboard.png
new file mode 100644
index 0000000..968f073
Binary files /dev/null and b/themes/silver/graphics/clipboard.png differ
diff --git a/themes/silver/graphics/copy.png b/themes/silver/graphics/copy.png
new file mode 100644
index 0000000..195dc6d
Binary files /dev/null and b/themes/silver/graphics/copy.png differ
diff --git a/themes/silver/graphics/cut.png b/themes/silver/graphics/cut.png
new file mode 100644
index 0000000..f215d6f
Binary files /dev/null and b/themes/silver/graphics/cut.png differ
diff --git a/themes/silver/graphics/favicon.ico b/themes/silver/graphics/favicon.ico
new file mode 100644
index 0000000..461907c
Binary files /dev/null and b/themes/silver/graphics/favicon.ico differ
diff --git a/themes/silver/graphics/folder.png b/themes/silver/graphics/folder.png
new file mode 100644
index 0000000..784e8fa
Binary files /dev/null and b/themes/silver/graphics/folder.png differ
diff --git a/themes/silver/graphics/folder_create.png b/themes/silver/graphics/folder_create.png
new file mode 100644
index 0000000..529fe8f
Binary files /dev/null and b/themes/silver/graphics/folder_create.png differ
diff --git a/themes/silver/graphics/folder_goto.png b/themes/silver/graphics/folder_goto.png
new file mode 100644
index 0000000..34a736f
Binary files /dev/null and b/themes/silver/graphics/folder_goto.png differ
diff --git a/themes/silver/graphics/folder_home.png b/themes/silver/graphics/folder_home.png
new file mode 100644
index 0000000..fed6221
Binary files /dev/null and b/themes/silver/graphics/folder_home.png differ
diff --git a/themes/silver/graphics/folder_symlink.png b/themes/silver/graphics/folder_symlink.png
new file mode 100644
index 0000000..b9b75f6
Binary files /dev/null and b/themes/silver/graphics/folder_symlink.png differ
diff --git a/themes/silver/graphics/gollem.png b/themes/silver/graphics/gollem.png
new file mode 100644
index 0000000..8443c23
Binary files /dev/null and b/themes/silver/graphics/gollem.png differ
diff --git a/config/motd.php.dist b/themes/silver/themed_graphics
similarity index 100%
copy from config/motd.php.dist
copy to themes/silver/themed_graphics
diff --git a/view.php b/view.php
index 4fc0264..ba94db7 100644
--- a/view.php
+++ b/view.php
@@ -1,16 +1,17 @@
 <?php
 /**
- * $Horde: gollem/view.php,v 1.51.2.3 2007/01/02 13:54:52 jan Exp $
+ * $Horde: gollem/view.php,v 1.51.2.5 2009/01/06 15:23:53 jan Exp $
  *
- * Copyright 1999-2007 Charles J. Hagenbuch <chuck at horde.org>
- * Copyright 1999-2007 Max Kalika <max at horde.org>
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
  *
- * See the enclosed file COPYING for license information (GPL).  If you
+ * See the enclosed file COPYING for license information (GPL). If you
  * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Max Kalika <max at horde.org>
+ * @author Chuck Hagenbuch <chuck at horde.org>
  */
 
 $session_control = 'readonly';
-$no_compress = true;
 @define('GOLLEM_BASE', dirname(__FILE__));
 require_once GOLLEM_BASE . '/lib/base.php';
 
@@ -26,24 +27,60 @@ if ($driver != $GLOBALS['gollem_be']['driver']) {
     exit;
 }
 
-$data = $GLOBALS['gollem_vfs']->read($filedir, $filename);
-if (is_a($data, 'PEAR_Error')) {
-    $notification->push(sprintf(_("Access denied to %s"), $filename), 'horde.error');
-    header('Location: ' . Util::addParameter(Horde::applicationUrl('manager.php', true), 'actionID', $actionID));
-    exit;
+$stream = null;
+$data = '';
+if (is_callable(array($GLOBALS['gollem_vfs'], 'readStream'))) {
+    $stream = $GLOBALS['gollem_vfs']->readStream($filedir, $filename);
+    if (is_a($stream, 'PEAR_Error')) {
+        $notification->push(sprintf(_("Access denied to %s"), $filename), 'horde.error');
+        header('Location: ' . Util::addParameter(Horde::applicationUrl('manager.php', true), 'actionID', $actionID));
+        exit;
+    }
+} else {
+    $data = $GLOBALS['gollem_vfs']->read($filedir, $filename);
+    if (is_a($data, 'PEAR_Error')) {
+        $notification->push(sprintf(_("Access denied to %s"), $filename), 'horde.error');
+        header('Location: ' . Util::addParameter(Horde::applicationUrl('manager.php', true), 'actionID', $actionID));
+        exit;
+    }
 }
 
 /* Run through action handlers. */
 switch ($actionID) {
 case 'download_file':
-    $browser->downloadHeaders($filename, null, false, strlen($data));
-    echo $data;
+    $browser->downloadHeaders($filename, null, false, $GLOBALS['gollem_vfs']->size($filedir, $filename));
+    if (is_resource($stream)) {
+        while ($buffer = fread($stream, 8192)) {
+            echo $buffer;
+            ob_flush();
+            flush();
+        }
+    } else {
+        echo $data;
+    }
     break;
 
 case 'view_file':
     require_once 'Horde/MIME/Contents.php';
     require_once 'Horde/MIME/Magic.php';
-    require GOLLEM_BASE . '/config/mime_drivers.php';
+    if (is_callable(array('Horde', 'loadConfiguration'))) {
+        $result = Horde::loadConfiguration('mime_drivers.php', array('mime_drivers', 'mime_drivers_map'), 'horde');
+        extract($result);
+        $result = Horde::loadConfiguration('mime_drivers.php', array('mime_drivers', 'mime_drivers_map'), 'gollem');
+        require_once 'Horde/Array.php';
+        $mime_drivers = Horde_Array::array_merge_recursive_overwrite($mime_drivers, $result['mime_drivers']);
+        $mime_drivers_map = Horde_Array::array_merge_recursive_overwrite($mime_drivers_map, $result['mime_drivers_map']);
+    } else {
+        require HORDE_BASE . '/config/mime_drivers.php';
+        require GOLLEM_BASE . '/config/mime_drivers.php';
+    }
+
+    if (is_resource($stream)) {
+        $data = '';
+        while ($buffer = fread($stream, 102400)) {
+            $data .= $buffer;
+        }
+    }
     $mime = &new MIME_Part(MIME_Magic::extToMIME($type), $data);
     $mime->setName($filename);
     $contents = &new MIME_Contents($mime);

-- 
Debian Horde Packages repository: gollem package



More information about the pkg-horde-hackers mailing list