[pkg-horde] [SCM] Debian Horde Packages repository: turba2 package branch, debian-sid, updated. cf7c7f7d40b5a0dfe7b9c7ae50cb1cf0484683e0

Gregory Colpart reg at foulademer.gcolpart.com
Sun Apr 26 18:22:13 UTC 2009


The following commit has been merged in the debian-sid branch:
commit 07c353451974be25e9127d5e7211c2eef902db3f
Author: Gregory Colpart <reg at foulademer.gcolpart.com>
Date:   Sun Apr 26 19:32:17 2009 +0200

    Merge from upstream

diff --git a/bug5476.phpt b/bug5476.phpt
deleted file mode 100644
index 9a6177a..0000000
--- a/bug5476.phpt
+++ /dev/null
@@ -1,264 +0,0 @@
---TEST--
-[Bug #5476] Possibly invalid VBook search criteria
---FILE--
-<?php
-// Pretend that we are turba
-class Registry {
-    function getApp()
-    {
-        return 'turba';
-    }
-    function get()
-    {
-        return 'turba';
-    }
-}
-$registry = new Registry;
-
-// Set a dummy server name
-$_SERVER['SERVER_NAME'] = 'localhost';
-
-// Indicate that we want the dummy IMAP driver
-$GLOBALS['KOLAB_TESTING'] = array(
-    "INBOX/Contacts" => array(
-        "status" => array(
-            "uidvalidity" => 1205144313,
-            "uidnext" => 1
-        ),
-        "mails" => array(),
-        "permissions" => array(
-            "wrobel at dev.pardus.de" => "alriswcd"
-        ),
-        "annotations" => array(
-            "/vendor/kolab/folder-type" => array(
-                "value.shared" => "contact.default"
-            ),
-        ),
-    ),
-    "INBOX/test2" => array(
-        "status" => array(
-            "uidvalidity" => 1205144313,
-            "uidnext" => 1
-        ),
-        "mails" => array(),
-        "permissions" => array(
-            "wrobel at dev.pardus.de" => "alriswcd"
-        ),
-        "annotations" => array(
-            "/vendor/kolab/folder-type" => array(
-                "value.shared" => "contact"
-            ),
-            "/vendor/horde/share-params" => array(
-                "value.shared" => "YTozOntzOjQ6InR5cGUiO3M6NToidmJvb2siO3M6Njoic291cmNlIjtzOjIwOiJ3cm9iZWxAZGV2LnBhcmR1cy5kZSI7czo4OiJjcml0ZXJpYSI7YToxOntzOjk6ImZpcnN0bmFtZSI7czo1OiJ0ZXN0MiI7fX0="
-            ),
-        ),
-    ),
-);
-
-// We need the basic PEAR library
-require_once 'PEAR.php';
-require_once 'Horde/Auth.php';
-require_once 'Horde/Perms.php';
-require_once 'Horde/Share.php';
-require_once 'Horde/Kolab.php';
-
-session_start();
-$_SESSION['__auth']['userId'] = 'wrobel at dev.pardus.de';
-$_SESSION['__auth']['authenticated'] = true;
-
-// Find the base file path of Turba.
-if (!defined('TURBA_BASE')) {
-    define('TURBA_BASE', dirname(__FILE__) . '/../..');
-}
-
-// Turba base libraries.
-require_once TURBA_BASE . '/lib/Turba.php';
-require_once TURBA_BASE . '/lib/Driver.php';
-require_once TURBA_BASE . '/lib/Object.php';
-
-$cfgSources = array();
-
-    $cfgSources['kolab'] = array(
-        'title' => _("Contacts"),
-        'type' => 'kolab',
-        'params' => array(
-            'charset' => 'utf-8',
-        ),
-        'map' => array(
-            '__key' => 'uid',
-            '__uid' => 'uid',
-            /* Personal */
-            'name' => array('fields' => array('firstname', 'middlenames', 'lastname'),
-                            'format' => '%s %s %s',
-                            'attribute' => 'full-name'),
-            'firstname'         => 'given-name',
-            'lastname'          => 'last-name',
-            'middlenames'       => 'middle-names',
-            'namePrefix'        => 'prefix',
-            'nameSuffix'        => 'suffix',
-            'initials'          => 'initials',
-            'nickname'          => 'nick-name',
-            'gender'            => 'gender',
-            'birthday'          => 'birthday',
-            'spouse'            => 'spouse-name',
-            'anniversary'       => 'anniversary',
-            'children'          => 'children',
-            /* Location */
-            'workStreet'        => 'addr-business-street',
-            'workCity'          => 'addr-business-locality',
-            'workProvince'      => 'addr-business-region',
-            'workPostalCode'    => 'addr-business-postal-code',
-            'workCountry'       => 'addr-business-country',
-            'homeStreet'        => 'addr-home-street',
-            'homeCity'          => 'addr-home-locality',
-            'homeProvince'      => 'addr-home-region',
-            'homePostalCode'    => 'addr-home-postal-code',
-            'homeCountry'       => 'addr-home-country',
-            /* Communications */
-            'emails'            => 'emails',
-            'homePhone'         => 'phone-home1',
-            'workPhone'         => 'phone-business1',
-            'cellPhone'         => 'phone-mobile',
-            'fax'               => 'phone-businessfax',
-            'instantMessenger'  => 'im-address',
-            /* Organization */
-            'title'             => 'job-title',
-            'role'              => 'profession',
-            'company'           => 'organization',
-            'department'        => 'department',
-            'office'            => 'office-location',
-            'manager'           => 'manager-name',
-            'assistant'         => 'assistant',
-            /* Other */
-            'category'          => 'categories',
-            'notes'             => 'body',
-            'website'           => 'web-page',
-            'freebusyUrl'       => 'free-busy-url',
-            'language'          => 'language',
-            'latitude'          => 'latitude',
-            'longitude'         => 'longitude',
-        ),
-        'tabs' => array(
-            _("Personal") => array('name', 'firstname', 'lastname', 'middlenames',
-                                   'namePrefix', 'nameSuffix', 'initials', 'nickname',
-                                   'gender', 'birthday', 'spouse', 'anniversary',
-                                   'children'),
-            _("Location") => array('homeStreet', 'homeCity', 'homeProvince',
-                                   'homePostalCode', 'homeCountry', 'workStreet',
-                                   'workCity', 'workProvince', 'workPostalCode',
-                                   'workCountry'),
-            _("Communications") => array('emails', 'homePhone', 'workPhone',
-                                         'cellPhone', 'fax', 'instantMessenger'),
-            _("Organization") => array('title', 'role', 'company', 'department',
-                                       'office', 'manager', 'assistant'),
-            _("Other") => array('category', 'notes', 'website', 'freebusyUrl',
-                                'language', 'latitude', 'longitude'),
-        ),
-        'search' => array(
-            /* Personal */
-            'firstname',
-            'lastname',
-            'middlenames',
-            'namePrefix',
-            'nameSuffix',
-            'initials',
-            'nickname',
-            'gender',
-            'birthday',
-            'spouse',
-            'anniversary',
-            'children',
-            /* Location */
-            'workStreet',
-            'workCity',
-            'workProvince',
-            'workPostalCode',
-            'workCountry',
-            'homeStreet',
-            'homeCity',
-            'homeProvince',
-            'homePostalCode',
-            'homeCountry',
-            /* Communications */
-            'emails',
-            'homePhone',
-            'workPhone',
-            'cellPhone',
-            'fax',
-            'instantMessenger',
-            /* Organization */
-            'title',
-            'role',
-            'company',
-            'department',
-            'office',
-            'manager',
-            'assistant',
-            /* Other */
-            'category',
-            'notes',
-            'website',
-            'language',
-        ),
-        'strict' => array(
-            'uid',
-        ),
-        'export' => true,
-        'browse' => true,
-        'use_shares' => true,
-        'shares_only' => true,
-    );
-
-
-/* Pretend that we are kronolith */
-$kolab = &new Kolab('turba');
-
-/* Open our calendar */
-$kolab->open('INBOX/Contacts', 1);
-
-$object = array(
-    'uid' => 1,
-    'given-name' => 'test',
-    'last-name' => 'test',
-    'full-name' => 'test  test',
-);
-
-// Save the contact
-$kolab->_storage->save($object);
-
-$object = array(
-    'uid' => 2,
-    'given-name' => 'test2',
-    'last-name' => 'test2',
-    'full-name' => 'test2  test2',
-);
-
-// Save the contact
-$kolab->_storage->save($object);
-
-$GLOBALS['conf']['log']['enabled'] = false;
-$GLOBALS['conf']['prefs']['driver'] = 'session';
-$GLOBALS['conf']['share']['driver'] = 'kolab';
-$GLOBALS['conf']['kolab']['enabled'] = true;
-$GLOBALS['conf']['kolab']['imap']['server'] = 'localhost';
-$GLOBALS['conf']['kolab']['imap']['port'] = 0;
-$GLOBALS['perms'] = &Perms::singleton();
-$_SESSION['turba']['has_share'] =  true;
-$GLOBALS['turba_shares'] = &Horde_Share::singleton($registry->getApp());
-
-$GLOBALS['cfgSources'] = Turba::getConfigFromShares($cfgSources);
-
-// Check that the driver can be created
-$turba = Turba_Driver::singleton('wrobel at dev.pardus.de');
-$result = $turba->search(array(), array('last-name'));
-
-var_dump($result->count());
-
-$turba = Turba_Driver::singleton('INBOX%2Ftest2');
-$result = $turba->search(array(), array('last-name'));
-
-var_dump($result->count());
-
---EXPECT--
-int(2)
-int(0)
diff --git a/config/attributes.php.dist b/config/attributes.php.dist
index 9532ed1..e2f58a8 100644
--- a/config/attributes.php.dist
+++ b/config/attributes.php.dist
@@ -39,7 +39,7 @@
  *                           http://wiki.horde.org/Doc/Dev/FormTypes.
  * </pre>
  *
- * $Horde: turba/config/attributes.php.dist,v 1.36.6.10 2008/05/09 22:34:47 jan Exp $
+ * $Horde: turba/config/attributes.php.dist,v 1.36.6.18 2008/11/12 06:29:26 wrobel Exp $
  */
 
 /* Personal stuff. */
@@ -95,13 +95,13 @@ $attributes['birthday'] = array(
     'label' => _("Birthday"),
     'type' => 'monthdayyear',
     'required' => false,
-    'params' => array('start_year' => 1900, 'end_year' => null, 'picker' => true, 'format_in' => '%Y-%m-%d', 'format_out' => '%x'),
+    'params' => array('start_year' => 1900, 'end_year' => null, 'picker' => true, 'format_in' => '%Y-%m-%d', 'format_out' => $GLOBALS['prefs']->getValue('date_format')),
     'time_object_label' => _("Birthdays"),
 );
 $attributes['anniversary'] = array(
     'label' => _("Anniversary"),
     'type' => 'monthdayyear',
-    'params' => array('start_year' => 1900, 'end_year' => null, 'picker' => true, 'format_in' => '%Y-%m-%d', 'format_out' => '%x'),
+    'params' => array('start_year' => 1900, 'end_year' => null, 'picker' => true, 'format_in' => '%Y-%m-%d', 'format_out' => $GLOBALS['prefs']->getValue('date_format')),
     'required' => false,
     'time_object_label' => _("Anniversaries"),
 );
@@ -117,6 +117,18 @@ $attributes['children'] = array(
     'required' => false,
     'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
 );
+$attributes['photo'] = array(
+    'label' => _("Photo"),
+    'type' => 'image',
+    'required' => false,
+    'params' => array('show_upload' => true, 'show_keeporig' => true, 'max_filesize'  => null),
+);
+$attributes['phototype'] = array(
+    'label' => _("Photo MIME Type"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
 
 /* Locations, addresses. */
 $attributes['homeAddress'] = array(
@@ -308,6 +320,18 @@ $attributes['office'] = array(
     'required' => false,
     'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
 );
+$attributes['logo'] = array(
+    'label' => _("Logo"),
+    'type' => 'image',
+    'required' => false,
+    'params' => array('show_upload' => true, 'show_keeporig' => true, 'max_filesize'  => null),
+);
+$attributes['logotype'] = array(
+    'label' => _("Logo MIME Type"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
 
 /* Other */
 $attributes['notes'] = array(
@@ -340,6 +364,20 @@ $attributes['smimePublicKey'] = array(
     'required' => false,
     'params' => array('rows' => 3, 'cols' => 40)
 );
+/* If using Horde 3.3 or later, you can enable the following attributes to
+ * enable pretty rendering of PGP and S/MIME keys. */
+// $attributes['pgpPublicKey'] = array(
+//     'label' => _("PGP Public Key"),
+//     'type' => 'pgp',
+//     'required' => false,
+//     'params' => array('gpg' => '/usr/bin/gpg', 'temp_dir' => Horde::getTempDir(), 'rows' => 3, 'cols' => 40)
+// );
+// $attributes['smimePublicKey'] = array(
+//     'label' => _("S/MIME Public Certificate"),
+//     'type' => 'smime',
+//     'required' => false,
+//     'params' => array('temp_dir' => Horde::getTempDir(), 'rows' => 3, 'cols' => 40)
+// );
 /* This attribute uses Horde's categories and is an example how to use an enum
  * field.  Don't forget to add a 'map' entry to config/sources.php if you want
  * to use this attribute. */
@@ -354,8 +392,22 @@ $attributes['category'] = array(
         'prompt' => false),
     'required' => false
 );
+/* If using Horde 3.2 or later, you can use the following category attribute
+ * instead which shows category colors and allows to add new categories. */
+// $attributes['category'] = array(
+//     'label' => _("Category"),
+//     'type' => 'category',
+//     'params' => array(),
+//     'required' => false
+// );
 
 /* Additional attributes supported by Kolab */
+$attributes['kolabHomeServer'] = array(
+    'label' => _("Kolab Home Server"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
 $attributes['initials'] = array(
     'label' => _("Initials"),
     'type' => 'text',
diff --git a/config/conf.xml b/config/conf.xml
index 8eaaf4a..b7a80b8 100644
--- a/config/conf.xml
+++ b/config/conf.xml
@@ -1,10 +1,12 @@
 <?xml version="1.0"?>
-<!-- $Horde: turba/config/conf.xml,v 1.6.2.5 2008/05/06 21:26:59 bklang Exp $ -->
+<!-- $Horde: turba/config/conf.xml,v 1.6.2.6 2008/06/25 15:52:54 jan Exp $ -->
 <configuration>
  <configsection name="menu">
   <configheader>Menu Settings</configheader>
-  <configboolean name="import_export" desc="Should we display an Import/Export link in Turba's menu?">true</configboolean>
-  <configmultienum name="apps" desc="Select any applications that should be linked in Turba's menu">
+  <configboolean name="import_export" desc="Should we display an Import/Export
+  link in Turba's menu?">true</configboolean>
+  <configmultienum name="apps" desc="Select any applications that should be
+  linked in Turba's menu">
    <values>
     <configspecial name="list-horde-apps"/>
    </values>
@@ -13,20 +15,23 @@
 
  <configsection name="client">
    <configheader>Clients</configheader>
-   <configstring name="addressbook" desc="Name of client addressbook. Must not be configured for shares.">localsql</configstring>
+   <configstring name="addressbook" desc="Name of client addressbook. If this
+   is a shared address book, use the share id, not the source
+   name.">localsql</configstring>
  </configsection>
 
  <configsection name="shares">
-   <configheader>Shares</configheader>
-   <configstring name="source" desc="Name of source for creating new shares.&lt;br /&gt;
-    Note that leaving this blank will prevent users from being able to create
-    new address books."
-   required="false">localsql</configstring>
+  <configheader>Shares</configheader>
+  <configstring name="source" desc="Name of source for creating new
+  shares.&lt;br /&gt; Note that leaving this blank will prevent users from
+  being able to create new address books."
+  required="false">localsql</configstring>
  </configsection>
 
  <configsection name="comments">
   <configheader>Comments</configheader>
-  <configboolean name="allow" desc="Can users comment on contacts?">true</configboolean>
+  <configboolean name="allow" desc="Can users comment on
+  contacts?">true</configboolean>
  </configsection>
 
  <configsection name="documents">
diff --git a/config/prefs.php.dist b/config/prefs.php.dist
index 282d4f1..2f7c7c3 100644
--- a/config/prefs.php.dist
+++ b/config/prefs.php.dist
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/config/prefs.php.dist,v 1.28.10.9 2008/06/13 14:44:04 jan Exp $
+ * $Horde: turba/config/prefs.php.dist,v 1.28.10.10 2008/07/10 22:52:41 jan Exp $
  *
  * See horde/config/prefs.php for documentation on the structure of this file.
  */
@@ -153,3 +153,12 @@ $_prefs['turba_maintenance_tasks'] = array(
     'shared' => false,
     'type' => 'implicit'
 );
+
+// Personal contact.
+$_prefs['own_contact'] = array(
+    // The format is 'source_name;contact_id'.
+    'value' => '',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'implicit'
+);
diff --git a/config/sources.php.dist b/config/sources.php.dist
index 88ac1c5..bc0bf1d 100644
--- a/config/sources.php.dist
+++ b/config/sources.php.dist
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/config/sources.php.dist,v 1.97.6.29 2008/04/24 12:14:29 wrobel Exp $
+ * $Horde: turba/config/sources.php.dist,v 1.97.6.38 2008/11/12 06:29:26 wrobel Exp $
  *
  * This file is where you specify the sources of contacts available to users
  * at your installation. It contains a large number of EXAMPLES. Please
@@ -142,10 +142,15 @@
  *              will still be enforced. Also note that the backend driver
  *              must have support for using this. Currently SQL and IMSP.
  *
- * list_name_field: If this is present and non-empty, it will be taken as the
- *                  name of the turba field to store contact list names in.
- *                  This is required when using a composite field as the 'name'
- *                  field.
+ * list_name_field:  If this is present and non-empty, it will be taken as the
+ *                   field to store contact list names in.
+ *                   This is required when using a composite field as the 'name'
+ *                   field.
+ *
+ * alternative_name: If this is present and non-empty, it will be taken as the
+ *                   field to use an alternative in case that the name field is
+ *                   empty.
+ *
  * Here are some example configurations:
  */
 
@@ -195,6 +200,10 @@ $cfgSources['localsql'] = array(
         //                 'format' => '%s %s'),
         'alias' => 'object_alias',
         'birthday' => 'object_bday',
+        // The photo field requires at least Horde 3.3 and a matching type
+        // field.
+        // 'photo' => 'object_photo',
+        // 'phototype' => 'object_phototype',
         'homeStreet' => 'object_homestreet',
         'homePOBox' => 'object_homepob',
         'homeCity' => 'object_homecity',
@@ -204,10 +213,10 @@ $cfgSources['localsql'] = array(
         // This is an example composite field for addresses, so you can display
         // the various map links. If you use this, be sure to add 'homeAddress'
         // to the 'tabs' parameter below.
-        //'homeAddress' => array('fields' => array('homeStreet', 'homeCity',
-        //                                         'homeProvince',
-        //                                         'homePostalCode'),
-        //                       'format' => "%s \n %s, %s  %s"),
+        // 'homeAddress' => array('fields' => array('homeStreet', 'homeCity',
+        //                                          'homeProvince',
+        //                                          'homePostalCode'),
+        //                        'format' => "%s \n %s, %s  %s"),
         'workStreet' => 'object_workstreet',
         'workPOBox' => 'object_workpob',
         'workCity' => 'object_workcity',
@@ -224,6 +233,10 @@ $cfgSources['localsql'] = array(
         'title' => 'object_title',
         'role' => 'object_role',
         'company' => 'object_company',
+        // The logo field requires at least Horde 3.3 and a matching type
+        // field.
+        // 'logo' => 'object_logo',
+        // 'logotype' => 'object_logotype',
         'category' => 'object_category',
         'notes' => 'object_notes',
         'website' => 'object_url',
@@ -234,7 +247,7 @@ $cfgSources['localsql'] = array(
     'tabs' => array(
         _("Personal") => array('firstname', 'lastname', 'middlenames',
                                'namePrefix', 'nameSuffix', 'name', 'alias',
-                               'birthday'),
+                               'birthday', 'photo'),
         _("Location") => array('homeStreet', 'homePOBox', 'homeCity',
                                'homeProvince', 'homePostalCode', 'homeCountry',
                                'workStreet', 'workPOBox', 'workCity',
@@ -242,7 +255,7 @@ $cfgSources['localsql'] = array(
                                'timezone'),
         _("Communications") => array('email', 'homePhone', 'workPhone',
                                      'cellPhone', 'fax', 'pager'),
-        _("Organization") => array('title', 'role', 'company'),
+        _("Organization") => array('title', 'role', 'company', 'logo'),
         _("Other") => array('category', 'notes', 'website', 'freebusyUrl',
                             'pgpPublicKey', 'smimePublicKey'),
     ),
@@ -259,6 +272,7 @@ $cfgSources['localsql'] = array(
     'browse' => true,
     'use_shares' => true,
     'list_name_field' => 'lastname',
+    'alternative_name' => 'company',
 );
 
 /**
@@ -288,9 +302,10 @@ $cfgSources['localsql'] = array(
 //                                'organizationalPerson',
 //                                'inetOrgPerson'),
 //                                // Add 'turbaContact' to this array if using
-//                                // 'turbaType' attribute below
+//                                // 'turbaType' attribute below, and 'calEntry'
+//                                // if using 'freebusyUrl'.
 //         'scope' => 'one',
-//         'charset' => 'iso-8859-1',
+//         'charset' => 'utf-8',
 //         // Consult the LDAP schema to verify that all required attributes for
 //         // an entry are set and add them if needed.
 //         'checkrequired' => false,
@@ -309,7 +324,7 @@ $cfgSources['localsql'] = array(
 //         // From horde.schema.  Make sure you have 'turbaContact' objectClass
 //         // included above:
 //         // '__type' => 'turbaType',
-//         // '__members' => 'turbaMembers'
+//         // '__members' => 'turbaMembers',
 //
 //         'name' => 'cn',
 //         'email' => 'mail',
@@ -364,7 +379,7 @@ $cfgSources['localsql'] = array(
 //         'root' => 'ou=' . $_ldap_uid . ',ou=personal_addressbook,' . $_ldap_basedn,
 //         'bind_dn' => 'uid=' . $_ldap_uid . ',ou=People,' . $_ldap_basedn,
 //         'bind_password' => Auth::getCredential('password'),
-//         'dn' => array('cn', 'uid'),
+//         'dn' => array('uid'),
 //         'objectclass' => array('top',
 //                                'person',
 //                                // 'turbaContact',
@@ -381,7 +396,7 @@ $cfgSources['localsql'] = array(
 //
 //         // From horde.schema:
 //         // '__type' => 'turbaType',
-//         // '__members' => 'turbaMembers'
+//         // '__members' => 'turbaMembers',
 //
 //         'name' => 'cn',
 //         'email' => 'mail',
@@ -810,7 +825,9 @@ if (!empty($GLOBALS['conf']['kolab']['enabled'])) {
                 'cellPhone'         => 'mobile',
                 'fax'               => 'fax',
                 'notes'             => 'description',
-                'freebusyUrl'       => 'kolabHomeServer',
+                'kolabHomeServer'   => 'kolabHomeServer',
+                'freebusyUrl'       => array('fields' => array('kolabHomeServer', 'email'),
+                                             'format' => 'https://%s/freebusy/%s.ifb'),
             ),
             'search' => array(
                 'name',
@@ -862,7 +879,15 @@ if (!empty($GLOBALS['conf']['kolab']['enabled'])) {
             /* Personal */
             'name' => array('fields' => array('firstname', 'middlenames', 'lastname'),
                             'format' => '%s %s %s',
-                            'attribute' => 'full-name'),
+                            'parse' => array(
+                                array('fields' => array('firstname', 'middlenames',
+                                                        'lastname'),
+                                      'format' => '%s %s %s'),
+                                array('fields' => array( 'lastname', 'firstname'),
+                                      'format' => '%s, %s'),
+                                array('fields' => array('firstname', 'lastname'),
+                                      'format' => '%s %s'),
+                            )),
             'firstname'         => 'given-name',
             'lastname'          => 'last-name',
             'middlenames'       => 'middle-names',
@@ -870,6 +895,8 @@ if (!empty($GLOBALS['conf']['kolab']['enabled'])) {
             'nameSuffix'        => 'suffix',
             'initials'          => 'initials',
             'nickname'          => 'nick-name',
+            'photo'             => 'photo',
+            'phototype'         => 'phototype',
             'gender'            => 'gender',
             'birthday'          => 'birthday',
             'spouse'            => 'spouse-name',
@@ -909,11 +936,14 @@ if (!empty($GLOBALS['conf']['kolab']['enabled'])) {
             'language'          => 'language',
             'latitude'          => 'latitude',
             'longitude'         => 'longitude',
+            /* Invisible */
+            'email'             => 'email',
+            'pgpPublicKey'      => 'pgp-publickey',
         ),
         'tabs' => array(
             _("Personal") => array('name', 'firstname', 'lastname', 'middlenames',
                                    'namePrefix', 'nameSuffix', 'initials', 'nickname',
-                                   'gender', 'birthday', 'spouse', 'anniversary',
+                                   'photo', 'gender', 'birthday', 'spouse', 'anniversary',
                                    'children'),
             _("Location") => array('homeStreet', 'homeCity', 'homeProvince',
                                    'homePostalCode', 'homeCountry', 'workStreet',
@@ -928,6 +958,7 @@ if (!empty($GLOBALS['conf']['kolab']['enabled'])) {
         ),
         'search' => array(
             /* Personal */
+            'name',
             'firstname',
             'lastname',
             'middlenames',
diff --git a/contact.php b/contact.php
index 7f6738c..1b43fd7 100644
--- a/contact.php
+++ b/contact.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/contact.php,v 1.8.2.5 2008/06/13 21:48:56 chuck Exp $
+ * $Horde: turba/contact.php,v 1.8.2.6 2008/07/10 22:52:41 jan Exp $
  *
  * Copyright 2000-2008 The Horde Project (http://www.horde.org/)
  *
@@ -51,6 +51,12 @@ if (!$contact || is_a($contact, 'PEAR_Error')) {
     }
 }
 
+// Mark this contact as the user's own?
+if ($vars->get('action') == 'mark_own') {
+    $prefs->setValue('own_contact', $source . ';' . $contact->getValue('__key'));
+    $notification->push(_("This contact has been marked as your own."), 'horde.success');
+}
+
 // Are we printing?
 $print_view = (bool)Util::getFormData('print');
 
@@ -90,6 +96,19 @@ if ($contact->hasPermission(PERMS_DELETE)) {
                   array('tabname' => 'DeleteContact', 'id' => 'tabDeleteContact', 'onclick' => 'return ShowTab(\'DeleteContact\');'));
 }
 
+ at list($own_source, $own_id) = explode(';', $prefs->getValue('own_contact'));
+if ($own_source == $source && $own_id == $contact->getValue('__key')) {
+    $own_icon = ' ' . Horde::img('user.png', _("Your own contact"),
+                                 array('title' => _("Your own contact")),
+                                 $registry->getImageDir('horde'));
+    $own_link = '';
+} else {
+    $own_icon = '';
+    $own_link = '<span class="smallheader rightFloat">'
+        . Horde::link(Util::addParameter($url, array('action' => 'mark_own')))
+        . _("Mark this as your own contact") . '</a></span>';
+}
+
 $title = $view->getTitle();
 Horde::addScriptFile('prototype.js', 'turba', true);
 Horde::addScriptFile('contact_tabs.js', 'turba', true);
@@ -103,7 +122,11 @@ echo '<div id="page">';
 if (!$print_view) {
     echo $tabs->render($viewName);
 }
-echo '<h1 class="header">' . ($contact->getValue('name') ? htmlspecialchars($contact->getValue('name')) : '<em>' . _("Blank name") . '</em>') . '</h1>';
+echo '<h1 class="header">' . $own_link
+    . ($contact->getValue('name')
+       ? htmlspecialchars($contact->getValue('name'))
+       : '<em>' . _("Blank name") . '</em>')
+    . $own_icon . '</h1>';
 $view->html();
 echo '</div>';
 require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/data.php b/data.php
index 0e62e97..d6c867d 100644
--- a/data.php
+++ b/data.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/data.php,v 1.70.4.17 2008/06/13 08:40:03 jan Exp $
+ * $Horde: turba/data.php,v 1.70.4.20 2008/08/11 12:50:18 jan Exp $
  *
  * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
  *
@@ -42,10 +42,11 @@ function _emptyAttributeFilter($var)
  * Static function to make a given email address rfc822 compliant.
  *
  * @param string $address  An email address.
+ * @param boolean $allow_multi  Allow multiple email addresses.
  *
  * @return string  The RFC822-formatted email address.
  */
-function _getBareEmail($address)
+function _getBareEmail($address, $allow_multi = false)
 {
     // Empty values are still empty.
     if (!$address) {
@@ -60,12 +61,26 @@ function _getBareEmail($address)
         $rfc822 = new Mail_RFC822();
     }
 
-    $rfc822->validateMailbox($address);
-    return MIME::rfc822WriteAddress($address->mailbox, $address->host);
+    // Split multiple email addresses
+    if ($allow_multi) {
+        $addrs = MIME::rfc822Explode($address);
+    } else {
+        $addrs = array($address);
+    }
+
+    $result = array();
+    foreach ($addrs as $addr) {
+        $addr = trim($addr);
+
+        if ($rfc822->validateMailbox($addr)) {
+            $result[] = MIME::rfc822WriteAddress($addr->mailbox, $addr->host);
+        }
+    }
+
+    return implode(', ', $result);
 }
 
- at define('TURBA_BASE', dirname(__FILE__));
-require_once TURBA_BASE . '/lib/base.php';
+require_once dirname(__FILE__) . '/lib/base.php';
 require_once 'Horde/Data.php';
 
 if (!$conf['menu']['import_export']) {
@@ -107,6 +122,48 @@ $app_fields = array();
 $time_fields = array();
 $error = false;
 $outlook_mapping = array(
+    'Title' => 'namePrefix',
+    'First Name' => 'firstname',
+    'Middle Name' => 'middlenames',
+    'Last Name' => 'lastname',
+    'Nickname' => 'nickname',
+    'Suffix' => 'nameSuffix',
+    'Company' => 'company',
+    'Department' => 'department',
+    'Job Title' => 'title',
+    'Business Street' => 'workStreet',
+    'Business City' => 'workCity',
+    'Business State' => 'workProvince',
+    'Business Postal Code' => 'workPostalCode',
+    'Business Country' => 'workCountry',
+    'Home Street' => 'homeStreet',
+    'Home City' => 'homeCity',
+    'Home State' => 'homeProvince',
+    'Home Postal Code' => 'homePostalCode',
+    'Home Country' => 'homeCountry',
+    'Business Fax' => 'workFax',
+    'Business Phone' => 'workPhone',
+    'Home Phone' => 'homePhone',
+    'Mobile Phone' => 'cellPhone',
+    'Pager' => 'pager',
+    'Anniversary' => 'anniversary',
+    'Assistant\'s Name' => 'assistant',
+    'Birthday' => 'birthday',
+    'Business Address PO Box' => 'workPOBox',
+    'Categories' => 'category',
+    'Children' => 'children',
+    'E-mail Address' => 'email',
+    'Home Address PO Box' => 'homePOBox',
+    'Initials' => 'initials',
+    'Internet Free Busy' => 'freebusyUrl',
+    'Language' => 'language',
+    'Notes' => 'notes',
+    'Profession' => 'role',
+    'Office Location' => 'office',
+    'Spouse' => 'spouse',
+    'Web Page' => 'website',
+);
+$import_mapping = array(
     'e-mail' => 'email',
     'homeaddress' => 'homeAddress',
     'businessaddress' => 'workAddress',
@@ -116,10 +173,41 @@ $outlook_mapping = array(
     'businessfax' => 'fax',
     'jobtitle' => 'title',
     'internetfreebusy' => 'freebusyUrl',
-    );
+
+    // Entourage on MacOS
+    'Dept' => 'department',
+    'Work Street Address' => 'workStreet',
+    'Work City' => 'workCity',
+    'Work State' => 'workProvince',
+    'Work Zip' => 'workPostalCode',
+    'Work Country/Region' => 'workCountry',
+    'Home Street Address' => 'homeStreet',
+    'Home City' => 'homeCity',
+    'Home State' => 'homeProvince',
+    'Home Zip' => 'homePostalCode',
+    'Home Country/Region' => 'homeCountry',
+    'Work Fax' => 'workFax',
+    'Work Phone 1' => 'workPhone',
+    'Home Phone 1' => 'homePhone',
+    'Instant Messaging 1' => 'instantMessenger',
+
+    // Thunderbird
+    'Primary Email' => 'email',
+    'Fax Number' => 'fax',
+    'Pager Number' => 'pager',
+    'Mobile Number' => 'Mobile Phone',
+    'Home Address' => 'homeStreet',
+    'Home ZipCode' => 'homePostalCode',
+    'Work Address' => 'workStreet',
+    'Work ZipCode' => 'workPostalCode',
+    'Work Country' => 'workCountry',
+    'Work Phone' => 'workPhone',
+    'Organization' => 'company',
+    'Web Page 1' => 'website',
+);
 $param = array('time_fields' => $time_fields,
                'file_types'  => $file_types,
-               'import_mapping' => $outlook_mapping);
+               'import_mapping' => array_merge($outlook_mapping, $import_mapping));
 $import_format = Util::getFormData('import_format', '');
 if ($import_format == 'mulberry' || $import_format == 'pine') {
     $import_format = 'tsv';
@@ -364,12 +452,15 @@ if (is_array($next_step)) {
             } elseif ($result->count()) {
                 $result->reset();
                 $object = $result->next();
-                $notification->push(sprintf(_("\"%s\" already exists and was not imported."), $object->getValue('name')), 'horde.message');
+                $notification->push(sprintf(_("\"%s\" already exists and was not imported."),
+                                            $object->getValue('name')), 'horde.message');
             } else {
                 /* Check for, and validate, any email fields */
                 foreach (array_keys($row) as $field) {
                     if ($attributes[$field]['type'] == 'email') {
-                        $row[$field] = _getBareEmail($row[$field]);
+                        $allow_multi = is_array($attributes[$field]['params']) &&
+                            !empty($attributes[$field]['params']['allow_multi']);
+                        $row[$field] = _getBareEmail($row[$field], $allow_multi);
                     }
                 }
                 $row['__owner'] = $driver->getContactOwner();
diff --git a/docs/CHANGES b/docs/CHANGES
index 8cf6776..a8a3a27 100644
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -1,4 +1,76 @@
 ------
+v2.3.1
+------
+
+[jan] SECURITY: Escape output in test.php.
+[jan] Add script to import contacts from SquirrelMail database.
+[gwr] Correct support for the freebusy URL in Kolab.
+[gwr] Add photo support for the Kolab driver.
+[jan] Import broken vCards from Synthesis clients (Bug #7407).
+[cjh] Add two retries to find a contact after adding it (Bug #7478).
+[cjh] Add a PostgreSQL-specific upgrade script for 2.2.1 to 2.3
+      (michael.menge at zdv.uni-tuebingen.de, Bug #7462).
+[jan] Don't overwrite empty address books preference when creating new shares
+      (Bug #7399).
+[mms] Upgrade prototype.js to v1.6.0.3.
+
+
+----
+v2.3
+----
+
+[jan] Change group field in shares table to work with LDAP groups (Bug #6883).
+[jan] Fix exporting address books with country fields as vCards (Bug #7372).
+[mjr] Make sure we use all address books when searching via the api and the
+      user's addressbooks pref is empty (Bug #7357).
+[mjr] Correctly calculate the age of time objects (Bug #7330).
+
+
+--------
+v2.3-RC1
+--------
+
+[jan] Improve vCard EMAIL field parsing (Bug #7281).
+[jan] Correctly import and export address extensions (Bug #7279).
+[jan] Export full country names to vCard addresses.
+[jan] Respect precedence of multiple vCard properties (Request #7122).
+[jan] Remove deleted address books from address book preference (Request #6938).
+[jan] Export LABEL properties to vCard if address fields are available.
+[gwr] Add support for storing public PGP keys when using Kolab.
+[gwr] Add support for adding addresses from IMP when using Kolab.
+[jan] Add configuration option for an alternative name field.
+[jan] Add support for image fields to SQL driver (requires Horde 3.3).
+[jan] Add more default field mappings for CSV import (Request #6901).
+[jan] Update field names for Outlook 2003 export (Request #6901).
+[jan] Improve logic which entries to show in the sidebar menu.
+[jan] Add support for the category form field (Request #6884).
+[jan] Fix sorting so that sort order is always reflected correctly,
+      independent of name format.
+[jan] Add Basque translation (Euskal Herriko Unibertsitatea EHU/UPV
+      <xabier.arrieta at ehu.es>).
+[jan] Add ability to mark a contact as your own and API method to export it.
+[jan] Fix importing phone numbers from Synthesis clients (Bug #7011).
+[mjr] Fix issue with searching composite fields when the number of search terms
+      is less than the number of composed fields (Bug #6796)
+[cjh] Allow importing multiple address into an email field if allow_multi
+      is set to true on the field in attributes.php (Bug #6897).
+[mjr] Remove user permissions on all shares when deleting a user.
+[jan] Fix searching of client address books that have been disabled in the
+      preferences (Bug #6961).
+[mjr] Fix issue with removeUserData api that caused the deleted user's
+      address books to not be deleted as well as remove an erroneous error
+      notification (Bug #6969).
+[cjh] Fix the column selector/sorter in IE (Bug #6912).
+
+
+------
+v2.2.2
+------
+
+[jan] SECURITY: Escape output in test.php.
+
+
+------
 v2.2.1
 ------
 
diff --git a/docs/CREDITS b/docs/CREDITS
index d8ef2d1..c56d36b 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -8,6 +8,7 @@ Core Developers
 
 - Chuck Hagenbuch <chuck at horde.org>
 - Jan Schneider <jan at horde.org>
+- Michael J. Rubinsky <mrubinsk at horde.org>
 
 
 Localization
@@ -15,8 +16,11 @@ Localization
 
 =====================   ======================================================
 Arabic (Syria)          Platinum Development Team <devteam at platinum-sy.net>
+Basque                  Euskal Herriko Unibertsitatea <xabier.arrieta at ehu.es>
 Brazilian Portuguese    Carlos Daniel Kibrit <kibrit at terra.com.br>
                         Fabio 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                 Angels Guimerà <angels.Guimera at uab.es>
                         Jordi Giralt <projecte.k2 at upcnet.es>
@@ -30,6 +34,7 @@ Danish                  Martin List-Petersen <martin at list-petersen.dk>
 Dutch                   Jan Kuipers <jrkuipers at lauwerscollege.nl>
                         Han Spruyt <han.spruyt at ijsselgroep.nl>
 Estonian                Toomas Aas <toomas.aas at raad.tartu.ee>
+                        Alar Sing <alar.sing at err.ee>
 Finnish                 Leena Heino <liinu at uta.fi>
 French                  Sam Przyswa <samp at arial-concept.com>
                         Ronnie Garcia <ronnie at mk2.net>
diff --git a/docs/INSTALL b/docs/INSTALL
index e9596f7..7c9bd35 100644
--- a/docs/INSTALL
+++ b/docs/INSTALL
@@ -1,9 +1,9 @@
 ======================
- Installing Turba 2.2
+ Installing Turba 2.3
 ======================
 
-:Last update:   $Date: 2007/12/20 14:34:25 $
-:Revision:      $Revision: 1.10.10.6 $
+:Last update:   $Date: 2008/09/05 14:09:08 $
+:Revision:      $Revision: 1.10.10.7 $
 :Contact:       turba at lists.horde.org
 
 .. contents:: Contents
diff --git a/docs/RELEASE_NOTES b/docs/RELEASE_NOTES
index a0fe244..6c08eb8 100644
--- a/docs/RELEASE_NOTES
+++ b/docs/RELEASE_NOTES
@@ -17,27 +17,32 @@ $this->notes['fm']['focus'] = 8;
 /* Mailing list release notes. */
 $this->notes['ml']['changes'] = <<<ML
 The Horde Team is pleased to announce the final release of the Turba Contact
-Manager version H3 (2.2.1).
+Manager version H3 (2.3.1). The original release was packaged with the wrong
+name; this second release of 2.3.1 has no changes to the package or the code,
+only to the version name.
 
-This is a bugfix release that also fixes an XSS (cross site scripting)
-vulnerability in the contact view.
+This is a minor security release that fixes unescaped output in the test
+script. All users are encouraged to upgrade to this release. In addition all
+users are encouraged to disable test.php in production, per the install
+documentation.
 
 Turba is the Horde contact management application. It is a production level
 address book, and makes heavy use of the Horde framework to provide
 integration with IMP and other Horde applications. It supports SQL, LDAP,
 Kolab, and IMSP address books.
 
-Major new changes in this release:
-    * Fixed unescaped output in the contact view.
-    * Improved importing of phone numbers.
-    * Fixed upgrade script.
+The major changes compared to the Turba version H3 (2.3) are:
+    * SECURITY: Escape output in test.php
+    * A SquirrelMail contact import script.
+    * Kolab fixes for free/busy URLs and photos.
+    * prototype.js has been upgraded to 1.6.0.3.
 ML;
 
 /* Freshmeat release notes, not more than 600 characters. */
 $this->notes['fm']['changes'] = <<<FM
-Unescaped output in the contact view has been fixed.
-Importing of phone numbers has been improved.
-The upgrade script has been fixed.
+This release fixes unescaped output in a utility test script. In addition, an
+import script for SquirrelMail contacts has been added, several Kolab issues
+have been fixed, and prototype.js has been upgraded to 1.6.0.3.
 FM;
 
 $this->notes['name'] = 'Turba';
diff --git a/docs/UPGRADING b/docs/UPGRADING
index bdcbeaf..24f5648 100644
--- a/docs/UPGRADING
+++ b/docs/UPGRADING
@@ -2,11 +2,41 @@
  Upgrading Turba
 =================
 
-:Last update:   $Date: 2008/04/30 03:37:39 $
-:Revision:      $Revision: 1.3.6.15 $
+:Last update:   $Date: 2008/11/14 17:27:39 $
+:Revision:      $Revision: 1.3.6.27 $
 :Contact:       turba at lists.horde.org
 
 
+These are instructions to upgrade from earlier Turba versions. Please backup
+your existing data before running any of the steps described below. You can't
+use the updated data with your old Turba version anymore.
+
+
+Upgrading Turba from 2.2.1 to 2.3
+=================================
+
+
+Share Table Updates
+-------------------
+
+Some fields in the SQL share driver tables have been changed. Execute the
+provided SQL script to update your database if you are using the native SQL
+share driver.
+
+   mysql --user=root --password=<MySQL-root-password>  <db name> < scripts/upgrade/2.2.1_to_2.3.sql
+
+
+New fields
+----------
+
+Examples for a few new fields have been added to
+``config/attributes.php.dist`` and ``config/sources.php.dist``. These field
+require Horde 3.3 or later though, so they are disabled by default. If you
+update your ``attributes.php`` and ``sources.php`` files and are using a
+sufficiently recent Horde version, you may want to uncomment those
+examples. These are the ``photo``, ``phototype``, ``logo``, ``logotype``,
+``pgpPublicKey`` and ``smimePublicKey`` fields.
+
 
 Upgrading to Turba 2.2
 ======================
@@ -18,6 +48,7 @@ These are notes on upgrading from Turba 2.1.x to Turba 2.2.x.
                follow the upgrade steps described in `Upgrading to Turba 2.1`_
                first.
 
+
 New Default Schema
 ------------------
 
@@ -27,7 +58,7 @@ other address book applications and to ease synchronization with those.
 You can still use your old address book schema without any restrictions, but
 if you want to migrate existing address books to the new default scheme, you
 can use the provided upgrade script. This script assumes that you use the old
-default schema from Turba 2.1 and doesn't permanentely change any data unless
+default schema from Turba 2.1 and doesn't permanently change any data unless
 you edit it.
 
 To run the script you have to open it in any text editor and change the three
@@ -66,15 +97,15 @@ or "text".
 New Beta SQL Share Driver Support
 ---------------------------------
 
-A new beta-level SQL Horde_Share driver has been added in Horde 3.2. This driver
-offers significant performance improvements over the existing Datatree driver
-but it has not received the same level of testing, thus the beta designation.
-In order to make use of this driver, you must be running Horde 3.2-RC3 or
-later. To add the new SQL tables for this driver, execute the sql script
-``2.1_to_2.2_add_sql_share_tables`` that is appropriate for your RDBMS. You then
-must execute the ``2.1_to_2.2_datatree_to_sql_share_migration.php`` upgrade
-script to migrate your existing share data.  Both of these scripts can be found
-in the ``scripts/upgrades`` folder.
+A new beta-level SQL Horde_Share driver has been added in Horde 3.2. This
+driver offers significant performance improvements over the existing Datatree
+driver but it has not received the same level of testing, thus the beta
+designation.  In order to make use of this driver, you must be running Horde
+3.2-RC3 or later. To add the new SQL tables for this driver, execute the sql
+script ``2.1_to_2.2_add_sql_share_tables`` that is appropriate for your
+RDBMS. You then must execute the ``convert_datatree_shares_to_sql.php``
+upgrade script to migrate your existing share data.  Both of these scripts can
+be found in the ``scripts/upgrades`` folder.
 
 
 Flattened Horde Shares
@@ -94,7 +125,9 @@ Turba transparently during each user's first login after the update.
 Additionally, if you are currently using the configuration setting,
 ``Name of Client Address Book`` and have it set to a share enabled source, you
 will most likely have to change the entry.  The correct share key to enter here
-can be found by browsing the datatree via the administration UI.
+is the share name and can be found by browsing the datatree via the
+administration UI if using datatree shares, or by looking in the turba_shares
+table if using SQL based shares.
 
 
 IMSP Driver and Share Support
@@ -133,6 +166,7 @@ All hooks that are specific to Turba have been moved from the
 Upgrading to Turba 2.1
 ======================
 
+
 These are notes on upgrading from Turba 2.0.x to Turba 2.1.
 
 .. Important:: These upgrade instructions assume that you are upgrading from
@@ -140,6 +174,7 @@ These are notes on upgrading from Turba 2.0.x to Turba 2.1.
                follow the upgrade steps described in `Upgrading to Turba 2.0`_
                first.
 
+
 Synchronization Support
 -----------------------
 
diff --git a/js/prototype.js b/js/prototype.js
index ab8726c..3c2493f 100644
--- a/js/prototype.js
+++ b/js/prototype.js
@@ -1 +1 @@
-var Prototype={Version:"1.6.0.2",Browser:{IE:!!(window.attachEvent&&!window.opera),Opera:!!window.opera,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,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=Object.extend((function(I){return function(){return C[I].apply(this,arguments)}})(F).wrap(H),{valueOf:function(){return H},toString:function(){return H.toString()}})}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].split(",").invoke("strip");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)},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)))}}});Function.prototype.defer=Function.prototype.delay.curry(0.01);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(E){}}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.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("")});with(String.prototype.escapeHTML){div.appendChild(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;C=C.bind(B);try{this._each(function(E){C(E,A++)})}catch(D){if(D!=$break){throw D}}return this},eachSlice:function(D,C,B){C=C?C.bind(B):Prototype.K;var A=-D,E=[],F=this.toArray();while((A+=D)<F.length){E.push(F.slice(A,A+D))}return E.collect(C,B)},all:function(C,B){C=C?C.bind(B):Prototype.K;var A=true;this.each(function(E,D){A=A&&!!C(E,D);if(!A){throw $break}});return A},any:function(C,B){C=C?C.bind(B):Prototype.K;var A=false;this.each(function(E,D){if(A=!!C(E,D)){throw $break}});return A},collect:function(C,B){C=C?C.bind(B):Prototype.K;var A=[];this.each(function(E,D){A.push(C(E,D))});return A},detect:function(C,B){C=C.bind(B);var A;this.each(function(E,D){if(C(E,D)){A=E;throw $break}});return A},findAll:function(C,B){C=C.bind(B);var A=[];this.each(function(E,D){if(C(E,D)){A.push(E)}});return A},grep:function(D,C,B){C=C?C.bind(B):Prototype.K;var A=[];if(Object.isString(D)){D=new RegExp(D)}this.each(function(F,E){if(D.match(F)){A.push(C(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){C=C.bind(B);this.each(function(E,D){A=C(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?C.bind(B):Prototype.K;var A;this.each(function(E,D){E=C(E,D);if(A==null||E>=A){A=E}});return A},min:function(C,B){C=C?C.bind(B):Prototype.K;var A;this.each(function(E,D){E=C(E,D);if(A==null||E<A){A=E}});return A},partition:function(D,B){D=D?D.bind(B):Prototype.K;var C=[],A=[];this.each(function(F,E){(D(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){C=C.bind(B);var A=[];this.each(function(E,D){if(!C(E,D)){A.push(E)}});return A},sortBy:function(B,A){B=B.bind(A);return this.map(function(D,C){return{value:D,criteria:B(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(!(Object.isFunction(C)&&C=="[object NodeList]")&&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(A){$R(0,this,true).each(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){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.map(function(D){var C=encodeURIComponent(D.key),B=D.value;if(B&&typeof B=="object"){if(Object.isArray(B)){return B.map(A.curry(C)).join("&")}}return A(C,B)}).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(E){if(Object.isFunction(E[D])){try{E[D].apply(E,[B,C,A])}catch(F){}}})}};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 E=B.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&E&&E.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||{})}).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).style.display="none";return A},show:function(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]:B.select(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(D,C){D=$(D),C=$(C);var F=C;if(D.compareDocumentPosition){return(D.compareDocumentPosition(C)&8)===8}if(D.sourceIndex&&!Prototype.Browser.Opera){var E=D.sourceIndex,B=C.sourceIndex,A=C.nextSibling;if(!A){do{C=C.parentNode}while(!(A=C.nextSibling)&&C.parentNode)}if(A&&A.sourceIndex){return(E>B&&E<A.sourceIndex)}}while(D=D.parentNode){if(D==F){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){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(window.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=="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 }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.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=="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);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(E,C){C=$(C);var B=C.getStyle("position");if(B!=="static"){return E(C)}var D=C.getOffsetParent();if(D&&D.getStyle("position")==="fixed"){D.setStyle({zoom:1})}C.setStyle({position:"relative"});var F=E(C);C.setStyle({position:B});return F})});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").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=="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,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 I=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(H)}else{H(B)}}function H(F){F=F.toUpperCase();if(!Element.Methods.ByTag[F]){Element.Methods.ByTag[F]={}}Object.extend(Element.Methods.ByTag[F],C)}function A(L,K,F){F=F||false;for(var N in L){var M=L[N];if(!Object.isFunction(M)){continue}if(!F||!(N in K)){K[N]=M.methodize()}}}function E(L){var F;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]){F="HTML"+K[L]+"Element"}if(window[F]){return window[F]}F="HTML"+L+"Element";if(window[F]){return window[F]}F="HTML"+L.capitalize()+"Element";if(window[F]){return window[F]}window[F]={};window[F].prototype=document.createElement(L).__proto__;return window[F]}if(I.ElementExtensions){A(Element.Methods,HTMLElement.prototype);A(Element.Methods.Simulated,HTMLElement.prototype,true)}if(I.SpecificElementExtensions){for(var J in Element.Methods.ByTag){var G=E(J);if(Object.isUndefined(G)){continue}A(D[J],G.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh){Element.extend.refresh()}Element.cache={}};document.viewport={getDimensions:function(){var A={};var C=Prototype.Browser;$w("width height").each(function(E){var B=E.capitalize();A[E]=(C.WebKit&&!document.evaluate)?self["inner"+B]:(C.Opera)?document.body["client"+B]:document.documentElement["client"+B]});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();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(this.expression)){return false}return true},compileMatcher:function(){if(this.shouldUseXPath()){return this.compileXPathMatcher()}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,F=Selector.patterns,B=Selector.xpath,D,A;if(Selector._cache[E]){this.xpath=Selector._cache[E];return }this.matcher=[".//*"];while(E&&D!=E&&(/\S/).test(E)){D=E;for(var C in F){if(A=E.match(F[C])){this.matcher.push(Object.isFunction(B[C])?B[C](A):new Template(B[C]).evaluate(A));E=E.replace(A[0],"");break}}}this.xpath=this.matcher.join("");Selector._cache[this.expression]=this.xpath},findElements:function(A){A=A||document;if(this.xpath){return document._getElementsByXPath(this.xpath,A)}return this.matcher(A)},match:function(H){this.tokens=[];var L=this.expression,A=Selector.patterns,E=Selector.assertions;var B,D,F;while(L&&B!==L&&(/\S/).test(L)){B=L;for(var I in A){D=A[I];if(F=L.match(D)){if(E[I]){this.tokens.push([I,Object.clone(F)]);L=L.replace(F[0],"")}else{return this.findElements(document).include(H)}}}}var K=true,C,J;for(var I=0,G;G=this.tokens[I];I++){C=G[0],J=G[1];if(!Selector.assertions[C](H,J)){K=false;break}}return K},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 or translate(text(), ' \t\r\n', '') = '')]",checked:"[@checked]",disabled:"[@disabled]",enabled:"[not(@disabled)]",not:function(B){var H=B[6],G=Selector.patterns,A=Selector.xpath,E,C;var F=[];while(H&&E!=H&&(/\S/).test(H)){E=H;for(var D in G){if(B=H.match(G[D])){C=Object.isFunction(A[D])?A[D](B):new Template(A[D]).evaluate(B);F.push("("+C.substring(1,C.length-1)+")");H=H.replace(B[0],"");break}}}return"[not("+F.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(E,C){var F,G=C[6],B;if(G=="even"){G="2n+0"}if(G=="odd"){G="2n+1"}if(F=G.match(/^(\d+)$/)){return"["+E+"= "+F[1]+"]"}if(F=G.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(F[1]=="-"){F[1]=-1}var D=F[1]?Number(F[1]):1;var A=F[2]?Number(F[2]):0;B="[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(B).evaluate({fragment:E,a:D,b:A})}}}},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]+)\]/,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(B,A){for(var C=0,D;D=A[C];C++){B.push(D)}return B},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,H,C,B){var I=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()===I){E.push(D)}}return E}else{return H.getElementsByTagName(C)}},id:function(B,A,H,F){var G=$(H),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,I,H,J,C,B){if(!A){A=I.getElementsByTagName("*")}if(A&&B){A=this[B](A)}var K=Selector.operators[C],F=[];for(var E=0,D;D=A[E];E++){var G=Element.readAttribute(D,H);if(G===null){continue}if(K(G,J)){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(B,A,C){if(B==0){return A>0?[A]:[]}return $R(1,C).inject([],function(D,E){if(0==(E-A)%B&&(E-A)/B>=0){D.push(E)}return D})},nth:function(A,L,N,K,C){if(A.length==0){return[]}if(L=="even"){L="2n+0"}if(L=="odd"){L="2n+1"}var J=Selector.handlers,I=[],B=[],E;J.mark(A);for(var H=0,D;D=A[H];H++){if(!D.parentNode._countedByPrototype){J.index(D.parentNode,K,C);B.push(D.parentNode)}}if(L.match(/^\d+$/)){L=Number(L);for(var H=0,D;D=A[H];H++){if(D.nodeIndex==L){I.push(D)}}}else{if(E=L.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(E[1]=="-"){E[1]=-1}var O=E[1]?Number(E[1]):1;var M=E[2]?Number(E[2]):0;var P=Selector.pseudos.getIndices(O,M,A.length);for(var H=0,D,F=P.length;D=A[H];H++){for(var G=0;G<F;G++){if(D.nodeIndex==P[G]){I.push(D)}}}}}J.unmark(A);J.unmark(B);return I},empty:function(B,F,A){for(var D=0,C=[],E;E=B[D];D++){if(E.tagName=="!"||(E.firstChild&&!E.innerHTML.match(/^\s*$/))){continue}C.push(E)}return C},not:function(A,D,I){var G=Selector.handlers,J,C;var H=new Selector(D).findElements(I);G.mark(H);for(var F=0,E=[],B;B=A[F];F++){if(!B._countedByPrototype){E.push(B)}}G.unmark(H);return E},enabled:function(B,F,A){for(var D=0,C=[],E;E=B[D];D++){if(!E.disabled){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.startsWith(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(B,A){for(var C=0,D;D=A[C];C++){if(D.tagName!=="!"){B.push(D)}}return B},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!="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.blur();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(D,A){if(Object.isUndefined(A)){return this[D.type=="select-one"?"selectOne":"selectMany"](D)}else{var C,F,G=!Object.isArray(A);for(var B=0,E=D.length;B<E;B++){C=D.options[B];F=this.optionValue(C);if(G){if(F==A){C.selected=true;return }}else{C.selected=A.include(F)}}}},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(D){var C=Event.extend(D).target;return Element.extend(C.nodeType==Node.TEXT_NODE?C.parentNode:C)},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(C){return{x:C.pageX||(C.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft)),y:C.pageY||(C.clientY+(document.documentElement.scrollTop||document.body.scrollTop))}},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)}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,J,I;J=C[D];D++){if(J.className&&(I=" "+J.className+" ")&&(I.include(F)||(H&&H.all(function(K){return !K.toString().blank()&&I.include(" "+K+" ")})))){G.push(Element.extend(J))}}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
+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/src/prototype.js b/js/src/prototype.js
index 0bb8807..a7fd383 100644
--- a/js/src/prototype.js
+++ b/js/src/prototype.js
@@ -1,4 +1,4 @@
-/*  Prototype JavaScript framework, version 1.6.0.2
+/*  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.
@@ -7,23 +7,26 @@
  *--------------------------------------------------------------------------*/
 
 var Prototype = {
-  Version: '1.6.0.2',
+  Version: '1.6.0.3',
 
   Browser: {
-    IE:     !!(window.attachEvent && !window.opera),
-    Opera:  !!window.opera,
+    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,
+    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__
+      document.createElement('div')['__proto__'] &&
+      document.createElement('div')['__proto__'] !==
+        document.createElement('form')['__proto__']
   },
 
   ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
@@ -83,12 +86,13 @@ Class.Methods = {
       var property = properties[i], value = source[property];
       if (ancestor && Object.isFunction(value) &&
           value.argumentNames().first() == "$super") {
-        var method = value, value = Object.extend((function(m) {
+        var method = value;
+        value = (function(m) {
           return function() { return ancestor[m].apply(this, arguments) };
-        })(property).wrap(method), {
-          valueOf:  function() { return method },
-          toString: function() { return method.toString() }
-        });
+        })(property).wrap(method);
+
+        value.valueOf = method.valueOf.bind(method);
+        value.toString = method.toString.bind(method);
       }
       this.prototype[property] = value;
     }
@@ -167,7 +171,7 @@ Object.extend(Object, {
   },
 
   isElement: function(object) {
-    return object && object.nodeType == 1;
+    return !!(object && object.nodeType == 1);
   },
 
   isArray: function(object) {
@@ -198,7 +202,8 @@ Object.extend(Object, {
 
 Object.extend(Function.prototype, {
   argumentNames: function() {
-    var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
+    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
+      .replace(/\s+/g, '').split(',');
     return names.length == 1 && !names[0] ? [] : names;
   },
 
@@ -232,6 +237,11 @@ Object.extend(Function.prototype, {
     }, timeout);
   },
 
+  defer: function() {
+    var args = [0.01].concat($A(arguments));
+    return this.delay.apply(this, args);
+  },
+
   wrap: function(wrapper) {
     var __method = this;
     return function() {
@@ -248,8 +258,6 @@ Object.extend(Function.prototype, {
   }
 });
 
-Function.prototype.defer = Function.prototype.delay.curry(0.01);
-
 Date.prototype.toJSON = function() {
   return '"' + this.getUTCFullYear() + '-' +
     (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
@@ -530,7 +538,7 @@ if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.proto
     return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
   },
   unescapeHTML: function() {
-    return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+    return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
   }
 });
 
@@ -547,7 +555,7 @@ Object.extend(String.prototype.escapeHTML, {
   text: document.createTextNode('')
 });
 
-with (String.prototype.escapeHTML) div.appendChild(text);
+String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
 
 var Template = Class.create({
   initialize: function(template, pattern) {
@@ -589,10 +597,9 @@ var $break = { };
 var Enumerable = {
   each: function(iterator, context) {
     var index = 0;
-    iterator = iterator.bind(context);
     try {
       this._each(function(value) {
-        iterator(value, index++);
+        iterator.call(context, value, index++);
       });
     } catch (e) {
       if (e != $break) throw e;
@@ -601,47 +608,46 @@ var Enumerable = {
   },
 
   eachSlice: function(number, iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
     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 ? iterator.bind(context) : Prototype.K;
+    iterator = iterator || Prototype.K;
     var result = true;
     this.each(function(value, index) {
-      result = result && !!iterator(value, index);
+      result = result && !!iterator.call(context, value, index);
       if (!result) throw $break;
     });
     return result;
   },
 
   any: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    iterator = iterator || Prototype.K;
     var result = false;
     this.each(function(value, index) {
-      if (result = !!iterator(value, index))
+      if (result = !!iterator.call(context, value, index))
         throw $break;
     });
     return result;
   },
 
   collect: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    iterator = iterator || Prototype.K;
     var results = [];
     this.each(function(value, index) {
-      results.push(iterator(value, index));
+      results.push(iterator.call(context, value, index));
     });
     return results;
   },
 
   detect: function(iterator, context) {
-    iterator = iterator.bind(context);
     var result;
     this.each(function(value, index) {
-      if (iterator(value, index)) {
+      if (iterator.call(context, value, index)) {
         result = value;
         throw $break;
       }
@@ -650,17 +656,16 @@ var Enumerable = {
   },
 
   findAll: function(iterator, context) {
-    iterator = iterator.bind(context);
     var results = [];
     this.each(function(value, index) {
-      if (iterator(value, index))
+      if (iterator.call(context, value, index))
         results.push(value);
     });
     return results;
   },
 
   grep: function(filter, iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    iterator = iterator || Prototype.K;
     var results = [];
 
     if (Object.isString(filter))
@@ -668,7 +673,7 @@ var Enumerable = {
 
     this.each(function(value, index) {
       if (filter.match(value))
-        results.push(iterator(value, index));
+        results.push(iterator.call(context, value, index));
     });
     return results;
   },
@@ -696,9 +701,8 @@ var Enumerable = {
   },
 
   inject: function(memo, iterator, context) {
-    iterator = iterator.bind(context);
     this.each(function(value, index) {
-      memo = iterator(memo, value, index);
+      memo = iterator.call(context, memo, value, index);
     });
     return memo;
   },
@@ -711,10 +715,10 @@ var Enumerable = {
   },
 
   max: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    iterator = iterator || Prototype.K;
     var result;
     this.each(function(value, index) {
-      value = iterator(value, index);
+      value = iterator.call(context, value, index);
       if (result == null || value >= result)
         result = value;
     });
@@ -722,10 +726,10 @@ var Enumerable = {
   },
 
   min: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    iterator = iterator || Prototype.K;
     var result;
     this.each(function(value, index) {
-      value = iterator(value, index);
+      value = iterator.call(context, value, index);
       if (result == null || value < result)
         result = value;
     });
@@ -733,10 +737,10 @@ var Enumerable = {
   },
 
   partition: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
+    iterator = iterator || Prototype.K;
     var trues = [], falses = [];
     this.each(function(value, index) {
-      (iterator(value, index) ?
+      (iterator.call(context, value, index) ?
         trues : falses).push(value);
     });
     return [trues, falses];
@@ -751,19 +755,20 @@ var Enumerable = {
   },
 
   reject: function(iterator, context) {
-    iterator = iterator.bind(context);
     var results = [];
     this.each(function(value, index) {
-      if (!iterator(value, index))
+      if (!iterator.call(context, value, index))
         results.push(value);
     });
     return results;
   },
 
   sortBy: function(iterator, context) {
-    iterator = iterator.bind(context);
     return this.map(function(value, index) {
-      return {value: value, criteria: iterator(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;
@@ -815,8 +820,12 @@ function $A(iterable) {
 if (Prototype.Browser.WebKit) {
   $A = function(iterable) {
     if (!iterable) return [];
-    if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
-        iterable.toArray) return iterable.toArray();
+    // 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;
@@ -963,8 +972,8 @@ Object.extend(Number.prototype, {
     return this + 1;
   },
 
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
+  times: function(iterator, context) {
+    $R(0, this, true).each(iterator, context);
     return this;
   },
 
@@ -1011,7 +1020,9 @@ var Hash = Class.create(Enumerable, (function() {
     },
 
     get: function(key) {
-      return this._object[key];
+      // simulating poorly supported hasOwnProperty
+      if (this._object[key] !== Object.prototype[key])
+        return this._object[key];
     },
 
     unset: function(key) {
@@ -1051,14 +1062,14 @@ var Hash = Class.create(Enumerable, (function() {
     },
 
     toQueryString: function() {
-      return this.map(function(pair) {
+      return this.inject([], function(results, pair) {
         var key = encodeURIComponent(pair.key), values = pair.value;
 
         if (values && typeof values == 'object') {
           if (Object.isArray(values))
-            return values.map(toQueryPair.curry(key)).join('&');
-        }
-        return toQueryPair(key, values);
+            return results.concat(values.map(toQueryPair.curry(key)));
+        } else results.push(toQueryPair(key, values));
+        return results;
       }).join('&');
     },
 
@@ -1558,6 +1569,7 @@ if (!Node.ELEMENT_NODE) {
     return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
   };
   Object.extend(this.Element, element || { });
+  if (element) this.Element.prototype = element.prototype;
 }).call(window);
 
 Element.cache = { };
@@ -1574,12 +1586,14 @@ Element.Methods = {
   },
 
   hide: function(element) {
-    $(element).style.display = 'none';
+    element = $(element);
+    element.style.display = 'none';
     return element;
   },
 
   show: function(element) {
-    $(element).style.display = '';
+    element = $(element);
+    element.style.display = '';
     return element;
   },
 
@@ -1733,7 +1747,7 @@ Element.Methods = {
     element = $(element);
     if (arguments.length == 1) return element.firstDescendant();
     return Object.isNumber(expression) ? element.descendants()[expression] :
-      element.select(expression)[index || 0];
+      Element.select(element, expression)[index || 0];
   },
 
   previous: function(element, expression, index) {
@@ -1863,24 +1877,16 @@ Element.Methods = {
 
   descendantOf: function(element, ancestor) {
     element = $(element), ancestor = $(ancestor);
-    var originalAncestor = ancestor;
 
     if (element.compareDocumentPosition)
       return (element.compareDocumentPosition(ancestor) & 8) === 8;
 
-    if (element.sourceIndex && !Prototype.Browser.Opera) {
-      var e = element.sourceIndex, a = ancestor.sourceIndex,
-       nextAncestor = ancestor.nextSibling;
-      if (!nextAncestor) {
-        do { ancestor = ancestor.parentNode; }
-        while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
-      }
-      if (nextAncestor && nextAncestor.sourceIndex)
-       return (e > a && e < nextAncestor.sourceIndex);
-    }
+    if (ancestor.contains)
+      return ancestor.contains(element) && ancestor !== element;
 
     while (element = element.parentNode)
-      if (element == originalAncestor) return true;
+      if (element == ancestor) return true;
+
     return false;
   },
 
@@ -1895,7 +1901,7 @@ Element.Methods = {
     element = $(element);
     style = style == 'float' ? 'cssFloat' : style.camelize();
     var value = element.style[style];
-    if (!value) {
+    if (!value || value == 'auto') {
       var css = document.defaultView.getComputedStyle(element, null);
       value = css ? css[style] : null;
     }
@@ -1934,7 +1940,7 @@ Element.Methods = {
 
   getDimensions: function(element) {
     element = $(element);
-    var display = $(element).getStyle('display');
+    var display = element.getStyle('display');
     if (display != 'none' && display != null) // Safari bug
       return {width: element.offsetWidth, height: element.offsetHeight};
 
@@ -1963,7 +1969,7 @@ Element.Methods = {
       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 (window.opera) {
+      if (Prototype.Browser.Opera) {
         element.style.top = 0;
         element.style.left = 0;
       }
@@ -2018,7 +2024,7 @@ Element.Methods = {
       valueL += element.offsetLeft || 0;
       element = element.offsetParent;
       if (element) {
-        if (element.tagName == 'BODY') break;
+        if (element.tagName.toUpperCase() == 'BODY') break;
         var p = Element.getStyle(element, 'position');
         if (p !== 'static') break;
       }
@@ -2028,7 +2034,7 @@ Element.Methods = {
 
   absolutize: function(element) {
     element = $(element);
-    if (element.getStyle('position') == 'absolute') return;
+    if (element.getStyle('position') == 'absolute') return element;
     // Position.prepare(); // To be done manually by Scripty when it needs it.
 
     var offsets = element.positionedOffset();
@@ -2052,7 +2058,7 @@ Element.Methods = {
 
   relativize: function(element) {
     element = $(element);
-    if (element.getStyle('position') == 'relative') return;
+    if (element.getStyle('position') == 'relative') return element;
     // Position.prepare(); // To be done manually by Scripty when it needs it.
 
     element.style.position = 'relative';
@@ -2077,15 +2083,15 @@ Element.Methods = {
   },
 
   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)  
+    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);
 
@@ -2103,7 +2109,7 @@ Element.Methods = {
 
     element = forElement;
     do {
-      if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
+      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
         valueT -= element.scrollTop  || 0;
         valueL -= element.scrollLeft || 0;
       }
@@ -2218,6 +2224,9 @@ else if (Prototype.Browser.IE) {
   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' });
@@ -2231,6 +2240,8 @@ else if (Prototype.Browser.IE) {
     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
@@ -2246,6 +2257,14 @@ else if (Prototype.Browser.IE) {
     );
   });
 
+  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();
@@ -2337,7 +2356,7 @@ else if (Prototype.Browser.IE) {
   Element._attributeTranslations.has = {};
 
   $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
-      'encType maxLength readOnly longDesc').each(function(attr) {
+      'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
     Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
     Element._attributeTranslations.has[attr.toLowerCase()] = attr;
   });
@@ -2390,7 +2409,7 @@ else if (Prototype.Browser.WebKit) {
       (value < 0.00001) ? 0 : value;
 
     if (value == 1)
-      if(element.tagName == 'IMG' && element.width) {
+      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
         element.width++; element.width--;
       } else try {
         var n = document.createTextNode(' ');
@@ -2521,7 +2540,7 @@ Element.Methods.Simulated = {
   hasAttribute: function(element, attribute) {
     attribute = Element._attributeTranslations.has[attribute] || attribute;
     var node = $(element).getAttributeNode(attribute);
-    return node && node.specified;
+    return !!(node && node.specified);
   }
 };
 
@@ -2530,9 +2549,9 @@ Element.Methods.ByTag = { };
 Object.extend(Element, Element.Methods);
 
 if (!Prototype.BrowserFeatures.ElementExtensions &&
-    document.createElement('div').__proto__) {
+    document.createElement('div')['__proto__']) {
   window.HTMLElement = { };
-  window.HTMLElement.prototype = document.createElement('div').__proto__;
+  window.HTMLElement.prototype = document.createElement('div')['__proto__'];
   Prototype.BrowserFeatures.ElementExtensions = true;
 }
 
@@ -2547,7 +2566,7 @@ Element.extend = (function() {
         element.nodeType != 1 || element == window) return element;
 
     var methods = Object.clone(Methods),
-      tagName = element.tagName, property, value;
+      tagName = element.tagName.toUpperCase(), property, value;
 
     // extend methods for specific tags
     if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
@@ -2643,7 +2662,7 @@ Element.addMethods = function(methods) {
     if (window[klass]) return window[klass];
 
     window[klass] = { };
-    window[klass].prototype = document.createElement(tagName).__proto__;
+    window[klass].prototype = document.createElement(tagName)['__proto__'];
     return window[klass];
   }
 
@@ -2669,12 +2688,18 @@ Element.addMethods = function(methods) {
 
 document.viewport = {
   getDimensions: function() {
-    var dimensions = { };
-    var B = Prototype.Browser;
+    var dimensions = { }, B = Prototype.Browser;
     $w('width height').each(function(d) {
       var D = d.capitalize();
-      dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] :
-        (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D];
+      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;
   },
@@ -2693,14 +2718,24 @@ document.viewport = {
       window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
   }
 };
-/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
+/* 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();
-    this.compileMatcher();
+
+    if (this.shouldUseSelectorsAPI()) {
+      this.mode = 'selectorsAPI';
+    } else if (this.shouldUseXPath()) {
+      this.mode = 'xpath';
+      this.compileXPathMatcher();
+    } else {
+      this.mode = "normal";
+      this.compileMatcher();
+    }
+
   },
 
   shouldUseXPath: function() {
@@ -2715,16 +2750,29 @@ var Selector = Class.create({
 
     // XPath can't do namespaced attributes, nor can it read
     // the "checked" property from DOM nodes
-    if ((/(\[[\w-]*?:|:checked)/).test(this.expression))
+    if ((/(\[[\w-]*?:|:checked)/).test(e))
       return false;
 
     return true;
   },
 
-  compileMatcher: function() {
-    if (this.shouldUseXPath())
-      return this.compileXPathMatcher();
+  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;
 
@@ -2742,7 +2790,7 @@ var Selector = Class.create({
         p = ps[i];
         if (m = e.match(p)) {
           this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
-    	      new Template(c[i]).evaluate(m));
+            new Template(c[i]).evaluate(m));
           e = e.replace(m[0], '');
           break;
         }
@@ -2781,8 +2829,27 @@ var Selector = Class.create({
 
   findElements: function(root) {
     root = root || document;
-    if (this.xpath) return document._getElementsByXPath(this.xpath, root);
-    return this.matcher(root);
+    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) {
@@ -2873,10 +2940,10 @@ Object.extend(Selector, {
       '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 or translate(text(), ' \t\r\n', '') = '')]",
+      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
       'checked':     "[@checked]",
-      'disabled':    "[@disabled]",
-      'enabled':     "[not(@disabled)]",
+      '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;
@@ -2968,7 +3035,7 @@ Object.extend(Selector, {
     className:    /^\.([\w\-\*]+)(\b|$)/,
     pseudo:
 /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
-    attrPresence: /^\[([\w]+)\]/,
+    attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
     attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
   },
 
@@ -3081,7 +3148,7 @@ Object.extend(Selector, {
 
     nextElementSibling: function(node) {
       while (node = node.nextSibling)
-	      if (node.nodeType == 1) return node;
+        if (node.nodeType == 1) return node;
       return null;
     },
 
@@ -3270,7 +3337,7 @@ Object.extend(Selector, {
     '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 && !node.innerHTML.match(/^\s*$/))) continue;
+        if (node.tagName == '!' || node.firstChild) continue;
         results.push(node);
       }
       return results;
@@ -3288,7 +3355,8 @@ Object.extend(Selector, {
 
     'enabled': function(nodes, value, root) {
       for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node.disabled) results.push(node);
+        if (!node.disabled && (!node.type || node.type !== 'hidden'))
+          results.push(node);
       return results;
     },
 
@@ -3308,11 +3376,14 @@ Object.extend(Selector, {
   operators: {
     '=':  function(nv, v) { return nv == v; },
     '!=': function(nv, v) { return nv != v; },
-    '^=': function(nv, v) { return nv.startsWith(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() + '-'); }
+    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+     '-').include('-' + (v || "").toUpperCase() + '-'); }
   },
 
   split: function(expression) {
@@ -3386,7 +3457,7 @@ var Form = {
     var data = elements.inject({ }, function(result, element) {
       if (!element.disabled && element.name) {
         key = element.name; value = $(element).getValue();
-        if (value != null && (element.type != 'submit' || (!submitted &&
+        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
@@ -3547,7 +3618,6 @@ Form.Element.Methods = {
 
   disable: function(element) {
     element = $(element);
-    element.blur();
     element.disabled = true;
     return element;
   },
@@ -3587,22 +3657,22 @@ Form.Element.Serializers = {
     else element.value = value;
   },
 
-  select: function(element, index) {
-    if (Object.isUndefined(index))
+  select: function(element, value) {
+    if (Object.isUndefined(value))
       return this[element.type == 'select-one' ?
         'selectOne' : 'selectMany'](element);
     else {
-      var opt, value, single = !Object.isArray(index);
+      var opt, currentValue, single = !Object.isArray(value);
       for (var i = 0, length = element.length; i < length; i++) {
         opt = element.options[i];
-        value = this.optionValue(opt);
+        currentValue = this.optionValue(opt);
         if (single) {
-          if (value == index) {
+          if (currentValue == value) {
             opt.selected = true;
             return;
           }
         }
-        else opt.selected = index.include(value);
+        else opt.selected = value.include(currentValue);
       }
     }
   },
@@ -3773,8 +3843,23 @@ Event.Methods = (function() {
     isRightClick:  function(event) { return isButton(event, 2) },
 
     element: function(event) {
-      var node = Event.extend(event).target;
-      return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
+      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) {
@@ -3785,11 +3870,15 @@ Event.Methods = (function() {
     },
 
     pointer: function(event) {
+      var docElement = document.documentElement,
+      body = document.body || { scrollLeft: 0, scrollTop: 0 };
       return {
         x: event.pageX || (event.clientX +
-          (document.documentElement.scrollLeft || document.body.scrollLeft)),
+          (docElement.scrollLeft || body.scrollLeft) -
+          (docElement.clientLeft || 0)),
         y: event.pageY || (event.clientY +
-          (document.documentElement.scrollTop || document.body.scrollTop))
+          (docElement.scrollTop || body.scrollTop) -
+          (docElement.clientTop || 0))
       };
     },
 
@@ -3834,7 +3923,7 @@ Event.extend = (function() {
     };
 
   } else {
-    Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
+    Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
     Object.extend(Event.prototype, methods);
     return Prototype.K;
   }
@@ -3899,10 +3988,20 @@ Object.extend(Event, (function() {
         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);
diff --git a/lib/Block/tree_menu.php b/lib/Block/tree_menu.php
index c82eaeb..10c52dc 100644
--- a/lib/Block/tree_menu.php
+++ b/lib/Block/tree_menu.php
@@ -4,7 +4,7 @@ $block_name = _("Menu List");
 $block_type = 'tree';
 
 /**
- * $Horde: turba/lib/Block/tree_menu.php,v 1.5.2.4 2008/06/11 17:45:54 mrubinsk Exp $
+ * $Horde: turba/lib/Block/tree_menu.php,v 1.5.2.5 2008/08/11 08:29:21 jan Exp $
  *
  * @package Horde_Block
  */
@@ -22,25 +22,29 @@ class Horde_Block_turba_tree_menu extends Horde_Block {
         $add = Horde::applicationUrl('add.php');
         $icondir = $registry->getImageDir() . '/menu';
 
-        $tree->addNode($parent . '__new',
-                       $parent,
-                       _("New Contact"),
-                       $indent + 1,
-                       false,
-                       array('icon' => 'new.png',
-                             'icondir' => $icondir,
-                             'url' => $add));
-
-        foreach (Turba::getAddressBooks(PERMS_EDIT) as $addressbook => $config) {
-            $tree->addNode($parent . $addressbook . '__new',
-                           $parent . '__new',
-                           sprintf(_("in %s"), $config['title']),
-                           $indent + 2,
+        if ($addSources) {
+            $tree->addNode($parent . '__new',
+                           $parent,
+                           _("New Contact"),
+                           $indent + 1,
                            false,
                            array('icon' => 'new.png',
                                  'icondir' => $icondir,
-                                 'url' => Util::addParameter($add, array('source' => $addressbook))));
+                                 'url' => $add));
+
+            foreach ($addSources as $addressbook => $config) {
+                $tree->addNode($parent . $addressbook . '__new',
+                               $parent . '__new',
+                               sprintf(_("in %s"), $config['title']),
+                               $indent + 2,
+                               false,
+                               array('icon' => 'new.png',
+                                     'icondir' => $icondir,
+                                     'url' => Util::addParameter($add, array('source' => $addressbook))));
+            }
+        }
 
+        foreach (Turba::getAddressBooks() as $addressbook => $config) {
             if (!empty($config['browse'])) {
                 $tree->addNode($parent . $addressbook,
                                $parent,
diff --git a/lib/Driver.php b/lib/Driver.php
index 226a199..a138d71 100644
--- a/lib/Driver.php
+++ b/lib/Driver.php
@@ -4,7 +4,7 @@
  * various directory search drivers.  It includes functions for searching,
  * adding, removing, and modifying directory entries.
  *
- * $Horde: turba/lib/Driver.php,v 1.57.2.60 2008/06/12 22:16:44 jan Exp $
+ * $Horde: turba/lib/Driver.php,v 1.57.2.83 2008/10/28 23:40:38 jan Exp $
  *
  * @author  Chuck Hagenbuch <chuck at horde.org>
  * @author  Jon Parise <jon at csh.rit.edu>
@@ -65,12 +65,19 @@ class Turba_Driver {
     var $approximate = array();
 
     /**
-     * Whether this source stores one address book, or multiple private address
-     * books.
+     * The name of a field to store contact list names in if not the default.
      *
-     * @var boolean
+     * @var string
+     */
+    var $listNameField = null;
+
+    /**
+     * The name of a field to use as an alternative to the name field if that
+     * one is empty.
+     *
+     * @var string
      */
-    var $public = false;
+    var $alternativeName = null;
 
     /**
      * Hash holding the driver's additional parameters.
@@ -94,14 +101,6 @@ class Turba_Driver {
     var $_count = null;
 
     /**
-     * Hold name of field to store contact list names in if not
-     * the default.
-     *
-     * @var string
-     */
-     var $_listNameField = null;
-
-    /**
      * Hold the value for the owner of this address book.
      *
      * @var string
@@ -142,6 +141,26 @@ class Turba_Driver {
     }
 
     /**
+     * Returns the attributes that are blob types.
+     *
+     * @return array  List of blob attributes in the array keys.
+     */
+    function getBlobs()
+    {
+        global $attributes;
+
+        $blobs = array();
+        foreach (array_keys($this->fields) as $attribute) {
+            if (isset($attributes[$attribute]) &&
+                $attributes[$attribute]['type'] == 'image') {
+                $blobs[$attribute] = true;
+            }
+        }
+
+        return $blobs;
+    }
+
+    /**
      * Translates the keys of the first hash from the generalized Turba
      * attributes to the driver-specific fields. The translation is based on
      * the contents of $this->map.
@@ -152,6 +171,17 @@ class Turba_Driver {
      */
     function toDriverKeys($hash)
     {
+        /* Handle category. */
+        if (!empty($hash['category']) &&
+            $GLOBALS['attributes']['category']['type'] == 'category') {
+            if (!empty($hash['category']['new'])) {
+                require_once 'Horde/Prefs/CategoryManager.php';
+                $cManager = new Prefs_CategoryManager();
+                $cManager->add($hash['category']['value']);
+            }
+            $hash['category'] = $hash['category']['value'];
+        }
+
         // Add composite fields to $hash if at least one field part exists
         // and the composite field will be saved to storage.
         // Otherwise composite fields won't be computed during an import.
@@ -170,10 +200,10 @@ class Turba_Driver {
             }
         }
 
-        if (!empty($hash['name']) && !empty($this->_listNameField) &&
+        if (!empty($hash['name']) && !empty($this->listNameField) &&
             !empty($hash['__type']) && is_array($this->map['name']) &&
             $hash['__type'] == 'Group') {
-                $hash[$this->_listNameField] = $hash['name'];
+                $hash[$this->listNameField] = $hash['name'];
                 unset($hash['name']);
         }
 
@@ -436,8 +466,8 @@ class Turba_Driver {
                      $search_type = 'AND', $return_fields = array(),
                      $custom_strict = array(), $match_begin = false)
     {
-        /* If we are not using Horde_Share, enfore the requirement that the
-           current user must be the owner of the addressbook. */
+        /* If we are not using Horde_Share, enforce the requirement that the
+         * current user must be the owner of the addressbook. */
         $search_criteria['__owner'] = $this->getContactOwner();
         $strict_fields = array($this->toDriver('__owner') => true);
 
@@ -575,9 +605,24 @@ class Turba_Driver {
             ++$t_object_end->mday;
             $t_object_end->correct();
             $key = $ob->getValue('__key');
-            $title = sprintf(_("%s of %s"), $GLOBALS['attributes'][$category]['label'],
+
+            // Calculate the age of the time object
+            if ($start->year == $end->year) {
+                $age = $start->year - $t_object->year;
+            } elseif ($t_object->month <= $end->month) {
+                // t_object must be in later year
+                $age = $end->year - $t_object->year;
+            } else {
+                // t_object must be in earlier year
+                $age = $start->year - $t_object->year;
+            }
+
+            $title = sprintf(_("%d. %s of %s"),
+                             $age,
+                             $GLOBALS['attributes'][$category]['label'],
                              $ob->getValue('name'));
 
+
             $t_objects[] = array(
                 'id' => $key,
                 'title' => $title,
@@ -645,7 +690,8 @@ class Turba_Driver {
     {
         $objects = $this->_read($this->map['__key'], $objectIds,
                                 $this->getContactOwner(),
-                                array_values($this->fields));
+                                array_values($this->fields),
+                                $this->toDriverKeys($this->getBlobs()));
         if (is_a($objects, 'PEAR_Error')) {
             return $objects;
         }
@@ -730,7 +776,7 @@ class Turba_Driver {
         $uid = $attributes['__uid'];
 
         $attributes = $this->toDriverKeys($attributes);
-        $result = $this->_add($attributes);
+        $result = $this->_add($attributes, $this->toDriverKeys($this->getBlobs()));
         if (is_a($result, 'PEAR_Error')) {
             return $result;
         }
@@ -802,11 +848,11 @@ class Turba_Driver {
      */
     function save($object)
     {
-        $attributes = $this->toDriverKeys($object->getAttributes());
-        $key = $this->toDriverKeys(array('__key' => $object->getValue('__key')));
-        list($object_key, $object_id) = each($key);
+        list($object_key, $object_id) = each($this->toDriverKeys(array('__key' => $object->getValue('__key'))));
 
-        $object_id = $this->_save($object_key, $object_id, $attributes);
+        $object_id = $this->_save($object_key, $object_id,
+                                  $this->toDriverKeys($object->getAttributes()),
+                                  $this->toDriverKeys($this->getBlobs()));
         if (is_a($object_id, 'PEAR_Error')) {
             return $object_id;
         }
@@ -897,6 +943,9 @@ class Turba_Driver {
         $geo = null;
 
         foreach ($hash as $key => $val) {
+            if (!strlen($val)) {
+                continue;
+            }
             if ($version != '2.1') {
                 $val = String::convertCharset($val, NLS::getCharset(), 'utf-8');
             }
@@ -912,6 +961,28 @@ class Turba_Driver {
                                      MIME::is8bit($val) ? $charset : array());
                 break;
 
+            case 'homeAddress':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('LABEL', $val, array('HOME' => null));
+                } else {
+                    $vcard->setAttribute('LABEL', $val, array('TYPE' => 'HOME'));
+                }
+                break;
+            case 'workAddress':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('LABEL', $val, array('HOME' => null));
+                } else {
+                    $vcard->setAttribute('LABEL', $val, array('TYPE' => 'WORK'));
+                }
+                break;
+            case 'otherAddress':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('LABEL', $val);
+                } else {
+                    $vcard->setAttribute('LABEL', $val);
+                }
+                break;
+
             case 'phone':
                 if ($version == '2.1') {
                     $vcard->setAttribute('TEL', $val);
@@ -933,7 +1004,6 @@ class Turba_Driver {
                     $vcard->setAttribute('TEL', $val, array('TYPE' => 'WORK'));
                 }
                 break;
-
             case 'cellPhone':
                 if ($version == '2.1') {
                     $vcard->setAttribute('TEL', $val, array('CELL' => null));
@@ -1063,7 +1133,6 @@ class Turba_Driver {
                                          array('TYPE' => 'WORK'));
                 }
                 break;
-
             case 'emails':
                 $emails = explode(',', $val);
                 foreach ($emails as $email) {
@@ -1076,7 +1145,6 @@ class Turba_Driver {
                 $vcard->setAttribute('TITLE', $val,
                                      MIME::is8bit($val) ? $charset : array());
                 break;
-
             case 'role':
                 $vcard->setAttribute('ROLE', $val,
                                      MIME::is8bit($val) ? $charset : array());
@@ -1169,11 +1237,22 @@ class Turba_Driver {
                    }
                 }
                 break;
+
+            case 'photo':
+            case 'logo':
+                $params = array('ENCODING' => 'b');
+                if (isset($hash[$key . 'type'])) {
+                    $params['TYPE'] = $hash[$key . 'type'];
+                }
+                $vcard->setAttribute(String::upper($key),
+                                     base64_encode($val),
+                                     $params);
+                break;
             }
         }
 
         // No explicit firstname/lastname in data source: we have to guess.
-        if (!isset($hash['lastname'])) {
+        if (!isset($hash['lastname']) && isset($hash['name'])) {
             $i = strpos($hash['name'], ',');
             if (is_int($i)) {
                 // Assume Last, First
@@ -1216,15 +1295,17 @@ class Turba_Driver {
         if (isset($hash['department'])) {
             $org[] = $hash['department'];
         }
-        $val = implode(';', $org);
-        if ($version != '2.1') {
-            $val = String::convertCharset($val, NLS::getCharset(), 'utf-8');
-            $org = String::convertCharset($org, NLS::getCharset(), 'utf-8');
+        if (count($org)) {
+            $val = implode(';', $org);
+            if ($version != '2.1') {
+                $val = String::convertCharset($val, NLS::getCharset(), 'utf-8');
+                $org = String::convertCharset($org, NLS::getCharset(), 'utf-8');
+            }
+            $vcard->setAttribute('ORG', $val, MIME::is8bit($val) ? $charset : array(), false, $org);
         }
-        $vcard->setAttribute('ORG', $val, MIME::is8bit($val) ? $charset : array(), false, $org);
 
         if (isset($hash['commonAddress']) || isset($hash['commonStreet']) ||
-            isset($hash['commonPOBox']) || isset($hash['commonExtend']) ||
+            isset($hash['commonPOBox']) || isset($hash['commonExtended']) ||
             isset($hash['commonStreet']) || isset($hash['commonCity']) ||
             isset($hash['commonProvince']) ||
             isset($hash['commonPostalCode']) || isset($hash['commonCountry'])) {
@@ -1239,8 +1320,8 @@ class Turba_Driver {
             $a = array(
                 VCARD_ADR_POB      => isset($hash['commonPOBox'])
                     ? $hash['commonPOBox'] : '',
-                VCARD_ADR_EXTEND   => isset($hash['commonExtend'])
-                    ? $hash['commonExtend'] : '',
+                VCARD_ADR_EXTEND   => isset($hash['commonExtended'])
+                    ? $hash['commonExtended'] : '',
                 VCARD_ADR_STREET   => isset($hash['commonStreet'])
                     ? $hash['commonStreet'] : '',
                 VCARD_ADR_LOCALITY => isset($hash['commonCity'])
@@ -1250,7 +1331,7 @@ class Turba_Driver {
                 VCARD_ADR_POSTCODE => isset($hash['commonPostalCode'])
                     ? $hash['commonPostalCode'] : '',
                 VCARD_ADR_COUNTRY  => isset($hash['commonCountry'])
-                    ? $hash['commonCountry'] : '',
+                    ? Turba_Driver::getCountry($hash['commonCountry']) : '',
             );
 
             $val = implode(';', $a);
@@ -1268,7 +1349,7 @@ class Turba_Driver {
         }
 
         if (isset($hash['homeAddress']) || isset($hash['homeStreet']) ||
-            isset($hash['homePOBox']) || isset($hash['homeExtend']) ||
+            isset($hash['homePOBox']) || isset($hash['homeExtended']) ||
             isset($hash['homeStreet']) || isset($hash['homeCity']) ||
             isset($hash['homeProvince']) || isset($hash['homePostalCode']) ||
             isset($hash['homeCountry'])) {
@@ -1278,8 +1359,8 @@ class Turba_Driver {
             $a = array(
                 VCARD_ADR_POB      => isset($hash['homePOBox'])
                     ? $hash['homePOBox'] : '',
-                VCARD_ADR_EXTEND   => isset($hash['homeExtend'])
-                    ? $hash['homeExtend'] : '',
+                VCARD_ADR_EXTEND   => isset($hash['homeExtended'])
+                    ? $hash['homeExtended'] : '',
                 VCARD_ADR_STREET   => isset($hash['homeStreet'])
                     ? $hash['homeStreet'] : '',
                 VCARD_ADR_LOCALITY => isset($hash['homeCity'])
@@ -1289,7 +1370,7 @@ class Turba_Driver {
                 VCARD_ADR_POSTCODE => isset($hash['homePostalCode'])
                     ? $hash['homePostalCode'] : '',
                 VCARD_ADR_COUNTRY  => isset($hash['homeCountry'])
-                    ? $hash['homeCountry'] : '',
+                    ? Turba_Driver::getCountry($hash['homeCountry']) : '',
             );
 
             $val = implode(';', $a);
@@ -1307,7 +1388,7 @@ class Turba_Driver {
         }
 
         if (isset($hash['workAddress']) || isset($hash['workStreet']) ||
-            isset($hash['workPOBox']) || isset($hash['workExtend']) ||
+            isset($hash['workPOBox']) || isset($hash['workExtended']) ||
             isset($hash['workStreet']) || isset($hash['workCity']) ||
             isset($hash['workProvince']) || isset($hash['workPostalCode']) ||
             isset($hash['workCountry'])) {
@@ -1317,8 +1398,8 @@ class Turba_Driver {
             $a = array(
                 VCARD_ADR_POB      => isset($hash['workPOBox'])
                     ? $hash['workPOBox'] : '',
-                VCARD_ADR_EXTEND   => isset($hash['workExtend'])
-                    ? $hash['workExtend'] : '',
+                VCARD_ADR_EXTEND   => isset($hash['workExtended'])
+                    ? $hash['workExtended'] : '',
                 VCARD_ADR_STREET   => isset($hash['workStreet'])
                     ? $hash['workStreet'] : '',
                 VCARD_ADR_LOCALITY => isset($hash['workCity'])
@@ -1328,7 +1409,7 @@ class Turba_Driver {
                 VCARD_ADR_POSTCODE => isset($hash['workPostalCode'])
                     ? $hash['workPostalCode'] : '',
                 VCARD_ADR_COUNTRY  => isset($hash['workCountry'])
-                    ? $hash['workCountry'] : '',
+                    ? Turba_Driver::getCountry($hash['workCountry']) : '',
             );
 
             $val = implode(';', $a);
@@ -1349,6 +1430,24 @@ class Turba_Driver {
     }
 
     /**
+     * Returns the (localized) country name.
+     *
+     * @param string $country  The two-letter country code.
+     *
+     * @return string  The country name or the country code if a name cannot be
+     *                 found.
+     */
+    function getCountry($country)
+    {
+        static $countries;
+        if (!isset($countries)) {
+            include 'Horde/NLS/countries.php';
+        }
+
+        return isset($countries[$country]) ? $countries[$country] : $country;
+    }
+
+    /**
      * Function to convert a Horde_iCalendar_vcard object into a Turba
      * Object Hash with Turba attributes suitable as a parameter for add().
      *
@@ -1403,16 +1502,15 @@ class Turba_Driver {
 
             // We use LABEL but also support ADR.
             case 'LABEL':
-                if (isset($item['params']['HOME'])) {
+                if (isset($item['params']['HOME']) && !isset($hash['homeAddress'])) {
                     $hash['homeAddress'] = $item['value'];
-                } elseif (isset($item['params']['WORK'])) {
+                } elseif (isset($item['params']['WORK']) && !isset($hash['workAddress'])) {
                     $hash['workAddress'] = $item['value'];
-                } else {
+                } elseif (!isset($hash['commonAddress'])) {
                     $hash['commonAddress'] = $item['value'];
                 }
                 break;
 
-            // For vCard 3.0.
             case 'ADR':
                 if (isset($item['params']['TYPE'])) {
                     if (!is_array($item['params']['TYPE'])) {
@@ -1446,46 +1544,47 @@ class Turba_Driver {
                         $prefix = 'common';
                     }
 
-                    if ($prefix) {
-                        $hash[$prefix . 'Address'] = '';
+                    if (isset($hash[$prefix . 'Address'])) {
+                        continue;
+                    }
 
-                        if (!empty($address[VCARD_ADR_STREET])) {
-                            $hash[$prefix . 'Street'] = $address[VCARD_ADR_STREET];
-                            $hash[$prefix . 'Address'] .= $hash[$prefix . 'Street'] . "\n";
-                        }
-                        if (!empty($address[VCARD_ADR_EXTEND])) {
-                            $hash[$prefix . 'Extend'] = $address[VCARD_ADR_EXTEND];
-                            $hash[$prefix . 'Address'] .= $hash[$prefix . 'Extend'] . "\n";
-                        }
-                        if (!empty($address[VCARD_ADR_POB])) {
-                            $hash[$prefix . 'POBox'] = $address[VCARD_ADR_POB];
-                            $hash[$prefix . 'Address'] .= $hash[$prefix . 'POBox'] . "\n";
-                        }
-                        if (!empty($address[VCARD_ADR_LOCALITY])) {
-                            $hash[$prefix . 'City'] = $address[VCARD_ADR_LOCALITY];
-                            $hash[$prefix . 'Address'] .= $hash[$prefix . 'City'];
-                        }
-                        if (!empty($address[VCARD_ADR_REGION])) {
-                            $hash[$prefix . 'Province'] = $address[VCARD_ADR_REGION];
-                            $hash[$prefix . 'Address'] .= ', ' . $hash[$prefix . 'Province'];
-                        }
-                        if (!empty($address[VCARD_ADR_POSTCODE])) {
-                            $hash[$prefix . 'PostalCode'] = $address[VCARD_ADR_POSTCODE];
-                            $hash[$prefix . 'Address'] .= ' ' . $hash[$prefix . 'PostalCode'];
-                        }
-                        if (!empty($address[VCARD_ADR_COUNTRY])) {
-                            $hash[$prefix . 'Address'] .= "\n" . $address[VCARD_ADR_COUNTRY];
-                            include 'Horde/NLS/countries.php';
-                            $country = array_search($address[VCARD_ADR_COUNTRY], $countries);
-                            if ($country !== false) {
-                                $hash[$prefix . 'Country'] = $country;
-                            } else {
-                                $hash[$prefix . 'Country'] = $address[VCARD_ADR_COUNTRY];
-                            }
-                        }
+                    $hash[$prefix . 'Address'] = '';
 
-                        $hash[$prefix . 'Address'] = trim($hash[$prefix . 'Address']);
+                    if (!empty($address[VCARD_ADR_STREET])) {
+                        $hash[$prefix . 'Street'] = $address[VCARD_ADR_STREET];
+                        $hash[$prefix . 'Address'] .= $hash[$prefix . 'Street'] . "\n";
+                    }
+                    if (!empty($address[VCARD_ADR_EXTEND])) {
+                        $hash[$prefix . 'Extended'] = $address[VCARD_ADR_EXTEND];
+                        $hash[$prefix . 'Address'] .= $hash[$prefix . 'Extended'] . "\n";
+                    }
+                    if (!empty($address[VCARD_ADR_POB])) {
+                        $hash[$prefix . 'POBox'] = $address[VCARD_ADR_POB];
+                        $hash[$prefix . 'Address'] .= $hash[$prefix . 'POBox'] . "\n";
                     }
+                    if (!empty($address[VCARD_ADR_LOCALITY])) {
+                        $hash[$prefix . 'City'] = $address[VCARD_ADR_LOCALITY];
+                        $hash[$prefix . 'Address'] .= $hash[$prefix . 'City'];
+                    }
+                    if (!empty($address[VCARD_ADR_REGION])) {
+                        $hash[$prefix . 'Province'] = $address[VCARD_ADR_REGION];
+                        $hash[$prefix . 'Address'] .= ', ' . $hash[$prefix . 'Province'];
+                    }
+                    if (!empty($address[VCARD_ADR_POSTCODE])) {
+                        $hash[$prefix . 'PostalCode'] = $address[VCARD_ADR_POSTCODE];
+                        $hash[$prefix . 'Address'] .= ' ' . $hash[$prefix . 'PostalCode'];
+                    }
+                    if (!empty($address[VCARD_ADR_COUNTRY])) {
+                        include 'Horde/NLS/countries.php';
+                        $country = array_search($address[VCARD_ADR_COUNTRY], $countries);
+                        if ($country === false) {
+                            $country = $address[VCARD_ADR_COUNTRY];
+                        }
+                        $hash[$prefix . 'Country'] = $country;
+                        $hash[$prefix . 'Address'] .= "\n" . $address[VCARD_ADR_COUNTRY];
+                    }
+
+                    $hash[$prefix . 'Address'] = trim($hash[$prefix . 'Address']);
                 }
                 break;
 
@@ -1520,14 +1619,17 @@ class Turba_Driver {
 
             case 'TEL':
                 if (isset($item['params']['FAX'])) {
-                    if (isset($item['params']['WORK'])) {
+                    if (isset($item['params']['WORK']) &&
+                        !isset($hash['workFax'])) {
                         $hash['workFax'] = $item['value'];
-                    } elseif (isset($item['params']['HOME'])) {
+                    } elseif (isset($item['params']['HOME']) &&
+                              !isset($hash['homeFax'])) {
                         $hash['homeFax'] = $item['value'];
-                    } else {
+                    } elseif (!isset($hash['fax'])) {
                         $hash['fax'] = $item['value'];
                     }
-                } elseif (isset($item['params']['PAGER'])) {
+                } elseif (isset($item['params']['PAGER']) &&
+                          !isset($hash['pager'])) {
                     $hash['pager'] = $item['value'];
                 } elseif (isset($item['params']['TYPE'])) {
                     if (!is_array($item['params']['TYPE'])) {
@@ -1535,88 +1637,115 @@ class Turba_Driver {
                     }
                     // For vCard 3.0.
                     if (in_array('CELL', $item['params']['TYPE'])) {
-                        if (in_array('HOME', $item['params']['TYPE'])) {
+                        if (in_array('HOME', $item['params']['TYPE']) &&
+                            !isset($hash['homeCellPhone'])) {
                             $hash['homeCellPhone'] = $item['value'];
-                        } elseif (in_array('WORK', $item['params']['TYPE'])) {
+                        } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                                  !isset($hash['workCellPhone'])) {
                             $hash['workCellPhone'] = $item['value'];
-                        } else {
+                        } elseif (!isset($hash['cellPhone'])) {
                             $hash['cellPhone'] = $item['value'];
                         }
                     } elseif (in_array('FAX', $item['params']['TYPE'])) {
-                        if (in_array('HOME', $item['params']['TYPE'])) {
+                        if (in_array('HOME', $item['params']['TYPE']) &&
+                            !isset($hash['homeFax'])) {
                             $hash['homeFax'] = $item['value'];
-                        } elseif (in_array('WORK', $item['params']['TYPE'])) {
+                        } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                                  !isset($hash['workFax'])) {
                             $hash['workFax'] = $item['value'];
-                        } else {
+                        } elseif (!isset($hash['fax'])) {
                             $hash['fax'] = $item['value'];
                         }
                     } elseif (in_array('VIDEO', $item['params']['TYPE'])) {
-                        if (in_array('HOME', $item['params']['TYPE'])) {
+                        if (in_array('HOME', $item['params']['TYPE']) &&
+                            !isset($hash['homeVideoCall'])) {
                             $hash['homeVideoCall'] = $item['value'];
-                        } elseif (in_array('WORK', $item['params']['TYPE'])) {
+                        } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                                  !isset($hash['workVideoCall'])) {
                             $hash['workVideoCall'] = $item['value'];
-                        } else {
+                        } elseif (!isset($hash['videoCall'])) {
                             $hash['videoCall'] = $item['value'];
                         }
-                    } elseif (in_array('PAGER', $item['params']['TYPE'])) {
+                    } elseif (in_array('PAGER', $item['params']['TYPE']) &&
+                              !isset($hash['pager'])) {
                         $hash['pager'] = $item['value'];
-                    } elseif (in_array('WORK', $item['params']['TYPE'])) {
+                    } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                              !isset($hash['workPhone'])) {
                         $hash['workPhone'] = $item['value'];
-                    } elseif (in_array('HOME', $item['params']['TYPE'])) {
+                    } elseif (in_array('HOME', $item['params']['TYPE']) &&
+                              !isset($hash['homePhone'])) {
                         $hash['homePhone'] = $item['value'];
                     }
                 } elseif (isset($item['params']['CELL'])) {
-                    if (isset($item['params']['WORK'])) {
+                    if (isset($item['params']['WORK']) &&
+                        !isset($hash['workCellPhone'])) {
                         $hash['workCellPhone'] = $item['value'];
-                    } elseif (isset($item['params']['HOME'])) {
+                    } elseif (isset($item['params']['HOME']) &&
+                              !isset($hash['homeCellPhone'])) {
                         $hash['homeCellPhone'] = $item['value'];
-                    } else {
+                    } elseif (!isset($hash['cellPhone'])) {
                         $hash['cellPhone'] = $item['value'];
                     }
                 } elseif (isset($item['params']['VIDEO'])) {
-                    if (isset($item['params']['WORK'])) {
+                    if (isset($item['params']['WORK']) &&
+                        !isset($hash['workVideoCall'])) {
                         $hash['workVideoCall'] = $item['value'];
-                    } elseif (isset($item['params']['HOME'])) {
+                    } elseif (isset($item['params']['HOME']) &&
+                              !isset($hash['homeVideoCall'])) {
                         $hash['homeVideoCall'] = $item['value'];
-                    } else {
+                    } elseif (!isset($hash['homeVideoCall'])) {
                         $hash['videoCall'] = $item['value'];
                     }
                 } elseif (count($item['params']) <= 1 ||
-                          (count($item['params']) <= 2 &&
-                           isset($item['params']['VOICE']))) {
+                          isset($item['params']['VOICE'])) {
                     // There might be e.g. SAT;WORK which must not overwrite
                     // WORK.
-                    if (isset($item['params']['WORK'])) {
+                    if (isset($item['params']['WORK']) &&
+                        !isset($hash['workPhone'])) {
                         $hash['workPhone'] = $item['value'];
-                    } elseif (isset($item['params']['HOME'])) {
+                    } elseif (isset($item['params']['HOME']) &&
+                              !isset($hash['homePhone'])) {
                         $hash['homePhone'] = $item['value'];
-                    } elseif (count($item['params']) == 0 ||
-                              (count($item['params']) == 1 &&
-                               isset($item['params']['VOICE']))) {
+                    } elseif ((count($item['params']) == 0 ||
+                               (count($item['params']) == 1 &&
+                                isset($item['params']['VOICE']))) &&
+                              !isset($hash['phone'])) {
                         $hash['phone'] = $item['value'];
                     }
                 }
                 break;
 
             case 'EMAIL':
-                if (isset($item['params']['PREF']) || !isset($hash['email'])) {
-                    $hash['email'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
-                } elseif (isset($item['params']['HOME'])) {
+                $email_set = false;
+                if (isset($item['params']['HOME']) &&
+                    (!isset($hash['homeEmail']) ||
+                     isset($item['params']['PREF']))) {
                     $hash['homeEmail'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
-                } elseif (isset($item['params']['WORK'])) {
+                    $email_set = true;
+                } elseif (isset($item['params']['WORK']) &&
+                          (!isset($hash['workEmail']) ||
+                           isset($item['params']['PREF']))) {
                     $hash['workEmail'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
+                    $email_set = true;
                 } elseif (isset($item['params']['TYPE'])) {
                     if (!is_array($item['params']['TYPE'])) {
                         $item['params']['TYPE'] = array($item['params']['TYPE']);
                     }
-                    if (in_array('HOME', $item['params']['TYPE'])) {
+                    if (in_array('HOME', $item['params']['TYPE']) &&
+                        (!isset($hash['homeEmail']) ||
+                         in_array('PREF', $item['params']['TYPE']))) {
                         $hash['homeEmail'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
-                    } elseif (in_array('WORK', $item['params']['TYPE'])) {
+                        $email_set = true;
+                    } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                              (!isset($hash['workEmail']) ||
+                         in_array('PREF', $item['params']['TYPE']))) {
                         $hash['workEmail'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
-                    } else {
-                        $hash['email'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
+                        $email_set = true;
                     }
-                } else {
+                }
+                if (!$email_set &&
+                    (!isset($hash['email']) ||
+                     isset($item['params']['PREF']))) {
                     $hash['email'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
                 }
 
@@ -1652,11 +1781,13 @@ class Turba_Driver {
                 break;
 
             case 'URL':
-                if (isset($item['params']['HOME'])) {
+                if (isset($item['params']['HOME']) &&
+                    !isset($hash['homeWebsite'])) {
                     $hash['homeWebsite'] = $item['value'];
-                } elseif (isset($item['params']['WORK'])) {
+                } elseif (isset($item['params']['WORK']) &&
+                          !isset($hash['workWebsite'])) {
                     $hash['workWebsite'] = $item['value'];
-                } else {
+                } elseif (!isset($hash['website'])) {
                     $hash['website'] = $item['value'];
                 }
                 break;
@@ -1665,14 +1796,37 @@ class Turba_Driver {
                 $hash['birthday'] = $item['value']['year'] . '-' . $item['value']['month'] . '-' .  $item['value']['mday'];
                 break;
 
+            case 'PHOTO':
+            case 'LOGO':
+                if (isset($item['params']['VALUE']) &&
+                    String::lower($item['params']['VALUE']) == 'uri') {
+                    // No support for URIs yet.
+                    break;
+                }
+                if (!isset($item['params']['ENCODING']) ||
+                    (String::lower($item['params']['ENCODING']) != 'b' &&
+                     String::upper($item['params']['ENCODING']) != 'BASE64')) {
+                    // Invalid property.
+                    break;
+                }
+                $type = String::lower($item['name']);
+                $hash[$type] = base64_decode($item['value']);
+                if (isset($item['params']['TYPE'])) {
+                    $hash[$type . 'type'] = $item['params']['TYPE'];
+                }
+                break;
+
             case 'X-SIP':
-                if (isset($item['params']['POC'])) {
+                if (isset($item['params']['POC']) &&
+                    !isset($hash['ptt'])) {
                     $hash['ptt'] = $item['value'];
-                } elseif (isset($item['params']['VOIP'])) {
+                } elseif (isset($item['params']['VOIP']) &&
+                          !isset($hash['voip'])) {
                     $hash['voip'] = $item['value'];
-                } elseif (isset($item['params']['SWIS'])) {
+                } elseif (isset($item['params']['SWIS']) &&
+                          !isset($hash['shareView'])) {
                     $hash['shareView'] = $item['value'];
-                } else {
+                } elseif (!isset($hash['sip'])) {
                     $hash['sip'] = $item['value'];
                 }
                 break;
@@ -1854,16 +2008,18 @@ class Turba_Driver {
             $driver->tabs = $config['tabs'];
         }
 
-        /* Store strict and approximate fields. */
+        /* Store remaining fields. */
         if (isset($config['strict'])) {
             $driver->strict = $config['strict'];
         }
         if (isset($config['approximate'])) {
             $driver->approximate = $config['approximate'];
         }
-
-        if (!empty($config['list_name_field'])) {
-            $driver->_listNameField = $config['list_name_field'];
+        if (isset($config['list_name_field'])) {
+            $driver->listNameField = $config['list_name_field'];
+        }
+        if (isset($config['alternative_name'])) {
+            $driver->alternativeName = $config['alternative_name'];
         }
 
         return $driver;
diff --git a/lib/Driver/favourites.php b/lib/Driver/favourites.php
index c54581d..ad17bc9 100644
--- a/lib/Driver/favourites.php
+++ b/lib/Driver/favourites.php
@@ -3,7 +3,7 @@
  * Read-only Turba directory driver implementation for favourite
  * recipients. Relies on the contacts/favouriteRecipients API method.
  *
- * $Horde: turba/lib/Driver/favourites.php,v 1.5.2.2 2008/04/25 04:58:31 chuck Exp $
+ * $Horde: turba/lib/Driver/favourites.php,v 1.5.2.3 2008/08/03 16:50:06 jan Exp $
  *
  * @author  Jan Schneider <jan at horde.org>
  * @since   Turba 2.1
@@ -124,7 +124,7 @@ class Turba_Driver_favourites extends Turba_Driver {
             return PEAR::raiseError(_("No source for favourite recipients exists."));
         }
 
-        $addresses = $registry->call('contacts/favouriteRecipients', $this->_params['limit']);
+        $addresses = $registry->call('contacts/favouriteRecipients', array($this->_params['limit']));
         if (is_a($addresses, 'PEAR_Error')) {
             return $addresses;
         }
diff --git a/lib/Driver/kolab.php b/lib/Driver/kolab.php
index 56a3c86..166c0a6 100644
--- a/lib/Driver/kolab.php
+++ b/lib/Driver/kolab.php
@@ -2,7 +2,7 @@
 /**
  * @package Turba
  *
- * $Horde: turba/lib/Driver/kolab.php,v 1.5.10.21 2008/06/12 22:12:51 jan Exp $
+ * $Horde: turba/lib/Driver/kolab.php,v 1.5.10.23 2008/11/07 13:15:23 wrobel Exp $
  */
 
 /** Kolab support class. */
@@ -184,7 +184,7 @@ class Turba_Driver_kolab extends Turba_Driver {
 /**
  * Horde Turba wrapper to distinguish between both Kolab driver implementations.
  *
- * $Horde: turba/lib/Driver/kolab.php,v 1.5.10.21 2008/06/12 22:12:51 jan Exp $
+ * $Horde: turba/lib/Driver/kolab.php,v 1.5.10.23 2008/11/07 13:15:23 wrobel Exp $
  *
  * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
  *
@@ -742,11 +742,26 @@ class Turba_Driver_kolab_wrapper_new extends Turba_Driver_kolab_wrapper {
         $this->_store = &$this->_kolab->_storage;
 
         /* Fetch the contacts first */
-        $contacts = $this->_store->getObjectArray();
-        if (!$contacts) {
-            $contacts = array();
+        $raw_contacts = $this->_store->getObjectArray();
+        if (!$raw_contacts) {
+            $raw_contacts = array();
+        }
+        $contacts = array();
+        foreach ($raw_contacts as $id => $contact) {
+            if (isset($contact['email'])) {
+                unset($contact['email']);
+            }
+            if (isset($contact['picture'])) {
+                $name = $contact['picture'];
+                if (isset($contact['_attachments'][$name])) {
+                    $contact['photo'] =  $this->_store->_data->getAttachment($contact['_attachments'][$name]['key']);
+                    $contact['phototype'] = $contact['_attachments'][$name]['type'];
+                }
+            }
+
+            $contacts[$id] = $contact;
         }
-        
+
         /* Now we retrieve distribution-lists */
         $result = $this->_store->setObjectType('distribution-list');
         if (is_a($result, 'PEAR_Error')) {
@@ -1073,29 +1088,19 @@ class Turba_Driver_kolab_wrapper_new extends Turba_Driver_kolab_wrapper {
             return $result;
         }
 
-        $group = false;
-        if (isset($attributes['__type']) && $attributes['__type'] == 'Group') {
-            $group = true;
-            $result = $this->_store->setObjectType('distribution-list');
-            if (is_a($result, 'PEAR_Error')) {
-                return $result;
-            }
-            $this->_convertMembers($attributes);
+        $attributes['full-name'] = $attributes['last-name'];
+        if (isset($attributes['middle-names'])) {
+            $attributes['full-name'] = $attributes['middle-names'] . ' ' . $attributes['full-name'];
         }
-
-        $object_id = $this->_store->save($attributes, null);
-        if (is_a($object_id, 'PEAR_Error')) {
-            return $object_id;
+        if (isset($attributes['given-name'])) {
+            $attributes['full-name'] = $attributes['given-name'] . ' ' . $attributes['full-name'];
         }
 
-        if ($group) {
-            $result = $this->_store->setObjectType('contact');
-            if (is_a($result, 'PEAR_Error')) {
-                return $result;
-            }
+        $result = $this->_store($attributes);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
         }
-
-        return $object_id;
+        return true;
     }
 
     /**
@@ -1111,9 +1116,19 @@ class Turba_Driver_kolab_wrapper_new extends Turba_Driver_kolab_wrapper {
         }
 
         if ($object_key != 'uid') {
-            return PEAR::raiseError(sprintf(_("Key for saving must be a UID not %s!"), $object_key));
+            return PEAR::raiseError(sprintf(_("Key for saving must be \'uid\' not %s!"), $object_key));
         }
 
+        return $this->_store($attributes, $object_id);
+    }
+
+    /**
+     * Stores an object in the Kolab message store.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _store($attributes, $object_id = null)
+    {
         $group = false;
         if (isset($attributes['__type']) && $attributes['__type'] == 'Group') {
             $group = true;
@@ -1124,6 +1139,14 @@ class Turba_Driver_kolab_wrapper_new extends Turba_Driver_kolab_wrapper {
             $this->_convertMembers($attributes);
         }
 
+        if (isset($attributes['photo']) && isset($attributes['phototype'])) {
+            $attributes['_attachments']['photo.attachment'] = array('type' => $attributes['phototype'],
+                                                                    'content' => $attributes['photo']);
+            $attributes['picture'] = 'photo.attachment';
+            unset($attributes['photo']);
+            unset($attributes['phototype']);
+        }
+
         $result = $this->_store->save($attributes, $object_id);
         if (is_a($result, 'PEAR_Error')) {
             return $result;
diff --git a/lib/Driver/share.php b/lib/Driver/share.php
index aa6528d..57222a4 100644
--- a/lib/Driver/share.php
+++ b/lib/Driver/share.php
@@ -4,7 +4,7 @@
  * various directory search drivers.  It includes functions for searching,
  * adding, removing, and modifying directory entries.
  *
- * $Horde: turba/lib/Driver/share.php,v 1.11.2.4 2008/02/15 16:44:06 chuck Exp $
+ * $Horde: turba/lib/Driver/share.php,v 1.11.2.6 2008/08/11 16:34:17 jan Exp $
  *
  * @author  Chuck Hagenbuch <chuck at horde.org>
  * @author  Jon Parise <jon at csh.rit.edu>
@@ -116,17 +116,17 @@ class Turba_Driver_share extends Turba_Driver {
      *
      * @return array  Hash containing the search results.
      */
-    function _read($key, $ids, $owner, $fields)
+    function _read($key, $ids, $owner, $fields, $blob_fields = array())
     {
-        return $this->_driver->_read($key, $ids, $owner, $fields);
+        return $this->_driver->_read($key, $ids, $owner, $fields, $blob_fields);
     }
 
     /**
      * Adds the specified object to the SQL database.
      */
-    function _add($attributes)
+    function _add($attributes, $blob_fields = array())
     {
-        return $this->_driver->_add($attributes);
+        return $this->_driver->_add($attributes, $blob_fields);
     }
 
     /**
@@ -155,17 +155,14 @@ class Turba_Driver_share extends Turba_Driver {
      *
      * @return string  The object id, possibly updated.
      */
-    function _save($object_key, $object_id, $attributes)
+    function _save($object_key, $object_id, $attributes, $blob_fields = array())
     {
-        return $this->_driver->_save($object_key, $object_id, $attributes);
+        return $this->_driver->_save($object_key, $object_id, $attributes, $blob_fields);
     }
 
     /**
      * Stub for removing all data for a specific user - to be overridden
      * by child class.
-     *
-     * @TODO This should actually call _deleteAll for the underlying
-     * driver and remove the share.
      */
     function removeUserData($user)
     {
diff --git a/lib/Driver/sql.php b/lib/Driver/sql.php
index e50baaa..5bb64b3 100644
--- a/lib/Driver/sql.php
+++ b/lib/Driver/sql.php
@@ -3,7 +3,7 @@
  * Turba directory driver implementation for PHP's PEAR database abstraction
  * layer.
  *
- * $Horde: turba/lib/Driver/sql.php,v 1.59.10.23 2008/06/09 03:28:07 chuck Exp $
+ * $Horde: turba/lib/Driver/sql.php,v 1.59.10.29 2008/08/12 09:24:50 jan Exp $
  *
  * @author  Jon Parise <jon at csh.rit.edu>
  * @package Turba
@@ -204,7 +204,7 @@ class Turba_Driver_sql extends Turba_Driver {
      *
      * @return array  Hash containing the search results.
      */
-    function _read($key, $ids, $owner, $fields)
+    function _read($key, $ids, $owner, $fields, $blob_fields = array())
     {
         $values = array();
 
@@ -231,8 +231,8 @@ class Turba_Driver_sql extends Turba_Driver {
             $where .= ' AND ' . $this->_params['filter'];
         }
 
-        $query  = 'SELECT ' . implode(', ', $fields) . ' ';
-        $query .= 'FROM ' . $this->_params['table'] . ' WHERE ' . $where;
+        $query  = 'SELECT ' . implode(', ', $fields) . ' FROM '
+            . $this->_params['table'] . ' WHERE ' . $where;
 
         /* Log the query at a DEBUG log level. */
         Horde::logMessage('SQL query by Turba_Driver_sql::_read(): ' . $query,
@@ -246,15 +246,25 @@ class Turba_Driver_sql extends Turba_Driver {
 
         $results = array();
         $iMax = count($fields);
-        if (!is_a($result, 'PEAR_Error')) {
-            foreach ($result as $row) {
-                $entry = array();
-                for ($i=0; $i < $iMax; $i++) {
-                    $field = $fields[$i];
+        foreach ($result as $row) {
+            $entry = array();
+            for ($i = 0; $i < $iMax; $i++) {
+                $field = $fields[$i];
+                if (isset($blob_fields[$field])) {
+                    switch ($this->_db->dbsyntax) {
+                    case 'pgsql':
+                    case 'mssql':
+                        $entry[$field] = pack('H' . strlen($row[$i]), $row[$i]);
+                        break;
+                    default:
+                        $entry[$field] = $row[$i];
+                        break;
+                    }
+                } else {
                     $entry[$field] = $this->_convertFromDriver($row[$i]);
                 }
-                $results[] = $entry;
             }
+            $results[] = $entry;
         }
 
         return $results;
@@ -263,15 +273,24 @@ class Turba_Driver_sql extends Turba_Driver {
     /**
      * Adds the specified object to the SQL database.
      */
-    function _add($attributes)
+    function _add($attributes, $blob_fields = array())
     {
-        $fields = array();
-        $values = array();
+        $fields = $values = array();
         foreach ($attributes as $field => $value) {
             $fields[] = $field;
-            $values[] = $this->_convertToDriver($value);
+            if (!empty($value) && isset($blob_fields[$field])) {
+                switch ($this->_write_db->dbsyntax) {
+                case 'mssql':
+                case 'pgsql':
+                    $values[] = bin2hex($value);
+                    break;
+                default:
+                    $values[] = $value;
+                }
+            } else {
+                $values[] = $this->_convertToDriver($value);
+            }
         }
-
         $query  = 'INSERT INTO ' . $this->_params['table']
             . ' (' . implode(', ', $fields) . ')'
             . ' VALUES (' . str_repeat('?, ', count($values) - 1) . '?)';
@@ -338,16 +357,26 @@ class Turba_Driver_sql extends Turba_Driver {
      *
      * @return string  The object id, possibly updated.
      */
-    function _save($object_key, $object_id, $attributes)
+    function _save($object_key, $object_id, $attributes, $blob_fields = array())
     {
         $where = $object_key . ' = ?';
         unset($attributes[$object_key]);
 
-        $fields = array();
-        $values = array();
+        $fields = $values =  array();
         foreach ($attributes as $field => $value) {
             $fields[] = $field . ' = ?';
-            $values[] = $this->_convertToDriver($value);
+            if (!empty($value) && isset($blob_fields[$field])) {
+                switch ($this->_write_db->dbsyntax) {
+                case 'mssql':
+                case 'pgsql':
+                    $values[] = bin2hex($value);
+                    break;
+                default:
+                    $values[] = $value;
+                }
+            } else {
+                $values[] = $this->_convertToDriver($value);
+            }
         }
 
         $values[] = $object_id;
diff --git a/lib/Forms/AddContact.php b/lib/Forms/AddContact.php
index bd8e5f6..babc7da 100644
--- a/lib/Forms/AddContact.php
+++ b/lib/Forms/AddContact.php
@@ -2,7 +2,7 @@
 /**
  * @package Turba
  *
- * $Horde: turba/lib/Forms/AddContact.php,v 1.9.2.1 2007/12/20 14:34:30 jan Exp $
+ * $Horde: turba/lib/Forms/AddContact.php,v 1.9.2.3 2008/10/25 01:36:42 chuck Exp $
  */
 
 /** Turba_ContactForm */
@@ -68,7 +68,12 @@ class Turba_AddContactForm extends Turba_ContactForm {
         $this->getInfo($this->_vars, $info);
         $source = $info['source'];
         foreach ($info['object'] as $info_key => $info_val) {
-            $this->_contact->setValue($info_key, $info_val);
+            if ($GLOBALS['attributes'][$info_key]['type'] == 'image' && !empty($info_val['file'])) {
+                $this->_contact->setValue($info_key, file_get_contents($info_val['file']));
+                $this->_contact->setValue($info_key . 'type', $info_val['type']);
+            } else {
+                $this->_contact->setValue($info_key, $info_val);
+            }
         }
         $contact = $this->_contact->attributes;
         unset($contact['__owner']);
@@ -78,11 +83,16 @@ class Turba_AddContactForm extends Turba_ContactForm {
         if (is_a($key, 'PEAR_Error')) {
             Horde::logMessage($key, __FILE__, __LINE__, PEAR_LOG_ERR);
         } else {
-            $ob = $driver->getObject($key);
-            if (!is_a($ob, 'PEAR_Error')) {
-                $notification->push(sprintf(_("%s added."), $ob->getValue('name')), 'horde.success');
-                header('Location: ' . (!empty($info['url']) ? $info['url'] : $ob->url('Contact', true)));
-                exit;
+            // Try 3 times to get the new entry. We retry to allow setups like
+            // LDAP replication to work.
+            for ($i = 0; $i < 3; $i++) {
+                $ob = $driver->getObject($key);
+                if (!is_a($ob, 'PEAR_Error')) {
+                    $notification->push(sprintf(_("%s added."), $ob->getValue('name')), 'horde.success');
+                    header('Location: ' . (!empty($info['url']) ? $info['url'] : $ob->url('Contact', true)));
+                    exit;
+                }
+                sleep(1);
             }
             Horde::logMessage($ob, __FILE__, __LINE__, PEAR_LOG_ERR);
         }
diff --git a/lib/Forms/DeleteAddressBook.php b/lib/Forms/DeleteAddressBook.php
index 4641184..fae2552 100644
--- a/lib/Forms/DeleteAddressBook.php
+++ b/lib/Forms/DeleteAddressBook.php
@@ -2,7 +2,7 @@
 /**
  * Horde_Form for deleting address books.
  *
- * $Horde: turba/lib/Forms/DeleteAddressBook.php,v 1.1.2.1 2007/12/24 05:18:00 chuck Exp $
+ * $Horde: turba/lib/Forms/DeleteAddressBook.php,v 1.1.2.2 2008/08/25 17:10:16 jan Exp $
  *
  * See the enclosed file LICENSE for license information (ASL). If you
  * did not receive this file, see http://www.horde.org/licenses/asl.php.
@@ -81,6 +81,12 @@ class Turba_DeleteAddressBookForm extends Horde_Form {
             unset($_SESSION['turba']['source']);
         }
 
+        $abooks = explode("\n", $GLOBALS['prefs']->getValue('addressbooks'));
+        if (($pos = array_search($this->_addressbook->getName(), $abooks)) !== false) {
+            unset($abooks[$pos]);
+            $GLOBALS['prefs']->setValue('addressbooks', implode("\n", $abooks));
+        }
+
         return true;
     }
 
diff --git a/lib/Forms/EditContact.php b/lib/Forms/EditContact.php
index 34d6346..b3499c6 100644
--- a/lib/Forms/EditContact.php
+++ b/lib/Forms/EditContact.php
@@ -2,7 +2,7 @@
 /**
  * @package Turba
  *
- * $Horde: turba/lib/Forms/EditContact.php,v 1.6.2.2 2008/04/17 15:53:54 chuck Exp $
+ * $Horde: turba/lib/Forms/EditContact.php,v 1.6.2.5 2008/08/12 22:05:57 jan Exp $
  */
 
 /** Turba_ContactForm */
@@ -64,7 +64,14 @@ class Turba_EditContactForm extends Turba_ContactForm {
         /* Update the contact. */
         foreach ($info['object'] as $info_key => $info_val) {
             if ($info_key != '__key') {
-                $this->_contact->setValue($info_key, $info_val);
+                if ($GLOBALS['attributes'][$info_key]['type'] == 'image' && !empty($info_val['file'])) {
+                    $this->_contact->setValue($info_key, file_get_contents($info_val['file']));
+                    if (isset($info_val['type'])) {
+                        $this->_contact->setValue($info_key . 'type', $info_val['type']);
+                    }
+                } else {
+                    $this->_contact->setValue($info_key, $info_val);
+                }
             }
         }
 
diff --git a/lib/List.php b/lib/List.php
index 1997a44..dac18f0 100644
--- a/lib/List.php
+++ b/lib/List.php
@@ -3,7 +3,7 @@
  * The Turba_List:: class provides an interface for dealing with a
  * list of Turba_Objects.
  *
- * $Horde: turba/lib/List.php,v 1.41.10.5 2007/12/20 14:34:28 jan Exp $
+ * $Horde: turba/lib/List.php,v 1.41.10.8 2008/08/28 21:24:04 chuck Exp $
  *
  * @author  Chuck Hagenbuch <chuck at horde.org>
  * @author  Jon Parise <jon at csh.rit.edu>
@@ -106,8 +106,13 @@ class Turba_List {
         }
 
         $need_lastname = false;
-        foreach ($order as $sort_order) {
-            if ($sort_order['field'] == 'lastname') {
+        $last_first = $GLOBALS['prefs']->getValue('name_format') == 'last_first';
+        foreach (array_keys($order) as $key) {
+            if ($last_first && $order[$key]['field'] == 'name') {
+                $order[$key]['field'] = 'lastname';
+            }
+            if ($order[$key]['field'] == 'lastname') {
+                $order[$key]['field'] = '__lastname';
                 $need_lastname = true;
                 break;
             }
@@ -118,11 +123,11 @@ class Turba_List {
         } else {
             $sorted_objects = array();
             foreach ($this->objects as $key => $object) {
-                if (!$object->getValue('lastname')) {
-                    $object->setValue(
-                        'lastname',
-                        Turba::guessLastname($object->getValue('name')));
+                $lastname = $object->getValue('lastname');
+                if (!$lastname) {
+                    $lastname = Turba::guessLastname($object->getValue('name'));
                 }
+                $object->setValue('__lastname', $lastname);
                 $sorted_objects[$key] = $object;
             }
         }
diff --git a/lib/ListView.php b/lib/ListView.php
index 1f59365..38c62d4 100644
--- a/lib/ListView.php
+++ b/lib/ListView.php
@@ -3,7 +3,7 @@
  * The Turba_ListView:: class provides an interface for objects that
  * visualize Turba_lists.
  *
- * $Horde: turba/lib/ListView.php,v 1.17.10.19 2008/04/24 03:42:56 mrubinsk Exp $
+ * $Horde: turba/lib/ListView.php,v 1.17.10.21 2008/07/20 08:01:45 jan Exp $
  *
  * @author  Chuck Hagenbuch <chuck at horde.org>
  * @author  Jon Parise <jon at csh.rit.edu>
@@ -305,7 +305,7 @@ class Turba_ListView {
      */
     function getSortInfoForColumn($i)
     {
-        $sortorder = Turba::getPreferredSortOrder($this->columns);
+        $sortorder = Turba::getPreferredSortOrder();
         $column_name = $this->getColumnName($i);
         $i = 0;
         foreach ($sortorder as $sortfield) {
@@ -337,7 +337,7 @@ class Turba_ListView {
     function getSortOrderDescription()
     {
         $description = array();
-        $sortorder = Turba::getPreferredSortOrder($this->columns);
+        $sortorder = Turba::getPreferredSortOrder();
         foreach ($sortorder as $elt) {
             $field = $elt['field'];
             if ($field == 'lastname') {
@@ -389,6 +389,7 @@ class Turba_ListView {
     {
         ob_start();
         $width = floor(90 / (count($this->columns) + 1));
+        @list($own_source, $own_id) = explode(';', $GLOBALS['prefs']->getValue('own_contact'));
 
         include TURBA_TEMPLATES . '/browse/column_headers.inc';
 
diff --git a/lib/Object.php b/lib/Object.php
index bc49f29..57f21f3 100644
--- a/lib/Object.php
+++ b/lib/Object.php
@@ -3,7 +3,7 @@
  * The Turba_Object:: class provides a base implementation for Turba
  * objects - people, groups, restaurants, etc.
  *
- * $Horde: turba/lib/Object.php,v 1.17.10.8 2008/03/10 09:17:35 jan Exp $
+ * $Horde: turba/lib/Object.php,v 1.17.10.10 2008/11/07 13:20:23 wrobel Exp $
  *
  * @author  Chuck Hagenbuch <chuck at horde.org>
  * @author  Jon Parise <jon at csh.rit.edu>
@@ -118,8 +118,14 @@ class Turba_Object {
                 $args[] = $this->getValue($field);
             }
             return trim(vsprintf($this->driver->map[$attribute]['format'], $args), " \t\n\r\0\x0B,");
+        } elseif (!isset($this->attributes[$attribute])) {
+            return null;
+        } elseif (isset($GLOBALS['attributes'][$attribute]) &&
+                  $GLOBALS['attributes'][$attribute]['type'] == 'image') {
+            return array('load' => array('file' => basename(tempnam(Horde::getTempDir(), 'horde_form_')),
+                                         'data' => $this->attributes[$attribute]));
         } else {
-            return isset($this->attributes[$attribute]) ? $this->attributes[$attribute] : null;
+            return $this->attributes[$attribute];
         }
     }
 
@@ -243,7 +249,10 @@ class Turba_Object {
      */
     function addFile($info)
     {
-        $this->_vfsInit();
+        $result = $this->_vfsInit();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
 
         $dir = TURBA_VFS_PATH . '/' . $this->getValue('__uid');
         $file = $info['name'];
diff --git a/lib/Turba.php b/lib/Turba.php
index da2437f..e785172 100644
--- a/lib/Turba.php
+++ b/lib/Turba.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/lib/Turba.php,v 1.59.4.39 2008/06/13 09:59:43 jan Exp $
+ * $Horde: turba/lib/Turba.php,v 1.59.4.43 2008/10/07 12:56:17 jan Exp $
  *
  * @package Turba
  */
@@ -153,20 +153,9 @@ class Turba {
     /**
      * Returns the sort order selected by the user
      */
-    function getPreferredSortOrder($columns)
+    function getPreferredSortOrder()
     {
-        global $prefs;
-
-        $order = @unserialize($prefs->getValue('sortorder'));
-        if ($prefs->getValue('name_format') == 'last_first') {
-            for ($i = 0, $i_max = count($order); $i < $i_max; ++$i) {
-                if ($order[$i]['field'] == 'name') {
-                    $order[$i]['field'] = 'lastname';
-                }
-            }
-        }
-
-        return $order;
+        return @unserialize($GLOBALS['prefs']->getValue('sortorder'));
     }
 
     /**
@@ -174,15 +163,7 @@ class Turba {
      */
     function getColumnName($i, $columns)
     {
-        if ($i == 0) {
-            if ($GLOBALS['prefs']->getValue('name_format') == 'first_last') {
-                return 'name';
-            } else {
-                return 'lastname';
-            }
-        } else {
-            return $columns[$i - 1];
-        }
+        return $i == 0 ? 'name' : $columns[$i - 1];
     }
 
     /**
@@ -234,7 +215,7 @@ class Turba {
                 $name = $namelist[$nameindex];
             }
         }
-        return $name;
+        return strlen($name) ? $name : null;
     }
 
     /**
@@ -592,14 +573,19 @@ class Turba {
 
         /* Update share_id as backends like Kolab change it to the IMAP folder
          * name. */
-        $share_id = $share->getId();
-
-        /* Add the new addressbook to the user's list of visible
-         * address books. */
-        $prefs = explode("\n", $GLOBALS['prefs']->getValue('addressbooks'));
-        if (array_search($share_id, $prefs) === false) {
-            $GLOBALS['prefs']->setValue('addressbooks', $GLOBALS['prefs']->getValue('addressbooks') . "\n" . $share_id);
+        $share_id = $share->getName();
+
+        /* Add the new addressbook to the user's list of visible address
+         * books. */
+        $prefs = $GLOBALS['prefs']->getValue('addressbooks');
+        if ($prefs) {
+            $prefs = explode("\n", $prefs);
+            if (array_search($share_id, $prefs) === false) {
+                $prefs[] = $share_id;
+                $GLOBALS['prefs']->setValue('addressbooks', implode("\n", $prefs));
+            }
         }
+
         return $share;
     }
 
diff --git a/lib/Views/Browse.php b/lib/Views/Browse.php
index 2068e60..c1433cf 100644
--- a/lib/Views/Browse.php
+++ b/lib/Views/Browse.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/lib/Views/Browse.php,v 1.12.2.6 2008/04/04 20:13:34 jan Exp $
+ * $Horde: turba/lib/Views/Browse.php,v 1.12.2.8 2008/09/11 08:46:20 jan Exp $
  *
  * Copyright 2000-2008 The Horde Project (http://www.horde.org/)
  *
@@ -43,7 +43,7 @@ class Turba_View_Browse {
     {
         extract($this->_params, EXTR_REFS);
 
-        if (($sortby = $vars->get('sortby')) !== null && $sortby != '') {
+        if (strlen($sortby = $vars->get('sortby'))) {
             $sources = Turba::getColumns();
             $columns = isset($sources[$source]) ? $sources[$source] : array();
             $column_name = Turba::getColumnName($sortby, $columns);
@@ -51,7 +51,7 @@ class Turba_View_Browse {
             $append = true;
             $ascending = ($vars->get('sortdir') == 0);
             if ($vars->get('sortadd')) {
-                $sortorder = Turba::getPreferredSortOrder($columns);
+                $sortorder = Turba::getPreferredSortOrder();
                 foreach ($sortorder as $i => $elt) {
                     if ($elt['field'] == $column_name) {
                         $sortorder[$i]['ascending'] = $ascending;
@@ -220,6 +220,13 @@ class Turba_View_Browse {
                         if (is_a($sourceDriver->delete($objectKey), 'PEAR_Error')) {
                             $notification->push(sprintf(_("There was an error deleting \"%s\" from the source address book."), $object->getValue('name')), 'horde.error');
                         }
+
+                        /* Log the adding of this item in the history again,
+                         * because otherwise the delete log would be after the
+                         * add log. */
+                        $history = &Horde_History::singleton();
+                        $history->log('turba:' . $targetDriver->getName() . ':' . $objAttributes['__uid'],
+                                      array('action' => 'add'), true);
                     }
                 }
                 break;
@@ -329,7 +336,7 @@ class Turba_View_Browse {
             // Read the columns to display from the preferences.
             $sources = Turba::getColumns();
             $columns = isset($sources[$source]) ? $sources[$source] : array();
-            $sortorder = Turba::getPreferredSortOrder($columns);
+            $sortorder = Turba::getPreferredSortOrder();
 
             if ($vars->get('key')) {
                 // We are displaying a list.
diff --git a/lib/api.php b/lib/api.php
index 9c327f6..b4d18d1 100644
--- a/lib/api.php
+++ b/lib/api.php
@@ -2,7 +2,7 @@
 /**
  * Turba external API interface.
  *
- * $Horde: turba/lib/api.php,v 1.120.2.49 2008/05/31 20:20:51 mrubinsk Exp $
+ * $Horde: turba/lib/api.php,v 1.120.2.61 2008/09/18 17:25:41 mrubinsk Exp $
  *
  * This file defines Turba's external API interface. Other applications can
  * interact with Turba through this API.
@@ -69,6 +69,11 @@ $_services['export'] = array(
     'type' => 'string',
 );
 
+$_services['ownVCard'] = array(
+    'args' => array(),
+    'type' => 'string',
+);
+
 $_services['delete'] = array(
     'args' => array('uid' => 'string'),
     'type' => 'boolean',
@@ -83,7 +88,8 @@ $_services['search'] = array(
     'args' => array('names' => '{urn:horde}stringArray',
                     'sources' => '{urn:horde}stringArray',
                     'fields' => '{urn:horde}stringArray',
-                    'matchBegin' => 'boolean'),
+                    'matchBegin' => 'boolean',
+                    'forceSource' => 'boolean'),
     'type' => '{urn:horde}stringArray',
 );
 
@@ -201,33 +207,50 @@ function _turba_removeUserData($user)
     /* We need a clean copy of the $cfgSources array here.*/
     require TURBA_BASE . '/config/sources.php';
     $hasError = false;
-    $shares = null;
 
     foreach ($cfgSources as $source) {
         if (empty($source['use_shares'])) {
             // Shares not enabled for this source
             $driver = &Turba_Driver::singleton($source);
             if (is_a($driver, 'PEAR_Error')) {
+                Horde::logMessage($driver, __FILE__, __LINE__, PEAR_LOG_ERR);
                 $hasError = true;
             } else {
                 $result = $driver->removeUserData($user);
                 if (is_a($result, 'PEAR_Error')) {
-                    $hasError = true;
+                    Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
                 }
             }
         }
     }
 
-    $shares = &$GLOBALS['turba_shares']->listShares($user,
-                                                    PERMS_EDIT,
-                                                    $user);
-    foreach ($shares as $share) {
-        $params = @unserialize($share->get('params'));
-        $config = Turba::getSourceFromShare($share);
-        $driver = &Turba_Driver::singleton($config);
-        $result = $driver->removeUserData($user);
-        if (is_a($result, 'PEAR_Error')) {
-            $hasError = true;
+    /* Only attempt share removal if we have shares configured */
+    if ($_SESSION['turba']['has_share']) {
+        $shares = &$GLOBALS['turba_shares']->listShares(
+            $user, PERMS_EDIT, $user);
+
+        /* Look for the deleted user's default share and remove it */
+        foreach ($shares as $share) {
+            $params = @unserialize($share->get('params'));
+            /* Only attempt to delete the user's default share */
+            if (!empty($params['default'])) {
+                $config = Turba::getSourceFromShare($share);
+                $driver = &Turba_Driver::singleton($config);
+                $result = $driver->removeUserData($user);
+                if (is_a($result, 'PEAR_Error')) {
+                    Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+                    $hasError = true;
+                }
+            }
+        }
+        
+        /* Get a list of all shares this user has perms to and remove the perms */
+        $shares = $GLOBALS['turba_shares']->listShares($user);
+        if (is_a($shares, 'PEAR_Error')) {
+            Horde::logMessage($shares, __FILE__, __LINE__, PEAR_LOG_ERR);
+        }
+        foreach ($shares as $share) {
+            $share->removeUser($user);
         }
     }
 
@@ -809,7 +832,8 @@ function _turba_getActionTimestamp($uid, $action, $sources = null)
  *
  * @param string $content      The content of the contact.
  * @param string $contentType  What format is the data in? Currently supports
- *                             array and text/(x-)vcard.
+ *                             array, text/directory, text/vcard and
+ *                             text/x-vcard.
  * @param string $source       The source into which the contact will be
  *                             imported.
  *
@@ -858,6 +882,7 @@ function _turba_import($content, $contentType = 'array', $import_source = null)
 
         case 'text/x-vcard':
         case 'text/vcard':
+        case 'text/directory':
             require_once 'Horde/iCalendar.php';
             $iCal = new Horde_iCalendar();
             if (!$iCal->parsevCalendar($content)) {
@@ -936,9 +961,10 @@ function _turba_import($content, $contentType = 'array', $import_source = null)
  * @param string $uid            Identify the contact to export.
  * @param mixed $contentType     What format should the data be in?
  *                               Either a string with one of:
+ *                               - text/directory
  *                               - text/vcard
  *                               - text/x-vcard
- *                               The first produces a vcard3.0 (rfc2426),
+ *                               The first two produce a vcard3.0 (rfc2426),
  *                               the second produces a vcard in old 2.1 format
  *                               defined by imc.org
  * @param string|array $sources  The source(s) from which the contact will be
@@ -992,16 +1018,16 @@ function _turba_export($uid, $contentType, $sources = null)
         }
 
         $version = '3.0';
+        list($contentType,) = explode(';', $contentType);
         switch ($contentType) {
-        case 'text/x-vcard;version=2.1':
         case 'text/x-vcard':
             $version = '2.1';
         case 'text/vcard':
+        case 'text/directory':
             require_once 'Horde/iCalendar.php';
             $export = '';
             foreach ($result->objects as $obj) {
                 $vcard = $driver->tovCard($obj, $version);
-                $vcard->setAttribute('VERSION', $version);
                 /* vCards are not enclosed in BEGIN:VCALENDAR..END:VCALENDAR.
                  * Export the individual cards instead. */
                 $export .= $vcard->exportvCalendar();
@@ -1016,6 +1042,47 @@ function _turba_export($uid, $contentType, $sources = null)
 }
 
 /**
+ * Exports the user's own contact as a vCard string.
+ *
+ * @return string  The requested vCard data or PEAR_Error.
+ */
+function _turba_ownVCard()
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    $own_contact = $GLOBALS['prefs']->getValue('own_contact');
+    if (empty($own_contact)) {
+        return PEAR::raiseError(_("You didn't mark a contact as your own yet."));
+    }
+    @list($source, $id) = explode(';', $own_contact);
+
+    if (!isset($cfgSources[$source])) {
+        return PEAR::raiseError(_("The address book with your own contact doesn't exist anymore."));
+    }
+
+    $driver = &Turba_Driver::singleton($source);
+    if (is_a($driver, 'PEAR_Error')) {
+        return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()));
+    }
+
+    if (!$driver->hasPermission(PERMS_READ)) {
+        return PEAR::raiseError(_("You don't have sufficient permissions to read the address book that contains your own contact."));
+    }
+
+    $contact = $driver->getObject($id);
+    if (is_a($contact, 'PEAR_Error')) {
+        return PEAR::raiseError(_("Your own contact cannot be found in the address book."));
+    }
+
+    require_once 'Horde/iCalendar.php';
+    $vcard = $driver->tovCard($contact, '3.0');
+    $vcard->setAttribute('VERSION', '3.0');
+
+    return $vcard->exportvCalendar();
+}
+
+/**
  * Deletes a contact identified by UID.
  *
  * @param string|array $uid      Identify the contact to delete, either a
@@ -1097,7 +1164,8 @@ function _turba_delete($uid, $sources = null)
  * @param string $uid            Idenfity the contact to replace.
  * @param string $content        The content of the contact.
  * @param string $contentType    What format is the data in? Currently supports
- *                               array and text/(x-)vcard.
+ *                               array, text/directory, text/vcard and
+ *                               text/x-vcard.
  * @param string|array $sources  The source(s) where the contact will be
  *                               replaced.
  *
@@ -1155,6 +1223,7 @@ function _turba_replace($uid, $content, $contentType, $sources = null)
 
         case 'text/x-vcard':
         case 'text/vcard':
+        case 'text/directory':
             require_once 'Horde/iCalendar.php';
             $iCal = new Horde_iCalendar();
             if (!$iCal->parsevCalendar($content)) {
@@ -1198,11 +1267,13 @@ function _turba_replace($uid, $content, $contentType, $sources = null)
  * @param array $sources        The sources to serach in
  * @param array $fields         The fields to serach on
  * @param boolean $matchBegin   Match word boundaries only
+ * @param boolean $forceSource  Whether to use the specified sources, even if
+ *                              they have been disabled in the preferences.
  *
  * @return array  Hash containing the search results.
  */
 function _turba_search($names = array(), $sources = array(), $fields = array(),
-                       $matchBegin = false)
+                       $matchBegin = false, $forceSource = false)
 {
     require_once dirname(__FILE__) . '/base.php';
     require_once 'Horde/MIME.php';
@@ -1216,11 +1287,13 @@ function _turba_search($names = array(), $sources = array(), $fields = array(),
         $names = is_null($names) ? array() : array($names);
     }
 
-    // Make sure the selected source is activated in Turba.
-    $addressbooks = array_keys(Turba::getAddressBookOrder());
-    foreach (array_keys($sources) as $id) {
-        if (!in_array($sources[$id], $addressbooks)) {
-            unset($sources[$id]);
+    if (!$forceSource) {
+        // Make sure the selected source is activated in Turba.
+        $addressbooks = array_keys(Turba::getAddressBooks());
+        foreach (array_keys($sources) as $id) {
+            if (!in_array($sources[$id], $addressbooks)) {
+                unset($sources[$id]);
+            }
         }
     }
 
@@ -1266,7 +1339,7 @@ function _turba_search($names = array(), $sources = array(), $fields = array(),
                 $criteria['name'] = trim($name);
             }
 
-            $search = $driver->search($criteria, Turba::getPreferredSortOrder($columns), 'OR', array(), array(), $matchBegin);
+            $search = $driver->search($criteria, Turba::getPreferredSortOrder(), 'OR', array(), array(), $matchBegin);
             if (!is_a($search, 'Turba_List')) {
                 continue;
             }
@@ -1301,9 +1374,15 @@ function _turba_search($names = array(), $sources = array(), $fields = array(),
                         }
                     }
 
+                    if ($ob->hasValue('name') ||
+                        !isset($ob->driver->alternativeName)) {
+                        $display_name = Turba::formatName($ob);
+                    } else {
+                        $display_name = $ob->getValue($ob->driver->alternativeName);
+                    }
                     if (count($email)) {
                         for ($i = 0; $i < count($email); $i++) {
-                            $seen_key = trim(String::lower($ob->getValue('name'))) . '/' . trim(String::lower($email[$i]));
+                            $seen_key = trim(String::lower($display_name)) . '/' . trim(String::lower($email[$i]));
                             if (!empty($seen[$seen_key])) {
                                 continue;
                             }
@@ -1313,7 +1392,7 @@ function _turba_search($names = array(), $sources = array(), $fields = array(),
                             }
                             $results[$name][] = array_merge($att,
                                 array('id' => $att['__key'],
-                                      'name' => Turba::formatName($ob),
+                                      'name' => $display_name,
                                       'email' => $email[$i],
                                       '__type' => 'Object',
                                       'source' => $source));
@@ -1324,7 +1403,7 @@ function _turba_search($names = array(), $sources = array(), $fields = array(),
                         }
                         $results[$name][] = array_merge($att,
                             array('id' => $att['__key'],
-                                  'name' => Turba::formatName($ob),
+                                  'name' => $display_name,
                                   'email' => null,
                                   '__type' => 'Object',
                                   'source' => $source));
@@ -1666,14 +1745,16 @@ function _turba_deleteClient($objectId = '')
  */
 function _turba_searchClients($names = array(), $fields = array(), $matchBegin = false)
 {
-    return _turba_search($names,
-                         array($GLOBALS['conf']['client']['addressbook']),
-                         array($GLOBALS['conf']['client']['addressbook'] => $fields),
-                         $matchBegin);
+    return _turba_search(
+        $names,
+        array($GLOBALS['conf']['client']['addressbook']),
+        array($GLOBALS['conf']['client']['addressbook'] => $fields),
+        $matchBegin,
+        true);
 }
 
 /**
- * Sets the value of the specified attribute of an contact
+ * Sets the value of the specified attribute of a contact
  *
  * @param string $address  Contact email address
  * @param string $name     Contact name
diff --git a/lib/prefs.php b/lib/prefs.php
index 741d7b1..b8416df 100644
--- a/lib/prefs.php
+++ b/lib/prefs.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/lib/prefs.php,v 1.2.10.9 2008/04/10 13:37:07 jan Exp $
+ * $Horde: turba/lib/prefs.php,v 1.2.10.10 2008/08/25 17:10:33 jan Exp $
  *
  * Copyright 2001-2008 The Horde Project (http://www.horde.org/)
  *
@@ -22,7 +22,7 @@ function handle_columnselect($updated)
 function handle_addressbookselect($updated)
 {
     $addressbooks = Util::getFormData('addressbooks');
-    $GLOBALS['prefs']->setValue('addressbooks', $addressbooks);
+    $GLOBALS['prefs']->setValue('addressbooks', str_replace("\r", '', $addressbooks));
     return true;
 }
 
diff --git a/lib/tests/KolabTest.php b/lib/tests/KolabTest.php
new file mode 100644
index 0000000..5c697f1
--- /dev/null
+++ b/lib/tests/KolabTest.php
@@ -0,0 +1,203 @@
+<?php
+
+require_once dirname(__FILE__) . '/KolabTestBase.php';
+
+/**
+ * $Horde: turba/lib/tests/KolabTest.php,v 1.1.2.2 2008/11/07 15:03:33 selsky Exp $
+ *
+ * @author  Jason M. Felice <jason.m.felice at gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_KolabTest extends Turba_KolabTestBase {
+
+    /**
+     * Test setup.
+     *
+     * @return NULL
+     */
+    public function setUp()
+    {
+        $this->prepareTurba();
+
+        $this->_kolab = &new Kolab();
+    }
+
+    function testBug5476()
+    {
+        /* Open our addressbook */
+        $this->_kolab->open('INBOX/Contacts', 1);
+
+        $object = array(
+            'uid' => 1,
+            'given-name' => 'test',
+            'last-name' => 'test',
+            'full-name' => 'test  test',
+        );
+
+        // Save the contact
+        $this->_kolab->_storage->save($object);
+
+        $object = array(
+            'uid' => 2,
+            'given-name' => 'test2',
+            'last-name' => 'test2',
+            'full-name' => 'test2  test2',
+        );
+
+        // Save the contact
+        $this->_kolab->_storage->save($object);
+
+        // Check that the driver can be created
+        $turba = Turba_Driver::singleton('wrobel at example.org');
+        $this->assertNoError($turba);
+
+        $result = $turba->search(array(), array('last-name'));
+        $this->assertNoError($result);
+        $this->assertEquals(2, $result->count());
+
+        $turba = Turba_Driver::singleton('INBOX%2Ftest2');
+        $result = $turba->search(array(), array('last-name'));
+
+        $this->assertEquals(0, $result->count());
+    }
+
+    function testPhoto()
+    {
+        /* Open our addressbook */
+        $this->_kolab->open('INBOX/Contacts', 1);
+
+        $object = array(
+            'uid' => 1,
+            'given-name' => 'photo',
+            'last-name' => 'photo',
+            'full-name' => 'photo photo',
+            'photo' => 'abcd',
+            'phototype' => 'image/jpeg',
+        );
+
+        // Save the contact
+        $turba = Turba_Driver::singleton('wrobel at example.org');
+        $this->assertNoError($turba);
+
+        $this->assertNoError($turba->_add($object));
+
+        $list = Kolab_List::singleton();
+        $share = &$list->getByShare('INBOX/Contacts', 'contact');
+        $data = &$share->getData();
+        $object = $data->getObject('1');
+        $this->assertTrue(isset($object['_attachments'][$object['picture']]));
+        $attachment = $data->getAttachment($object['_attachments'][$object['picture']]['key']);
+        $this->assertEquals("abcd\n", $attachment);
+    }
+
+    function testAttachments()
+    {
+        /* Open our addressbook */
+        $this->_kolab->open('INBOX/Contacts', 1);
+
+        $object = array(
+            'uid' => 'a',
+            'given-name' => 'atc',
+            'last-name' => 'atc',
+            'full-name' => 'atc atc',
+        );
+
+        // Save the contact
+        $turba = Turba_Driver::singleton('wrobel at example.org');
+        $this->assertNoError($turba);
+
+        $this->assertNoError($turba->_add($object));
+
+        $contact = $turba->getObject('a');
+        $this->assertNoError($contact);
+
+        $list = Kolab_List::singleton();
+        $share = &$list->getByShare('INBOX/Contacts', 'contact');
+        $data = &$share->getData();
+
+        $atc1 = Util::getTempFile();
+        $fh = fopen($atc1, 'w');
+        fwrite($fh, 'test');
+        fclose($fh);
+
+        $info = array('tmp_name' => $atc1,
+                      'name' => 'test.txt');
+        $this->assertNoError($contact->addFile($info));
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(isset($object['_attachments']));
+        $this->assertEquals(1, count($object['_attachments']));
+        $this->assertEquals(1, count($object['link-attachment']));
+        $this->assertContains('test.txt', $object['link-attachment']);
+        $attachment = $data->getAttachment($object['_attachments']['test.txt']['key']);
+        $this->assertEquals("test\n", $attachment);
+
+        $atc1 = Util::getTempFile();
+        $fh = fopen($atc1, 'w');
+        fwrite($fh, 'hhhh');
+        fclose($fh);
+
+        $info = array('tmp_name' => $atc1,
+                      'name' => 'test.txt');
+        $this->assertNoError($contact->addFile($info));
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(isset($object['_attachments']));
+        $this->assertEquals(2, count($object['_attachments']));
+        $this->assertEquals(2, count($object['link-attachment']));
+        $this->assertContains('test[1].txt', $object['link-attachment']);
+        $attachment = $data->getAttachment($object['_attachments']['test[1].txt']['key']);
+        $this->assertEquals("hhhh\n", $attachment);
+
+        $atc1 = Util::getTempFile();
+        $fh = fopen($atc1, 'w');
+        fwrite($fh, 'dummy');
+        fclose($fh);
+
+        $info = array('tmp_name' => $atc1,
+                      'name' => 'dummy.txt');
+        $this->assertNoError($contact->addFile($info));
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(isset($object['_attachments']));
+        $this->assertEquals(3, count($object['_attachments']));
+        $this->assertEquals(3, count($object['link-attachment']));
+        $this->assertContains('dummy.txt', $object['link-attachment']);
+        $attachment = $data->getAttachment($object['_attachments']['dummy.txt']['key']);
+        $this->assertEquals("dummy\n", $attachment);
+
+        $this->assertError($contact->deleteFile('doesnotexist.txt'), "Unable to delete VFS file.");
+
+        $this->assertNoError($contact->deleteFile('test[1].txt'));
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(!isset($object['_attachments']['test[1].txt']));
+        $this->assertEquals(2, count($object['_attachments']));
+        $this->assertEquals(2, count($object['link-attachment']));
+        $this->assertNotContains('test[1].txt', $object['link-attachment']);
+
+        $files = $contact->listFiles();
+        $this->assertNoError($files);
+        
+        $this->assertContains('test.txt', array_keys($files));
+        $this->assertContains('dummy.txt', array_keys($files));
+
+        $this->assertNoError($contact->deleteFiles());
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(!isset($object['_attachments']['test.txt']));
+        $this->assertTrue(!isset($object['_attachments']));
+        $this->assertTrue(!isset($object['link-attachment']));
+    }
+}
diff --git a/lib/tests/KolabTestBase.php b/lib/tests/KolabTestBase.php
new file mode 100644
index 0000000..ab1048e
--- /dev/null
+++ b/lib/tests/KolabTestBase.php
@@ -0,0 +1,185 @@
+<?php
+/**
+ * Base for PHPUnit scenarios.
+ *
+ * $Horde: turba/lib/tests/KolabTestBase.php,v 1.1.2.1 2008/11/07 13:20:23 wrobel Exp $
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package  Kolab_Test
+ * @author   Gunnar Wrobel <wrobel at pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ *  We need the unit test framework
+ */
+require_once 'Horde/Kolab/Test/Storage.php';
+
+/**
+ *  We need some additional tools for Turba
+ */
+require_once 'Horde/Share.php';
+require_once 'Horde/Kolab.php';
+
+/**
+ * Base for PHPUnit scenarios.
+ *
+ * $Horde: turba/lib/tests/KolabTestBase.php,v 1.1.2.1 2008/11/07 13:20:23 wrobel Exp $
+ *
+ * Copyright 2008 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.
+ *
+ * @category Kolab
+ * @package  Kolab_Test
+ * @author   Gunnar Wrobel <wrobel at pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Turba_KolabTestBase extends Horde_Kolab_Test_Storage
+{
+    /**
+     * Handle a "given" step.
+     *
+     * @param array  &$world    Joined "world" of variables.
+     * @param string $action    The description of the step.
+     * @param array  $arguments Additional arguments to the step.
+     *
+     * @return mixed The outcome of the step.
+     */
+    public function runGiven(&$world, $action, $arguments)
+    {
+        switch($action) {
+        default:
+            return parent::runGiven($world, $action, $arguments);
+        }
+    }
+
+    /**
+     * Handle a "when" step.
+     *
+     * @param array  &$world    Joined "world" of variables.
+     * @param string $action    The description of the step.
+     * @param array  $arguments Additional arguments to the step.
+     *
+     * @return mixed The outcome of the step.
+     */
+    public function runWhen(&$world, $action, $arguments)
+    {
+        switch($action) {
+        default:
+            return parent::runWhen($world, $action, $arguments);
+        }
+    }
+
+    /**
+     * Handle a "then" step.
+     *
+     * @param array  &$world    Joined "world" of variables.
+     * @param string $action    The description of the step.
+     * @param array  $arguments Additional arguments to the step.
+     *
+     * @return mixed The outcome of the step.
+     */
+    public function runThen(&$world, $action, $arguments)
+    {
+        switch($action) {
+        default:
+            return parent::runThen($world, $action, $arguments);
+        }
+    }
+
+    /**
+     * Prepare the configuration.
+     *
+     * @return NULL
+     */
+    public function prepareConfiguration()
+    {
+    }
+
+    /**
+     * Prepare the registry.
+     *
+     * @return NULL
+     */
+    public function prepareRegistry()
+    {
+    }
+
+    /**
+     * Prepare the notification setup.
+     *
+     * @return NULL
+     */
+    public function prepareNotification()
+    {
+    }
+
+    /**
+     * Fix the read configuration.
+     *
+     * @return NULL
+     */
+    public function prepareFixedConfiguration()
+    {
+        $GLOBALS['conf'] = &$GLOBALS['registry']->_confCache['horde'];
+        $GLOBALS['conf']['kolab']['server']['driver'] = 'test';
+        $GLOBALS['conf']['documents']['type'] = 'horde';
+    }
+
+    /**
+     * Prepare the Turba setup.
+     *
+     * @return NULL
+     */
+    public function prepareTurba()
+    {
+        $world = &$this->prepareBasicSetup();
+
+        $this->assertTrue($world['auth']->authenticate('wrobel at example.org',
+                                                       array('password' => 'none')));
+
+        $GLOBALS['registry']->pushApp('turba');
+
+        // Find the base file path of Turba.
+        if (!defined('TURBA_BASE')) {
+            define('TURBA_BASE', dirname(__FILE__) . '/../..');
+        }
+
+        // Turba base libraries.
+        require_once TURBA_BASE . '/lib/Turba.php';
+        require_once TURBA_BASE . '/lib/Driver.php';
+        require_once TURBA_BASE . '/lib/Object.php';
+
+        // Turba source and attribute configuration.
+        include TURBA_BASE . '/config/attributes.php';
+        include TURBA_BASE . '/config/sources.php';
+        unset($cfgSources['kolab_global']);
+
+        $this->prepareNewFolder($world['storage'], 'Contacts', 'contact', true);
+        $this->prepareNewFolder($world['storage'], 'test2', 'contact');
+
+        $_SESSION['turba']['has_share'] =  true;
+        $GLOBALS['turba_shares'] = &Horde_Share::singleton('turba');
+
+        $GLOBALS['cfgSources'] = Turba::getConfigFromShares($cfgSources);
+
+        // Disable maintenance
+        $GLOBALS['prefs']->setValue('turba_maintenance_tasks',
+                                    serialize(array('upgradeprefs', 'upgradelists')));
+    }
+
+
+    function provideServerName() {
+        return 'localhost.localdomain';
+    }
+
+    function provideHordeBase() {
+        return dirname(__FILE__) . '/../../../';
+    }
+}
diff --git a/themes/graphics/az.png b/lib/tests/az.png
similarity index 100%
copy from themes/graphics/az.png
copy to lib/tests/az.png
diff --git a/lib/tests/tohash.phpt b/lib/tests/tohash.phpt
index 2e401bb..50c9652 100644
--- a/lib/tests/tohash.phpt
+++ b/lib/tests/tohash.phpt
@@ -22,6 +22,7 @@ EMAIL:jan at horde.org
 NICKNAME:yunosh
 TEL;HOME:+49 521 555123
 TEL;WORK:+49 521 555456
+TEL;WORK:+49 521 999999
 TEL;CELL:+49 177 555123
 TEL;FAX:+49 521 555789
 TEL;PAGER:+49 123 555789
@@ -42,7 +43,7 @@ ADR;HOME;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
 ADR;WORK;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
 ;;H=FCbschestr. 19;K=F6ln;Allg=E4u;;D=E4nemark
 TZ;VALUE=text:+02:00; Europe/Berlin
-GEO:52.516276;13.377778
+GEO:13.377778,52.516276
 BODY:
 END:VCARD
 ';
@@ -103,6 +104,95 @@ TEL;VOICE;WORK:6
 END:VCARD
 ';
 
+$vcard6 = '
+BEGIN:VCARD
+VERSION:2.1
+N:Lastname;Firstname;;;
+FN:Lastname, Firstname
+TITLE:
+ORG:Company Name;
+BDAY:
+TEL;HOME;VOICE;X-Synthesis-Ref1:(xxx) xxx-xxxx
+TEL;WORK;VOICE;X-Synthesis-Ref1:(xxx) xxx-xxxx
+TEL;CELL;VOICE;X-Synthesis-Ref1:(xxx) xxx-xxxx
+EMAIL:email at domain.com
+URL:
+CATEGORIES:Friends
+NOTE;ENCODING=QUOTED-PRINTABLE:
+EIN: xx-xxxxxxx
+ADR;HOME:;;Street address;City;St;12345;USA
+ADR;WORK:;;Street address;City;St;12345;USA
+PHOTO:
+END:VCARD
+';
+
+$vcard7 = '
+BEGIN:VCARD
+FN:Jan Schneider
+N:Schneider;Jan;;;
+PHOTO;ENCODING=b;TYPE=image/png:iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAgMAAACd/+6D
+  AAAACVBMVEW6ABZmZmYAAACMtcxCAAAAAXRSTlMAQObYZgAAABpJREFUCFtjYACBBgYmRgEIZm
+  GBYAFGMAYBABVmAOEH9qP8AAAAAElFTkSuQmCC
+UID:nhCnPyv0u7
+VERSION:2.1
+END:VCARD
+';
+
+$vcard8 = '
+BEGIN:VCARD
+FN:Jan Schneider
+N:Schneider;Jan;;;
+EMAIL;WORK:work at example.com
+EMAIL;HOME:home at example.com
+EMAIL:mail at example.com
+EMAIL;PREF:pref at example.com
+UID:nhCnPyv0u7
+VERSION:2.1
+END:VCARD
+';
+
+$vcard9 = '
+BEGIN:VCARD
+VERSION:2.1
+N:Blow;Joe;;;
+FN:Blow, Joe
+TITLE:
+ORG:;
+BDAY:19700327
+TEL;HOME;VOICE;X-Synthesis-Ref1:302 834 9999
+TEL;CELL;VOICE;X-Synthesis-Ref1:302 521 9999
+EMAIL:Blow at somwhere.net
+URL:
+CATEGORIES:Personal
+NOTE:
+ADR;HOME:;;;;;;
+PHOTO:
+END:VCARD
+';
+
+// Invalid ENCODING value.
+$vcard10 = '
+BEGIN:VCARD
+VERSION:3.0
+PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.1.6.10//EN
+REV:20081004T151032
+N:McTester;Testie;;;
+FN:Testie McTester
+ORG:Testers Inc;
+TEL;TYPE=VOICE,CELL,X-Synthesis-Ref0:+44 775550555
+TEL;TYPE=HOME,VOICE,X-Synthesis-Ref1:+44 205550555
+TEL;TYPE=WORK,VOICE,X-Synthesis-Ref2:+44 205550556
+EMAIL;TYPE=HOME,INTERNET,X-Synthesis-Ref0:test at example.org
+EMAIL;TYPE=WORK,INTERNET,X-Synthesis-Ref1:test at example.com
+ADR;TYPE=HOME,X-Synthesis-Ref0:;;111 One Street;London;;W1 1AA;
+BDAY:20081008
+PHOTO;TYPE=JPEG;ENCODING=BASE64:wolQTkcNChoKAAAADUlIRFIAAAAJAAAACQIDAAAAwp3
+ Dv8OuwoMAAAAJUExURcK6ABZmZmYAAADCjMK1w4xCAAAAAXRSTlMAQMOmw5hmAAAAGklEQVQIW2
+ NgAMKBBgYmRgEIZmHCgWABRjAGAQAVZgDDoQfDtsKjw7wAAAAASUVORMKuQmDCgg==
+ 
+END:VCARD
+';
+
 $driver = new Turba_Driver(array());
 $iCal = new Horde_iCalendar();
 
@@ -135,6 +225,30 @@ $iCal->parsevCalendar($vcard5);
 var_export($driver->toHash($iCal->getComponent(0)));
 echo "\n";
 
+$iCal->parsevCalendar($vcard6);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard7);
+$hash = $driver->toHash($iCal->getComponent(0));
+var_export($hash['photo'] == file_get_contents(dirname(__FILE__) . '/az.png'));
+echo "\n";
+
+$iCal->parsevCalendar($vcard8);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard9);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard10);
+$hash = $driver->toHash($iCal->getComponent(0));
+var_export(strlen($hash['photo']));
+echo "\n";
+unset($hash['photo']);
+var_export($hash);
+
 ?>
 --EXPECT--
 array (
@@ -245,3 +359,84 @@ array (
   'workPhone' => '6',
   'name' => 'A  B',
 )
+array (
+  'lastname' => 'Lastname',
+  'firstname' => 'Firstname',
+  'name' => 'Lastname, Firstname',
+  'company' => 'Company Name',
+  'department' => '',
+  'homePhone' => '(xxx) xxx-xxxx',
+  'workPhone' => '(xxx) xxx-xxxx',
+  'cellPhone' => '(xxx) xxx-xxxx',
+  'email' => 'email at domain.com',
+  'emails' => 'email at domain.com',
+  'category' => 'Friends',
+  'businessCategory' => 'Friends',
+  'homeAddress' => 'Street address
+City, St 12345
+USA',
+  'homeStreet' => 'Street address',
+  'homeCity' => 'City',
+  'homeProvince' => 'St',
+  'homePostalCode' => '12345',
+  'homeCountry' => 'USA',
+  'workAddress' => 'Street address
+City, St 12345
+USA',
+  'workStreet' => 'Street address',
+  'workCity' => 'City',
+  'workProvince' => 'St',
+  'workPostalCode' => '12345',
+  'workCountry' => 'USA',
+)
+true
+array (
+  'name' => 'Jan Schneider',
+  'lastname' => 'Schneider',
+  'firstname' => 'Jan',
+  'workEmail' => 'work at example.com',
+  'emails' => 'work at example.com, home at example.com, mail at example.com, pref at example.com',
+  'homeEmail' => 'home at example.com',
+  'email' => 'pref at example.com',
+)
+array (
+  'lastname' => 'Blow',
+  'firstname' => 'Joe',
+  'name' => 'Blow, Joe',
+  'company' => '',
+  'department' => '',
+  'birthday' => '1970-03-27',
+  'homePhone' => '302 834 9999',
+  'cellPhone' => '302 521 9999',
+  'email' => 'Blow at somwhere.net',
+  'emails' => 'Blow at somwhere.net',
+  'category' => 'Personal',
+  'businessCategory' => 'Personal',
+  'homeAddress' => '',
+)
+136
+array (
+  'lastname' => 'McTester',
+  'firstname' => 'Testie',
+  'name' => 'Testie McTester',
+  'company' => 'Testers Inc',
+  'department' => '',
+  'cellPhone' => '+44 775550555',
+  'homePhone' => '+44 205550555',
+  'workPhone' => '+44 205550556',
+  'homeEmail' => 'test at example.org',
+  'emails' => 'test at example.org, test at example.com',
+  'workEmail' => 'test at example.com',
+  'homeAddress' => '111 One Street
+London W1 1AA',
+  'homeStreet' => '111 One Street',
+  'homeCity' => 'London',
+  'homePostalCode' => 'W1 1AA',
+  'commonAddress' => '111 One Street
+London W1 1AA',
+  'commonStreet' => '111 One Street',
+  'commonCity' => 'London',
+  'commonPostalCode' => 'W1 1AA',
+  'birthday' => '2008-10-08',
+  'phototype' => 'JPEG',
+)
diff --git a/lib/tests/tovcard.phpt b/lib/tests/tovcard.phpt
index de171e3..0eb9c2a 100644
--- a/lib/tests/tovcard.phpt
+++ b/lib/tests/tovcard.phpt
@@ -36,6 +36,8 @@ $attributes = array(
   'timezone' => 'Europe/Berlin',
   'latitude' => '52.516276',
   'longitude' => '13.377778',
+  'photo' => file_get_contents(dirname(__FILE__) . '/az.png'),
+  'phototype' => 'image/png',
 );
 
 $driver = new Turba_Driver(array());
@@ -52,6 +54,8 @@ VERSION:2.1
 FN;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Jan Schneider=F6
 EMAIL:jan at horde.org
 NICKNAME:yunosh
+LABEL;HOME;ENCODING=QUOTED-PRINTABLE;CHARSET=ISO-8859-1:Sch=F6nestr. 15=0D=0A=
+33604 Bielefeld
 TEL;HOME:+49 521 555123
 TEL;WORK:+49 521 555456
 TEL;CELL:+49 177 555123
@@ -63,13 +67,13 @@ ROLE;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Developer (=E4=F6=FC)
 NOTE;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:A German guy (=E4=F6=FC)
 URL:http://janschneider.de
 TZ;VALUE=text:Europe/Berlin
-GEO:52.516276;13.377778
+GEO:13.377778,52.516276
+PHOTO;ENCODING=b;TYPE=image/png:iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAgMAAACd/+6DAAAACVBMVEW6ABZmZmYAAACMtcxCAAAAAXRSTlMAQObYZgAAABpJREFUCFtjYACBBgYmRgEIZmGBYAFGMAYBABVmAOEH9qP8AAAAAElFTkSuQmCC
 N;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Schneider=F6;Jan;K.;Mr.;
 ORG;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Horde Project;=E4=F6=FC
 ADR;HOME;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:;;Sch=F6nestr. 15=0D=0A=
 33604 Bielefeld;;;;
 ADR;WORK;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:;;H=FCbschestr. 19;K=F6ln;Allg=E4u;;D=E4nemark
-BODY:
 END:VCARD
 
 BEGIN:VCARD
@@ -77,6 +81,7 @@ VERSION:3.0
 FN:Jan Schneiderö
 EMAIL:jan at horde.org
 NICKNAME:yunosh
+LABEL;TYPE=HOME:Schönestr. 15\n33604 Bielefeld
 TEL;TYPE=HOME:+49 521 555123
 TEL;TYPE=WORK:+49 521 555456
 TEL;TYPE=CELL:+49 177 555123
@@ -89,9 +94,11 @@ NOTE:A German guy (äöü)
 URL:http://janschneider.de
 TZ;VALUE=text:Europe/Berlin
 GEO:52.516276;13.377778
+PHOTO;ENCODING=b;TYPE=image/png:wolQTkcNChoKAAAADUlIRFIAAAAJAAAACQIDAAAAwp3
+ Dv8OuwoMAAAAJUExURcK6ABZmZmYAAADCjMK1w4xCAAAAAXRSTlMAQMOmw5hmAAAAGklEQVQIW2
+ NgAMKBBgYmRgEIZmHCgWABRjAGAQAVZgDDoQfDtsKjw7wAAAAASUVORMKuQmDCgg==
 N:Schneiderö;Jan;K.;Mr.;
 ORG:Horde Project;äöü
 ADR;TYPE=HOME:;;Schönestr. 15\n33604 Bielefeld;;;;
 ADR;TYPE=WORK:;;Hübschestr. 19;Köln;Allgäu;;Dänemark
-BODY:
 END:VCARD
diff --git a/lib/version.php b/lib/version.php
index 0d6f882..d7dfb6c 100644
--- a/lib/version.php
+++ b/lib/version.php
@@ -1 +1 @@
-<?php define('TURBA_VERSION', 'H3 (2.2.1)') ?>
+<?php define('TURBA_VERSION', 'H3 (2.3.1)') ?>
diff --git a/locale/de_DE/LC_MESSAGES/turba.mo b/locale/de_DE/LC_MESSAGES/turba.mo
index 2de8f6a..1884a7a 100644
Binary files a/locale/de_DE/LC_MESSAGES/turba.mo and b/locale/de_DE/LC_MESSAGES/turba.mo differ
diff --git a/locale/et_EE/LC_MESSAGES/turba.mo b/locale/et_EE/LC_MESSAGES/turba.mo
index 2f189e1..47f8d66 100644
Binary files a/locale/et_EE/LC_MESSAGES/turba.mo and b/locale/et_EE/LC_MESSAGES/turba.mo differ
diff --git a/locale/eu_ES/LC_MESSAGES/turba.mo b/locale/eu_ES/LC_MESSAGES/turba.mo
new file mode 100644
index 0000000..d1cc726
Binary files /dev/null and b/locale/eu_ES/LC_MESSAGES/turba.mo differ
diff --git a/locale/eu_ES/help.xml b/locale/eu_ES/help.xml
new file mode 100644
index 0000000..d7a47a8
--- /dev/null
+++ b/locale/eu_ES/help.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!-- $Horde: turba/locale/eu_ES/help.xml,v 1.1.2.1 2008/07/17 21:09:27 jan Exp $ -->
+<help>
+
+<entry id="Overview" md5="290506ade4e6f749246f77bbe5d48835" state="uptodate">
+    <title>Informazio orokorra</title>
+    <heading>Sarrera</heading> <para>Helbide-liburuak kontaktuen informazioa gordetzeko metodo eta leku egokia eskaintzen ditu, informazio hori erraz eskuratzeko eta erabiltzeko. Administratzaileak sistema konfiguratzeko erabilitako moduaren arabera, helbide-liburu pribatu bat nahiz sareko direktorio-zerbitzu publikoetarako sarbidea izan dezakezu. Banaketa-zerrendak ere onartzen dituenez, zure "posta-zerrendak" sor ditzakezu.</para></entry>
+
+<entry id="menu-add" md5="3c1f92eb1a82839404d11d9b0a20b3ce" state="uptodate">
+    <title>Menua: Kontaktu berria</title>
+    <heading>Kontaktu berria</heading> <para>Helbide-liburuan beste erabiltzaile bat sartzea da. Helbide-liburuan, idazteko baimena eman dizuten erabiltzaileak sar ditzakezu soilik. Partekatutako helbide-liburuak edo helbide-liburu publikoak gaitu badira, askotan irakurtzeko soilik izaten dira; kasu horretan, ezingo duzu kontakturik sartu.</para></entry>
+
+<entry id="menu-search" md5="8daf81ab28602d772358a174571f9ad2" state="uptodate">
+    <title>Menua: Bilatu</title>
+    <heading>Bilatu</heading> <para>Helbide-liburu batean bilaketak egin ditzakezu informazioa eskuratzeko. Hori bilaketa erraza da, eta oinarrizko eremu batzuetan informazioa bilatzeko balio du. Askotan izena eta helbide elektronikoa eremuak erabili ohi dira, baina alda daitezke administratzaileak helbide-liburua konfiguratzeko erabilitako moduaren arabera.</para> <para>Bilaketa konplexuagoa egiteko "<ref module="turba" entry="menu-advanced-search">Bilaketa aurreratua</ref>" erabil dezakezu, eta horrela beste eremu batzuetan ere bilaketak egin ahal izango dituzu.</para></entry>
+
+<entry id="menu-advanced-search" md5="6be703ffeba614f6ada151749fa44ab5" state="uptodate">
+    <title>Menua: Bilaketa aurreratua</title>
+    <heading>Bilaketa aurreratua</heading> <para>Helbide-liburu batean bilaketak egin ditzakezu informazioa eskuratzeko. Bilaketa aurreratuaren bidez, hainbat eremutan egin ditzakezu bilaketak. Bilaketak egiteko zein eremu egongo diren erabilgarri, bilaketak egingo diren helbide-liburuaren arabera dago.</para></entry>
+
+<entry id="menu-import" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4" state="uptodate">
+    <title>Menua: Inportatu/Esportatu</title>
+    <heading>Inportatu/Esportatu</heading>
+
+    <para>Menu honen bidez, helbide-liburura inportatu eta helbide-liburutik esporta dezakezu. Formatu hauek onartzen ditu: CSV (komaz bereizitako balioak), Outlook eta vCard formatuak, baita beste formatu ezagun batzuk ere.</para>
+
+    <heading>Inportatu helbide-liburua</heading> <para>Helbide-liburu bat inportatzeko, helbide-liburuko datuak makina lokalean eduki behar dituzu (web-arakatzailea bertan exekutatzen baita). Hori egiteko, aurrena helbide-liburuko informazioa esportatu behar duzu uneko posta elektronikotik.</para>
+
+    <para>Outlook Express erabiltzen baduzu:</para> <para>1) Hautatu Fitxategia &gt; Esportatu &gt; Helbide-liburua</para> <para>2) Hautatu "Helbide-liburua esportatzeko tresnak" aukerako "Testu-fitxategia" (Komaz bereizitako balioak). Egin klik "Esportatu" aukeran.</para> <para>3) "Gorde honela esportatutako fitxategia" eremuan, idatzi zure helbide-liburuaren izena. Egin klik "Hurrengoa" aukeran.</para> <para>4) Jarri hautamarka bat esportatu nahi duzun eremu bakoitzaren ezkerrean dagoen koadroan. Egin klik "Amaitu" aukeran.</para> <para>5) 'Helbide-liburuaren esportazio-prozesua amaitu da' adierazten duen mezu bat jasoko duzu. Sakatu 'Ados'.</para> <para>6) Sakatu ''Helbide-liburua esportatzeko tresnak" aukerako "Itxi" botoia eta itxi Outlook Express.</para>
+
+    <tip>Esportatutako helbide-liburuko fitxategia ez badago zure mahaigainean eta Windows sistema eragilea erabiltzen ari bazara, sakatu Hasi &gt; Bilatu&gt; Karpetak eta bilatu 3. urratsean idatzi duzun fitxategi-izena disko gogorrean. Idatzi ohar batean fitxategiaren kokapena.</tip>
+
+    <para>Helbide-liburu bat inportatzeko, ireki inportatu nahi duzun helbide-liburua, informazioa bertan jartzeko. Egin klik "Inportatu/Esportatu" ikonoan. Hautatu hautapen-zerrendatik inportatu nahi duzun datu-fitxategiko helbidearen informazioa. Egin klik "arakatzailea" botoian, helbidearen datu-fitxategia bilatzeko zure ordenagailuan. Hautatu fitxategia eta egin klik "Inportatu" botoian. Fitxategiko informazioa helbide-liburura inportatuko da.</para> <tip>Sarrera konplexu batzuk edo zure helbide-liburuko eremuekin bat ez datozen eremuak dauzkaten sarrera batzuk, agian, ez dira behar bezala inportatuko. Inportazio bat egin ondoren, inportatutako datuak egiaztatu beharko zenituzke.</tip></entry>
+
+<entry id="searching-search_results" md5="ffed8d72fa3b710df8e902c2493b254f" state="uptodate">
+    <title>Bilaketa: Bilaketaren emaitzak</title>
+    <heading>Bilaketaren emaitzak</heading> <para>Bilaketak emaitzaren bat ematen badu, "Bilaketaren emaitzak" arean azalduko dira.</para> <para>"Posta elektronikoa" sarreraren eremuan klik eginez, mezu berria idazteko leiho bat irekiko da, helbide horretara mezu bat bidaltzeko. "Izena" sarreraren eremuan klik eginez, izen horren helbide-liburua bistaratuko da. Horrela, sarrera hori editatu edo ezabatu ahal izango duzu.</para> <para>Zure administratzailearen sistema ezartzeko moduaren arabera, emaitzak metagarriak izan daitezke. Bilaketa bakoitzak ematen duen edozein emaitza lehendik dauden emaitzekin batera agertuko da. Hori lagungarria da zerrendak eraikitzean. Metatutako bilaketen emaitzak kentzeko eta beste bilaketa bat egiteko, egin klik "Garbitu bilaketa" estekan.</para>
+
+    <tip>Sarreren zerrenda bat ikustean, sarrerak ordena ditzakezu dauden eremuen arabera, zutabearen goiburu egokian klik eginez. Goranzko edo beheranzko ordenara aldatzeko, egin klik zutabearen izenburuko geziaren ikonoan.</tip></entry>
+
+</help>
diff --git a/locale/fi_FI/LC_MESSAGES/turba.mo b/locale/fi_FI/LC_MESSAGES/turba.mo
index 1ae252c..caca5ac 100644
Binary files a/locale/fi_FI/LC_MESSAGES/turba.mo and b/locale/fi_FI/LC_MESSAGES/turba.mo differ
diff --git a/locale/fr_FR/LC_MESSAGES/turba.mo b/locale/fr_FR/LC_MESSAGES/turba.mo
index e9598d1..5f48e18 100644
Binary files a/locale/fr_FR/LC_MESSAGES/turba.mo and b/locale/fr_FR/LC_MESSAGES/turba.mo differ
diff --git a/locale/ja_JP/LC_MESSAGES/turba.mo b/locale/ja_JP/LC_MESSAGES/turba.mo
index b3b2f0a..660c9d8 100644
Binary files a/locale/ja_JP/LC_MESSAGES/turba.mo and b/locale/ja_JP/LC_MESSAGES/turba.mo differ
diff --git a/locale/nl_NL/LC_MESSAGES/turba.mo b/locale/nl_NL/LC_MESSAGES/turba.mo
index 85c9269..6f94eb6 100644
Binary files a/locale/nl_NL/LC_MESSAGES/turba.mo and b/locale/nl_NL/LC_MESSAGES/turba.mo differ
diff --git a/locale/pt_BR/LC_MESSAGES/turba.mo b/locale/pt_BR/LC_MESSAGES/turba.mo
index c0b0fbd..47fcf24 100644
Binary files a/locale/pt_BR/LC_MESSAGES/turba.mo and b/locale/pt_BR/LC_MESSAGES/turba.mo differ
diff --git a/locale/sk_SK/LC_MESSAGES/turba.mo b/locale/sk_SK/LC_MESSAGES/turba.mo
index 805e9e8..847400a 100644
Binary files a/locale/sk_SK/LC_MESSAGES/turba.mo and b/locale/sk_SK/LC_MESSAGES/turba.mo differ
diff --git a/locale/tr_TR/LC_MESSAGES/turba.mo b/locale/tr_TR/LC_MESSAGES/turba.mo
index 0165106..d6264b2 100644
Binary files a/locale/tr_TR/LC_MESSAGES/turba.mo and b/locale/tr_TR/LC_MESSAGES/turba.mo differ
diff --git a/locale/uk_UA/LC_MESSAGES/turba.mo b/locale/uk_UA/LC_MESSAGES/turba.mo
index 843f0d5..967cb72 100644
Binary files a/locale/uk_UA/LC_MESSAGES/turba.mo and b/locale/uk_UA/LC_MESSAGES/turba.mo differ
diff --git a/po/de_DE.po b/po/de_DE.po
index 5a90f22..126ac3f 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,13 +7,14 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Turba 2.2-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-06-13 23:43+0200\n"
-"PO-Revision-Date: 2008-06-13 23:45+0200\n"
+"POT-Creation-Date: 2008-09-25 12:32+0200\n"
+"PO-Revision-Date: 2008-09-06 12:20+0200\n"
 "Last-Translator: Jan Schneider <jan at horde.org>\n"
 "Language-Team: German <i18n 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"
 
 #: templates/prefs/imsp_opt.inc:40
 msgid " Add an IMSP Address Book"
@@ -23,19 +24,19 @@ msgstr "IMSP-Adressbuch hinzuf
 msgid " Delete IMSP Address Book"
 msgstr "IMSP-Adressbuch löschen"
 
-#: data.php:367
+#: data.php:455
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr "\"%s\" existiert bereits und wurde nicht importiert."
 
-#: lib/Forms/EditContact.php:76
+#: lib/Forms/EditContact.php:83
 #, php-format
 msgid "\"%s\" updated, but saving the uploaded file failed: %s"
 msgstr ""
 "\"%s\" wurde aktualisiert, aber die hochgeladene Datei konnte nicht "
 "gespeichert werden: %s"
 
-#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
 #, php-format
 msgid "\"%s\" updated."
 msgstr "\"%s\" aktualisiert."
@@ -58,30 +59,30 @@ msgstr "\"Vorname Nachname\" (z.B. Max Mustermann)"
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr "\"Nachname, Vorname\" (z.B. Mustermann, Max)"
 
-#: lib/Forms/AddContact.php:83
+#: lib/Driver.php:619
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s von %s"
+
+#: lib/Forms/AddContact.php:88
 #, php-format
 msgid "%s added."
 msgstr "%s hinzugefügt."
 
-#: data.php:392
+#: data.php:483
 #, php-format
 msgid "%s file successfully imported."
 msgstr "Die %s-Datei wurde erfolgreich importiert."
 
-#: lib/Driver.php:578
-#, php-format
-msgid "%s of %s"
-msgstr "%s von %s"
-
 #: templates/list/numPager.inc:6
 #, php-format
 msgid "%s to %s of %s"
 msgstr "%s bis %s von %s"
 
-#: lib/Turba.php:560
+#: lib/Turba.php:541
 #, php-format
 msgid "%s's Address Book"
-msgstr "%ss Adressbuch"
+msgstr "Adressbuch von %s"
 
 #: lib/Block/minisearch.php:44
 msgid "A browser that supports iframes is required"
@@ -112,7 +113,7 @@ msgstr "Datei hinzuf
 msgid "Add to"
 msgstr "Hinzufügen zu"
 
-#: lib/Driver.php:1959 lib/Driver/null.php:57
+#: lib/Driver.php:2113 lib/Driver/null.php:57
 msgid "Adding contacts is not available."
 msgstr "Hinzufügen von Kontakten nicht unterstützt."
 
@@ -132,7 +133,7 @@ msgstr "Adressbuchliste"
 msgid "Address Books"
 msgstr "Adressbücher"
 
-#: data.php:347
+#: data.php:435
 msgid "Address book successfully purged."
 msgstr "Adressbuch wurde erfolgreich geleert."
 
@@ -141,7 +142,7 @@ msgstr "Adressbuch wurde erfolgreich geleert."
 msgid "Address books that will not be displayed:"
 msgstr "Adressbücher, die nicht angezeigt werden:"
 
-#: search.php:199 templates/browse/search.inc:47
+#: search.php:184 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Erweiterte Suche"
 
@@ -153,7 +154,7 @@ msgstr "Spitzname"
 msgid "All"
 msgstr "Alle"
 
-#: lib/api.php:916
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr "Existiert bereits"
 
@@ -174,11 +175,11 @@ msgstr "Sind Sie sicher, dass Sie %s l
 msgid "Are you sure that you want to delete the selected contacts?"
 msgstr "Sind Sie sicher, dass Sie die ausgewählten Kontakte löschen möchten?"
 
-#: config/attributes.php.dist:378
+#: config/attributes.php.dist:424
 msgid "Assistant"
 msgstr "Assistent"
 
-#: search.php:196 templates/browse/search.inc:46
+#: search.php:181 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "Einfache Suche"
 
@@ -195,7 +196,7 @@ msgstr "Geburtstag"
 msgid "Birthdays"
 msgstr "Geburtstage"
 
-#: contact.php:106 templates/browse/row.inc:6
+#: contact.php:128 templates/browse/row.inc:10
 msgid "Blank name"
 msgstr "Leerer Name"
 
@@ -208,11 +209,11 @@ msgstr "Beides"
 msgid "Browse"
 msgstr "Liste"
 
-#: config/attributes.php.dist:288
+#: config/attributes.php.dist:300
 msgid "Business Category"
 msgstr "Geschäftskategorie"
 
-#: data.php:86
+#: data.php:101
 msgid "CSV"
 msgstr "CSV"
 
@@ -229,7 +230,7 @@ msgstr "Abbrechen"
 msgid "Cannot delete all address book entries for %s"
 msgstr "Es konnten nicht alle Adressbucheinträge für %s gelöscht werden"
 
-#: config/attributes.php.dist:350
+#: config/attributes.php.dist:388
 msgid "Category"
 msgstr "Kategorie"
 
@@ -297,58 +298,59 @@ msgstr "Kommagetrennte Werte"
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "Kommagetrennte Werte (Microsoft Outlook)"
 
-#: config/attributes.php.dist:476
+#: config/attributes.php.dist:522
 msgid "Common Address Extended"
 msgstr "Erweiterte Adresse allgemein"
 
-#: config/attributes.php.dist:494
+#: config/attributes.php.dist:540
 msgid "Common City"
 msgstr "Stadt allgemein"
 
-#: config/attributes.php.dist:512
+#: config/attributes.php.dist:558
 msgid "Common Country"
 msgstr "Land allgemein"
 
-#: config/attributes.php.dist:420
+#: config/attributes.php.dist:466
 msgid "Common Phone"
 msgstr "Telefon allgemein"
 
-#: config/attributes.php.dist:488
+#: config/attributes.php.dist:534
 msgid "Common Post Office Box"
 msgstr "Postfach allgemein"
 
-#: config/attributes.php.dist:506
+#: config/attributes.php.dist:552
 msgid "Common Postal Code"
 msgstr "Postleitzahl allgemein"
 
-#: config/attributes.php.dist:500
+#: config/attributes.php.dist:546
 msgid "Common State/Province"
 msgstr "Bundesstaat oder Provinz allgemein"
 
-#: config/attributes.php.dist:482
+#: config/attributes.php.dist:528
 msgid "Common Street"
 msgstr "Straße allgemein"
 
-#: config/attributes.php.dist:445
+#: config/attributes.php.dist:491
 msgid "Common Video Call"
 msgstr "Bildtelefon allgemein"
 
-#: config/sources.php.dist:243 config/sources.php.dist:922
+#: config/sources.php.dist:256 config/sources.php.dist:948
 msgid "Communications"
 msgstr "Kommunikation"
 
-#: config/attributes.php.dist:294
+#: config/attributes.php.dist:306
 msgid "Company"
 msgstr "Firma"
 
-#: config/attributes.php.dist:223
+#: config/attributes.php.dist:235
 msgid "Company Address"
 msgstr "Firmenadresse"
 
-#: scripts/import_squirrelmail_abook.php:112 lib/api.php:523 lib/api.php:577
-#: lib/api.php:630 lib/api.php:678 lib/api.php:733 lib/api.php:792
-#: lib/api.php:842 lib/api.php:978 lib/api.php:1070 lib/api.php:1136
-#: lib/api.php:1251 lib/api.php:1484 lib/api.php:1561 lib/api.php:1710
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
 #, php-format
 msgid "Connection failed: %s"
 msgstr "Verbindung fehlgeschlagen: %s"
@@ -361,7 +363,7 @@ msgstr "Verbindung fehlgeschlagen"
 msgid "Contact Search"
 msgstr "Kontaktsuche"
 
-#: config/sources.php.dist:851
+#: config/sources.php.dist:866
 msgid "Contacts"
 msgstr "Kontakte"
 
@@ -369,7 +371,7 @@ msgstr "Kontakte"
 msgid "Contacts displayed:"
 msgstr "Angezeigte Kontakte:"
 
-#: lib/Views/Browse.php:339
+#: lib/Views/Browse.php:346
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "Kontakte in Liste: %s"
@@ -390,7 +392,7 @@ msgstr "Adressbuch Erstellen"
 msgid "Create a new Address Book"
 msgstr "Neues Adressbuch erstellen"
 
-#: lib/ListView.php:447
+#: lib/ListView.php:448
 msgid "Create a new Contact List in:"
 msgstr "Neue Kontaktliste anlegen in:"
 
@@ -398,7 +400,7 @@ msgstr "Neue Kontaktliste anlegen in:"
 msgid "Created"
 msgstr "Erstellt"
 
-#: contact.php:89
+#: contact.php:95
 msgid "De_lete"
 msgstr "_Löschen"
 
@@ -413,7 +415,7 @@ msgstr "L
 msgid "Delete %s"
 msgstr "%s löschen"
 
-#: lib/api.php:621
+#: lib/api.php:644
 msgid "Delete denied."
 msgstr "Löschen nicht erlaubt."
 
@@ -422,7 +424,7 @@ msgstr "L
 msgid "Delete failed: (%s) %s"
 msgstr "Löschen fehlgeschlagen: (%s) %s"
 
-#: lib/Driver.php:1967 lib/Driver/null.php:62
+#: lib/Driver.php:2121 lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
 msgstr "Löschen von Kontakten nicht unterstützt."
 
@@ -430,7 +432,7 @@ msgstr "L
 msgid "Deletion failed"
 msgstr "Löschen ist fehlgeschlagen"
 
-#: config/attributes.php.dist:300
+#: config/attributes.php.dist:312
 msgid "Department"
 msgstr "Abteilung"
 
@@ -451,17 +453,17 @@ msgstr "Anzeige"
 msgid "Display Options"
 msgstr "Anzeige-Einstellungen"
 
-#: lib/Object.php:348
+#: lib/Object.php:354
 msgid "Download"
 msgstr "Herunterladen"
 
-#: templates/browse/row.inc:15 templates/browse/row.inc:16
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
 #: templates/browse/contactrow.inc:25
 msgid "Download vCard"
 msgstr "vCard herunterladen"
 
-#: templates/addressbook_list.php:31 templates/browse/row.inc:28
-#: templates/browse/row.inc:29 templates/browse/column_headers.inc:11
+#: templates/addressbook_list.php:31 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/column_headers.inc:11
 #: templates/browse/actions.inc:6 templates/browse/contactrow.inc:33
 #: addressbooks/index.php:40
 msgid "Edit"
@@ -477,20 +479,20 @@ msgstr "\"%s\" bearbeiten"
 msgid "Edit %s"
 msgstr "%s Bearbeiten"
 
-#: config/attributes.php.dist:237
+#: config/attributes.php.dist:249
 msgid "Email"
 msgstr "E-Mail-Adresse"
 
-#: config/attributes.php.dist:243
+#: config/attributes.php.dist:255
 msgid "Emails"
 msgstr "E-Mail-Adressen"
 
-#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
 #, php-format
 msgid "Error adding %d contact(s) to list."
 msgstr "Fehler beim Hinzufügen von %d Kontakten zur Liste."
 
-#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
 msgstr "Fehler beim Hinzufügen von %d von %d Kontakten zur Liste."
@@ -515,7 +517,7 @@ msgstr "Fehler beim Entfernen von %d Kontakten aus der Liste."
 msgid "Error removing %d of %d requested contact(s) from list."
 msgstr "Fehler beim Entfernen von %d von %d Kontakten aus der Liste."
 
-#: lib/api.php:684
+#: lib/api.php:707
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr "Das Adressbuch konnte nicht durchsucht werden: %s"
@@ -536,7 +538,7 @@ msgstr "Nur die ausgew
 msgid "Export the following address book completely."
 msgstr "Das folgende Adressbuch komplett exportieren."
 
-#: data.php:159 data.php:258 data.php:336 add.php:42 search.php:121
+#: data.php:247 data.php:346 data.php:424 add.php:42 search.php:106
 #: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
@@ -547,11 +549,11 @@ msgstr "Das Adressbuch konnte nicht ge
 msgid "Failed to add %s to %s: %s"
 msgstr "%s konnte nicht zu %s hinzugefügt werden: %s"
 
-#: lib/Views/Browse.php:345
+#: lib/Views/Browse.php:352
 msgid "Failed to browse list"
 msgstr "Die Liste konnte nicht angezeigt werden"
 
-#: lib/Views/Browse.php:376
+#: lib/Views/Browse.php:383
 msgid "Failed to browse the directory"
 msgstr "Das Verzeichnis konnte nicht angezeigt werden"
 
@@ -568,20 +570,20 @@ msgid "Failed to find object to be added: %s"
 msgstr ""
 "Das Objekt, das hinzugefügt werden sollte, konnte nicht gefunden werden: %s"
 
-#: search.php:190
+#: search.php:175
 msgid "Failed to search the address book"
 msgstr "Das Adressbuch konnte nicht durchsucht werden"
 
-#: data.php:174
+#: data.php:262
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "Das Verzeichnis %s konnte nicht durchsucht werden."
 
-#: config/sources.php.dist:550
+#: config/sources.php.dist:565
 msgid "Favourite Recipients"
 msgstr "Häufigste Empfänger"
 
-#: config/attributes.php.dist:264
+#: config/attributes.php.dist:276
 msgid "Fax"
 msgstr "Fax"
 
@@ -593,7 +595,7 @@ msgstr "Dateien"
 msgid "Find"
 msgstr "Durchsuchen von "
 
-#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
 msgid "Finish"
 msgstr "Beenden"
 
@@ -601,7 +603,7 @@ msgstr "Beenden"
 msgid "First Name"
 msgstr "Vorname"
 
-#: config/attributes.php.dist:326
+#: config/attributes.php.dist:350
 msgid "Freebusy URL"
 msgstr "Frei-/Gebucht-URL"
 
@@ -609,83 +611,83 @@ msgstr "Frei-/Gebucht-URL"
 msgid "From"
 msgstr "Von"
 
-#: config/attributes.php.dist:384
+#: config/attributes.php.dist:430
 msgid "Gender"
 msgstr "Geschlecht"
 
-#: config/sources.php.dist:776
+#: config/sources.php.dist:791
 msgid "Global Address Book"
 msgstr "Allgemeines Adressbuch"
 
-#: templates/browse/row.inc:49 templates/browse/contactrow.inc:44
+#: templates/browse/row.inc:61 templates/browse/contactrow.inc:44
 msgid "Group"
 msgstr "Gruppe"
 
-#: config/attributes.php.dist:123
+#: config/attributes.php.dist:135
 msgid "Home Address"
 msgstr "Adresse privat"
 
-#: config/attributes.php.dist:546
+#: config/attributes.php.dist:592
 msgid "Home Address Extended"
 msgstr "Erweiterte Adresse privat"
 
-#: config/attributes.php.dist:141
+#: config/attributes.php.dist:153
 msgid "Home City"
 msgstr "Stadt privat"
 
-#: config/attributes.php.dist:159
+#: config/attributes.php.dist:171
 msgid "Home Country"
 msgstr "Land privat"
 
-#: config/attributes.php.dist:414
+#: config/attributes.php.dist:460
 msgid "Home Email"
 msgstr "E-Mail-Adresse privat"
 
-#: config/attributes.php.dist:430
+#: config/attributes.php.dist:476
 msgid "Home Fax"
 msgstr "Fax privat"
 
-#: config/attributes.php.dist:552
+#: config/attributes.php.dist:598
 msgid "Home Latitude"
 msgstr "Breitengrad privat"
 
-#: config/attributes.php.dist:557
+#: config/attributes.php.dist:603
 msgid "Home Longitude"
 msgstr "Längengrad privat"
 
-#: config/attributes.php.dist:440
+#: config/attributes.php.dist:486
 msgid "Home Mobile Phone"
 msgstr "Telefon mobil privat"
 
-#: config/attributes.php.dist:249
+#: config/attributes.php.dist:261
 msgid "Home Phone"
 msgstr "Telefon privat"
 
-#: config/attributes.php.dist:135
+#: config/attributes.php.dist:147
 msgid "Home Post Office Box"
 msgstr "Postfach privat"
 
-#: config/attributes.php.dist:153
+#: config/attributes.php.dist:165
 msgid "Home Postal Code"
 msgstr "Postleitzahl privat"
 
-#: config/attributes.php.dist:147
+#: config/attributes.php.dist:159
 msgid "Home State/Province"
 msgstr "Bundesstaat oder Provinz privat"
 
-#: config/attributes.php.dist:129
+#: config/attributes.php.dist:141
 msgid "Home Street Address"
 msgstr "Straße privat"
 
-#: config/attributes.php.dist:455
+#: config/attributes.php.dist:501
 msgid "Home Video Call"
 msgstr "Bildtelefon privat"
 
-#: config/attributes.php.dist:540
+#: config/attributes.php.dist:586
 msgid "Home Website URL"
 msgstr "Website-URL privat"
 
-#: config/sources.php.dist:667
+#: config/sources.php.dist:682
 msgid "IMSP"
 msgstr "IMSP"
 
@@ -694,38 +696,38 @@ msgstr "IMSP"
 msgid "Import Address Book, Step %d"
 msgstr "Adressbuch importieren, Schritt %d"
 
-#: data.php:410
+#: data.php:501
 msgid "Import/Export Address Books"
 msgstr "Adressbücher Import/Export"
 
-#: config/attributes.php.dist:360
+#: config/attributes.php.dist:406
 msgid "Initials"
 msgstr "Initialien"
 
-#: config/attributes.php.dist:366
+#: config/attributes.php.dist:412
 msgid "Instant Messenger"
 msgstr "Instant Messenger"
 
-#: lib/api.php:973 lib/api.php:1065
+#: lib/api.php:999 lib/api.php:1132
 msgid "Invalid ID"
 msgstr "Ungültige ID"
 
-#: scripts/import_squirrelmail_abook.php:105 lib/api.php:345 lib/api.php:673
-#: lib/api.php:728 lib/api.php:787 lib/api.php:835 lib/api.php:969
-#: lib/api.php:1061 lib/api.php:1126 lib/api.php:1693
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
 #, php-format
 msgid "Invalid address book: %s"
 msgstr "Ungültiges Adressbuch: %s"
 
-#: lib/api.php:1130
+#: lib/api.php:1198
 msgid "Invalid contact unique ID"
 msgstr "Ungültige eindeutige Kontakt-ID"
 
-#: lib/api.php:1697 lib/api.php:1783 lib/api.php:1844
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
 msgid "Invalid email"
 msgstr "Ungültige E-Mail-Adresse"
 
-#: lib/api.php:1705
+#: lib/api.php:1786
 msgid "Invalid entry"
 msgstr "Ungültiger Eintrag"
 
@@ -733,15 +735,15 @@ msgstr "Ung
 msgid "Invalid key specified."
 msgstr "Ungültiger Schlüssel angegeben."
 
-#: lib/api.php:1701
+#: lib/api.php:1782
 msgid "Invalid name"
 msgstr "Ungültiger Name"
 
-#: config/attributes.php.dist:276
+#: config/attributes.php.dist:288
 msgid "Job Title"
 msgstr "Position"
 
-#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
 #, php-format
 msgid "Key for saving must be a UID not %s!"
 msgstr "Der Schlüssel fürs Speichern muss eine UID sein, kein(e) %s!"
@@ -753,11 +755,11 @@ msgstr ""
 "LDAP-Unterstützung wird benötigt, aber das LDAP-Modul ist nicht verfügbar "
 "oder wurde nicht geladen."
 
-#: data.php:91 templates/data/import.inc:18 templates/data/export.inc:16
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
 msgid "LDIF Address Book"
 msgstr "LDIF-Adressbuch"
 
-#: config/attributes.php.dist:390
+#: config/attributes.php.dist:436
 msgid "Language"
 msgstr "Sprache"
 
@@ -769,7 +771,7 @@ msgstr "Letzte 
 msgid "Last Name"
 msgstr "Nachname"
 
-#: config/attributes.php.dist:396
+#: config/attributes.php.dist:442
 msgid "Latitude"
 msgstr "Breitengrad"
 
@@ -777,15 +779,23 @@ msgstr "Breitengrad"
 msgid "List"
 msgstr "Liste"
 
-#: config/sources.php.dist:238 config/sources.php.dist:918
+#: config/sources.php.dist:251 config/sources.php.dist:944
 msgid "Location"
 msgstr "Ort"
 
-#: config/attributes.php.dist:401
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "Logo"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr "Logo-Dateityp"
+
+#: config/attributes.php.dist:447
 msgid "Longitude"
 msgstr "Längengrad"
 
-#: lib/api.php:593
+#: lib/api.php:616
 msgid "Malformed request."
 msgstr "Ungültige Anfrage."
 
@@ -793,15 +803,19 @@ msgstr "Ung
 msgid "Manage Address Books"
 msgstr "Adressbücher-Verwaltung"
 
-#: config/attributes.php.dist:372
+#: config/attributes.php.dist:418
 msgid "Manager"
 msgstr "Vorgesetzter"
 
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Diesen Kontakt als Ihre Visitenkarte markieren"
+
 #: templates/browse/search.inc:109
 msgid "Matching"
 msgstr "nach"
 
-#: lib/api.php:306
+#: lib/api.php:329
 msgid "Maximum Number of Contacts"
 msgstr "Maximale Anzahl an Kontakten"
 
@@ -821,7 +835,7 @@ msgstr "Weitere Namen"
 msgid "Missing DN in LDAP source configuration."
 msgstr "DN fehlt in der LDAP-Konfiguration."
 
-#: config/attributes.php.dist:259
+#: config/attributes.php.dist:271
 msgid "Mobile Phone"
 msgstr "Telefon mobil"
 
@@ -834,7 +848,7 @@ msgstr "
 msgid "More Options..."
 msgstr "Weitere Optionen..."
 
-#: lib/api.php:1821
+#: lib/api.php:1902
 msgid "More than 1 entry found"
 msgstr "Mehr als 1 Eintrag zurückgeliefert"
 
@@ -850,11 +864,11 @@ msgstr "Nach links"
 msgid "Move right"
 msgstr "Nach rechts"
 
-#: data.php:89 templates/data/import.inc:16
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr "Mulberry-Adressbuch"
 
-#: lib/api.php:1729
+#: lib/api.php:1810
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
@@ -862,7 +876,7 @@ msgstr ""
 "Mehrere Personen mit der Adresse [%s], aber keine mit dem Namen [%s] im "
 "Adressbuch"
 
-#: config/sources.php.dist:162
+#: config/sources.php.dist:167
 msgid "My Address Book"
 msgstr "Mein Adressbuch"
 
@@ -887,12 +901,12 @@ msgstr "Titel nach dem Namen"
 msgid "Name:"
 msgstr "Name:"
 
-#: add.php:70 lib/Block/tree_menu.php:27
+#: add.php:70 lib/Block/tree_menu.php:28
 msgid "New Contact"
 msgstr "Neuer Kontakt"
 
-#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
-#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
 msgid "Next"
 msgstr "Weiter"
 
@@ -900,26 +914,26 @@ msgstr "Weiter"
 msgid "Nickname"
 msgstr "Spitzname"
 
-#: lib/api.php:1824 lib/api.php:1884
+#: lib/api.php:1905 lib/api.php:1965
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "Es wurde kein %s Eintrag für %s gefunden"
 
-#: data.php:78
+#: data.php:93
 msgid ""
 "No Address Books are currently available. Import and Export is disabled."
 msgstr ""
 "Zur Zeit sind keine Adressbücher verfügbar. Import und Export stehen nicht "
 "zur Verfügung."
 
-#: search.php:107
+#: search.php:92
 msgid "No Address Books are currently available. Searching is disabled."
 msgstr ""
 "Zur Zeit sind keine Adressbücher verfügbar. Die Suche steht nicht zur "
 "Verfügung."
 
-#: lib/api.php:667 lib/api.php:722 lib/api.php:782 lib/api.php:964
-#: lib/api.php:1056 lib/api.php:1121
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
 msgid "No address book specified"
 msgstr "Kein Adressbuch angegeben"
 
@@ -939,7 +953,7 @@ msgstr "Keine passende Kontakte"
 msgid "No source for favourite recipients exists."
 msgstr "Es existiert keine Quelle für häufigste Empfänger."
 
-#: lib/api.php:868 lib/api.php:1166
+#: lib/api.php:893 lib/api.php:1235
 msgid "No vCard data was found."
 msgstr "Es wurden keine vCard-Daten gefunden."
 
@@ -956,7 +970,7 @@ msgstr "Nicht gefunden"
 msgid "Not found"
 msgstr "Nicht gefunden"
 
-#: config/attributes.php.dist:314
+#: config/attributes.php.dist:338
 msgid "Notes"
 msgstr "Bemerkungen"
 
@@ -964,20 +978,20 @@ msgstr "Bemerkungen"
 msgid "Number of items per page"
 msgstr "Anzahl der Einträge pro Seite"
 
-#: lib/api.php:1015 lib/api.php:1191
+#: lib/api.php:1041 lib/api.php:1260
 msgid "Object not found"
 msgstr "Objekt nicht gefunden"
 
-#: lib/Driver/kolab.php:1184
+#: lib/Driver/kolab.php:1199
 #, php-format
 msgid "Object with UID %s does not exist!"
 msgstr "Objekt mit der UID %s existiert nicht!"
 
-#: config/attributes.php.dist:282
+#: config/attributes.php.dist:294
 msgid "Occupation"
 msgstr "Beruf"
 
-#: config/attributes.php.dist:306
+#: config/attributes.php.dist:318
 msgid "Office"
 msgstr "Büro"
 
@@ -991,27 +1005,27 @@ msgstr ""
 "endgültig gelöscht. Wenn Sie das nicht möchten, ändern Sie Ihre Auswahl auf "
 "\"kein\"."
 
-#: lib/api.php:1174
+#: lib/api.php:1243
 msgid "Only one vcard supported."
 msgstr "Nur einzelne vCards werden unterstützt."
 
-#: config/sources.php.dist:245 config/sources.php.dist:924
+#: config/sources.php.dist:258 config/sources.php.dist:950
 msgid "Organization"
 msgstr "Firma"
 
-#: config/sources.php.dist:246 config/sources.php.dist:926
+#: config/sources.php.dist:259 config/sources.php.dist:952
 msgid "Other"
 msgstr "Sonstige"
 
-#: config/attributes.php.dist:332
+#: config/attributes.php.dist:356
 msgid "PGP Public Key"
 msgstr "Öffentlicher PGP-Schlüssel"
 
-#: config/attributes.php.dist:471
+#: config/attributes.php.dist:517
 msgid "PTT"
 msgstr "PTT"
 
-#: config/attributes.php.dist:269
+#: config/attributes.php.dist:281
 msgid "Pager"
 msgstr "Pager"
 
@@ -1019,16 +1033,24 @@ msgstr "Pager"
 msgid "Permanently delete this contact?"
 msgstr "Diesen Kontakt unwiederbringlich löschen?"
 
-#: deletefile.php:36 lib/Driver.php:759 lib/api.php:846 lib/api.php:1714
-#: lib/Driver/sql.php:486
+#: deletefile.php:36 lib/Driver.php:804 lib/api.php:870 lib/api.php:1795
+#: lib/Driver/sql.php:515
 msgid "Permission denied"
 msgstr "Zugriff verweigert"
 
-#: config/sources.php.dist:235 config/sources.php.dist:914
+#: config/sources.php.dist:248 config/sources.php.dist:940
 msgid "Personal"
 msgstr "Persönlich"
 
-#: data.php:90 templates/data/import.inc:17
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "Foto"
+
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr "Foto-Dateityp"
+
+#: data.php:105 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr "Pine-Adressbuch"
 
@@ -1036,8 +1058,8 @@ msgstr "Pine-Adressbuch"
 msgid "Please name the new contact list:"
 msgstr "Bitte einen Namen für die neue Kontakliste angeben:"
 
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:167
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
 msgid "Previous"
 msgstr "Zurück"
 
@@ -1051,7 +1073,7 @@ msgstr "Abfrage fehlgeschlagen: (%s) %s"
 msgid "Read failed: (%s) %s"
 msgstr "Lesen fehlgeschlagen: (%s) %s"
 
-#: lib/Driver.php:1951 lib/Driver/null.php:52
+#: lib/Driver.php:2105 lib/Driver/null.php:52
 msgid "Reading contacts is not available."
 msgstr "Anzeigen von Kontakten nicht unterstützt."
 
@@ -1073,7 +1095,7 @@ msgstr "Adressbuch entfernen"
 msgid "Remove from this list"
 msgstr "Aus dieser Liste entfernen"
 
-#: lib/Driver.php:1989
+#: lib/Driver.php:2143
 msgid ""
 "Removing user data is not supported in the current address book storage "
 "driver."
@@ -1089,7 +1111,7 @@ msgstr ""
 "Existierendes Adressbuch mit dem importierten ersetzen? <strong>Warnung: "
 "Damit werden alle aktuellen Einträge in dem Adressbuch gelöscht.</strong>"
 
-#: lib/Driver.php:653
+#: lib/Driver.php:698
 msgid "Requested object not found."
 msgstr "Gewünschtes Objekt nicht gefunden."
 
@@ -1097,11 +1119,11 @@ msgstr "Gew
 msgid "Reset to Defaults"
 msgstr "Zurücksetzen"
 
-#: config/attributes.php.dist:338
+#: config/attributes.php.dist:362
 msgid "S/MIME Public Certificate"
 msgstr "Öffentliches S/MIME-Zertifikat"
 
-#: config/attributes.php.dist:465
+#: config/attributes.php.dist:511
 msgid "SIP"
 msgstr "SIP"
 
@@ -1118,21 +1140,21 @@ msgstr "Speichern"
 msgid "Save search as a virtual address book?"
 msgstr "Suche als Virtuelles Adressbuch speichern?"
 
-#: lib/Driver.php:1977 lib/Driver/null.php:67
+#: lib/Driver.php:2131 lib/Driver/null.php:67
 msgid "Saving contacts is not available."
 msgstr "Speichern von Kontakten nicht unterstützt."
 
 #: templates/browse/search.inc:111 templates/browse/search.inc:119
 #: templates/browse/header.inc:3 templates/block/minisearch.inc:25
-#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
 msgid "Search"
 msgstr "Suche"
 
-#: lib/api.php:1489
+#: lib/api.php:1568
 msgid "Search failed"
 msgstr "Suche fehlgeschlagen"
 
-#: lib/api.php:1719 lib/api.php:1725 lib/api.php:1734 lib/api.php:1747
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
 #, php-format
 msgid "Search failed: %s"
 msgstr "Suche fehlgeschlagen: %s"
@@ -1141,11 +1163,11 @@ msgstr "Suche fehlgeschlagen: %s"
 msgid "Search for: "
 msgstr "Suchen nach: "
 
-#: lib/Driver.php:1936 lib/Driver/null.php:47
+#: lib/Driver.php:2090 lib/Driver/null.php:47
 msgid "Searching is not available."
 msgstr "Suchen von Kontakten nicht unterstützt."
 
-#: templates/browse/row.inc:40
+#: templates/browse/row.inc:52
 msgid "Select contact"
 msgstr "Kontakt auswählen"
 
@@ -1243,7 +1265,7 @@ msgstr "Sortieren nach %s, dann nach %s"
 msgid "Source:"
 msgstr "Quelle:"
 
-#: lib/api.php:299
+#: lib/api.php:322
 msgid "Sources"
 msgstr "Quellen"
 
@@ -1251,7 +1273,7 @@ msgstr "Quellen"
 msgid "Spouse"
 msgstr "Partner"
 
-#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr "%d Kontakte erfolgreich zur Liste hinzugefügt."
@@ -1261,12 +1283,12 @@ msgstr "%d Kontakte erfolgreich zur Liste hinzugef
 msgid "Successfully added %s to %s"
 msgstr "%s wurde erfolgreich zu %s hinzugefügt"
 
-#: lib/Views/Browse.php:291
+#: lib/Views/Browse.php:298
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr "Die Kontaktliste \"%s\" wurde erfolgreich erstellt."
 
-#: search.php:165
+#: search.php:150
 #, php-format
 msgid "Successfully created virtual address book \"%s\""
 msgstr "Virtuelles Adressbuch \"%s\" erfolgreich erstellt."
@@ -1281,7 +1303,7 @@ msgstr "%d Kontakte erfolgreich gel
 msgid "Successfully removed %d contact(s) from list."
 msgstr "%d Kontakte erfolgreich aus der Liste entfernt."
 
-#: data.php:87
+#: data.php:102
 msgid "TSV"
 msgstr "TSV"
 
@@ -1297,7 +1319,7 @@ msgstr "Zieladressbuch"
 msgid "Target Contact List"
 msgstr "Zielkontaktliste"
 
-#: data.php:338
+#: data.php:426
 #, php-format
 msgid "The %s file didn't contain any contacts."
 msgstr "Die %s-Datei enthielt keine Kontakte."
@@ -1308,7 +1330,7 @@ msgstr ""
 "Das VFS-Backend muss konfiguriert sein, um das Hochladen von Dateien zu "
 "erlauben."
 
-#: lib/Driver.php:1907
+#: lib/Driver.php:2061
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr "Das Adressbuch \"%s\" existiert nicht."
@@ -1318,11 +1340,15 @@ msgstr "Das Adressbuch \"%s\" existiert nicht."
 msgid "The address book \"%s\" has been created."
 msgstr "Das Adressbuch \"%s\" wurde erzeugt."
 
-#: data.php:345
+#: data.php:433
 #, php-format
 msgid "The address book could not be purged: %s"
 msgstr "Das Adressbuch konnte nicht geleert werden: %s"
 
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Das Adressbuch mit Ihrer Visitenkarte existiert nicht mehr."
+
 #: addressbooks/delete.php:50
 #, php-format
 msgid "The addressbook \"%s\" has been deleted."
@@ -1347,7 +1373,7 @@ msgstr "Der ausgew
 msgid "The file \"%s\" has been deleted."
 msgstr "Die Datei \"%s\" wurde gelöscht."
 
-#: data.php:318
+#: data.php:406
 msgid "The import can be finished despite the warnings."
 msgstr "Der Import kann trotz der Warnungen abgeschlossen werden."
 
@@ -1371,20 +1397,22 @@ msgstr ""
 "dass es sich dabei um einen Fehler handelt, wenden Sie sich bitte an Ihren "
 "System-Administrator."
 
-#: lib/Views/Browse.php:349
+#: lib/Views/Browse.php:356
 #, php-format
 msgid "There is %d contact in this list that is not viewable to you"
 msgid_plural "There are %d contacts in this list that are not viewable to you"
 msgstr[0] ""
+"In dieser Liste befindet sich %d Kontakt, den Sie nicht einsehen dürfen"
 msgstr[1] ""
+"In dieser Liste befinden sich %d Kontakte, die Sie nicht einsehen dürfen"
 
-#: search.php:161
+#: search.php:146
 #, php-format
 msgid "There was a problem creating the virtual address book: %s"
 msgstr ""
 "Beim Erstellen des Virtuellen Adressbuchs ist ein Fehler aufgetreten: %s"
 
-#: lib/Forms/AddContact.php:90
+#: lib/Forms/AddContact.php:95
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
@@ -1392,7 +1420,7 @@ msgstr ""
 "Beim Hinzufügen dieses Kontakts ist ein Fehler aufgetreten. Bitte wenden Sie "
 "sich an Ihren Systemadministrator für weitere Hilfe."
 
-#: lib/Views/Browse.php:311
+#: lib/Views/Browse.php:318
 msgid "There was an error creating a new list."
 msgstr "Beim Erstellen einer neuen Liste ist ein Fehler aufgetreten."
 
@@ -1406,25 +1434,25 @@ msgstr "Beim L
 msgid "There was an error deleting this contact: %s"
 msgstr "Beim Löschen des Kontakts ist ein Fehler aufgetreten: %s"
 
-#: lib/Views/Browse.php:355
+#: lib/Views/Browse.php:362
 msgid "There was an error displaying the list"
 msgstr "Beim Anzeigen der Liste ist ein Fehler aufgetreten"
 
-#: data.php:378
+#: data.php:469
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "Beim Importieren der Daten ist ein Fehler aufgetreten: %s"
 
-#: lib/api.php:864 lib/api.php:1161
+#: lib/api.php:889 lib/api.php:1230
 msgid "There was an error importing the iCalendar data."
 msgstr "Beim Importieren der iCalendar Daten ist ein Fehler aufgetreten."
 
-#: lib/api.php:235
+#: lib/api.php:258
 #, php-format
 msgid "There was an error removing an address book for %s"
 msgstr "Beim Löschen eines Adressbuchs von %s ist ein Fehler aufgetreten"
 
-#: lib/Forms/EditContact.php:86
+#: lib/Forms/EditContact.php:93
 msgid ""
 "There was an error saving the contact. Contact your system administrator for "
 "further help."
@@ -1432,7 +1460,7 @@ msgstr ""
 "Beim Speichern des Kontaktes ist ein Fehler aufgetreten. Bitte wenden Sie "
 "sich an Ihren Systemadministrator für weitere Hilfe."
 
-#: data.php:204
+#: data.php:292
 msgid "There were no addresses to export."
 msgstr "Es konnten keine Adressen zum Exportieren gefunden werden."
 
@@ -1445,11 +1473,15 @@ msgstr "Diese Adressb
 msgid "This addressbook cannot be deleted"
 msgstr "Dieses Adressbuch kann nicht gelöscht werden"
 
-#: data.php:303
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Der Kontakt wurde als Ihre Visitenkarte markiert."
+
+#: data.php:391
 msgid "This file format is not supported."
 msgstr "Dieses Dateiformat wird nicht unterstützt."
 
-#: lib/api.php:1738 lib/api.php:1751
+#: lib/api.php:1819 lib/api.php:1832
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr "Diese Person hat bereits einen %s-Eintrag in Ihrem Adressbuch"
@@ -1461,7 +1493,7 @@ msgstr ""
 "Dies wird als Standardadressbuch für das Hinzufügen oder Importieren von "
 "Kontakten benutzt."
 
-#: config/attributes.php.dist:229
+#: config/attributes.php.dist:241
 msgid "Time Zone"
 msgstr "Zeitzone"
 
@@ -1469,7 +1501,7 @@ msgstr "Zeitzone"
 msgid "Unable to find contact owner."
 msgstr "Kontaktbesitzer konnte nicht gefunden werden."
 
-#: lib/Driver.php:1829 lib/Turba.php:676
+#: lib/Driver.php:1981 lib/Turba.php:659
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "Der %s-Treiber konnte nicht geladen werden."
@@ -1483,11 +1515,11 @@ msgstr "Das Adressbuch \"%s\" kann nicht gespeichert werden: %s"
 msgid "Unable to search."
 msgstr "Suche nicht möglich."
 
-#: config/attributes.php.dist:353
+#: config/attributes.php.dist:391
 msgid "Unfiled"
 msgstr "Nicht zugeordnet"
 
-#: lib/api.php:902 lib/api.php:1012 lib/api.php:1179
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr "Nicht unterstützter Inhaltstyp: %s"
@@ -1505,75 +1537,75 @@ msgstr "Kontakt anzeigen"
 msgid "View to display by default:"
 msgstr "Standardansicht:"
 
-#: config/attributes.php.dist:460
+#: config/attributes.php.dist:506
 msgid "VoIP"
 msgstr "VoIP"
 
-#: config/attributes.php.dist:320
+#: config/attributes.php.dist:344
 msgid "Website URL"
 msgstr "Website-URL"
 
-#: config/attributes.php.dist:173
+#: config/attributes.php.dist:185
 msgid "Work Address"
 msgstr "Adresse geschäftlich"
 
-#: config/attributes.php.dist:524
+#: config/attributes.php.dist:570
 msgid "Work Address Extended"
 msgstr "Erweiterte Adresse geschäftlich"
 
-#: config/attributes.php.dist:191
+#: config/attributes.php.dist:203
 msgid "Work City"
 msgstr "Stadt geschäftlich"
 
-#: config/attributes.php.dist:209
+#: config/attributes.php.dist:221
 msgid "Work Country"
 msgstr "Land geschäftlich"
 
-#: config/attributes.php.dist:408
+#: config/attributes.php.dist:454
 msgid "Work Email"
 msgstr "E-Mail-Adresse geschäftlich"
 
-#: config/attributes.php.dist:425
+#: config/attributes.php.dist:471
 msgid "Work Fax"
 msgstr "Fax geschäftlich"
 
-#: config/attributes.php.dist:530
+#: config/attributes.php.dist:576
 msgid "Work Latitude"
 msgstr "Breitengrad geschäftlich"
 
-#: config/attributes.php.dist:535
+#: config/attributes.php.dist:581
 msgid "Work Longitude"
 msgstr "Längengrad geschäftlich"
 
-#: config/attributes.php.dist:435
+#: config/attributes.php.dist:481
 msgid "Work Mobile Phone"
 msgstr "Telefon mobil geschäftlich"
 
-#: config/attributes.php.dist:254
+#: config/attributes.php.dist:266
 msgid "Work Phone"
 msgstr "Telefon geschäftlich"
 
-#: config/attributes.php.dist:185
+#: config/attributes.php.dist:197
 msgid "Work Post Office Box"
 msgstr "Postfach geschäftlich"
 
-#: config/attributes.php.dist:203
+#: config/attributes.php.dist:215
 msgid "Work Postal Code"
 msgstr "Postleitzahl geschäftlich"
 
-#: config/attributes.php.dist:197
+#: config/attributes.php.dist:209
 msgid "Work State/Province"
 msgstr "Bundesstaat oder Provinz geschäftlich"
 
-#: config/attributes.php.dist:179
+#: config/attributes.php.dist:191
 msgid "Work Street Address"
 msgstr "Straße geschäftlich"
 
-#: config/attributes.php.dist:450
+#: config/attributes.php.dist:496
 msgid "Work Video Call"
 msgstr "Bildtelefon geschäftlich"
 
-#: config/attributes.php.dist:518
+#: config/attributes.php.dist:564
 msgid "Work Website URL"
 msgstr "Website-URL geschäftlich"
 
@@ -1581,7 +1613,7 @@ msgstr "Website-URL gesch
 msgid "You are not allowed to change this addressbook."
 msgstr "Sie dürfen dieses Adressbuch nicht ändern."
 
-#: data.php:267 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#: data.php:355 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:281
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
 msgstr "Sie dürfen nicht mehr als %d Kontakte in \"%s\" erstellen."
@@ -1590,7 +1622,7 @@ msgstr "Sie d
 msgid "You are not allowed to delete this addressbook."
 msgstr "Sie dürfen dieses Adressbuch nicht löschen."
 
-#: lib/api.php:198
+#: lib/api.php:204
 msgid "You are not allowed to remove user data."
 msgstr "Sie dürfen keine Benutzerdaten löschen."
 
@@ -1606,6 +1638,10 @@ msgstr "Sie k
 msgid "You cannot delete contacts from a virtual address book"
 msgstr "Sie können keine Kontakte aus Virtuellen Adressbüchern löschen"
 
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr "Sie haben noch keinen Kontakt als Ihre Visitenkarte markiert."
+
 #: edit.php:66 view.php:38 lib/Views/EditContact.php:49
 #: lib/Views/DeleteContact.php:42
 msgid "You do not have permission to view this contact."
@@ -1619,6 +1655,14 @@ msgstr "Sie haben nicht gen
 msgid "You do not have permissions to delete this address book."
 msgstr "Sie haben nicht genügend Rechte, um dieses Adressbuch zu löschen."
 
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"Sie haben nicht genügend Rechte, um das Adressbuch zu lesen, das Ihre "
+"Visitenkarte enthält."
+
 #: lib/Driver/ldap.php:741
 msgid ""
 "You must have the Net_LDAP PEAR library installed to use the schema check "
@@ -1627,7 +1671,7 @@ msgstr ""
 "Sie müssen die Net_LDAP PEAR-Bibliothek installieren, um die "
 "Schemaüberprüfung verwenden zu können."
 
-#: search.php:148
+#: search.php:133
 msgid "You must provide a name for virtual address books."
 msgstr "Sie müssen einen Namen für das Virtuelle Adressbuch angeben."
 
@@ -1648,15 +1692,24 @@ msgstr "Sie m
 msgid "You only have permission to view this contact."
 msgstr "Sie haben nur das Recht, diesen Kontakt anzusehen."
 
-#: lib/Views/Browse.php:362
+#: lib/Views/Browse.php:369
 msgid "Your default address book is not browseable."
 msgstr "Ihr Standard-Adressbuch kann nicht angezeigt werden."
 
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "Ihre Visitenkarte"
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr "Ihre Visitenkarte konnte in dem Adressbuch nicht gefunden werden."
+
 #: templates/browse/contactrow.inc:12
 msgid "[no value]"
 msgstr "[kein Wert]"
 
-#: lib/Turba.php:618
+#: lib/Turba.php:601
 msgid "_Browse"
 msgstr "_Liste"
 
@@ -1668,11 +1721,11 @@ msgstr "_Kontakte"
 msgid "_Delete"
 msgstr "Lös_chen"
 
-#: contact.php:85
+#: contact.php:91
 msgid "_Edit"
 msgstr "_Bearbeiten"
 
-#: lib/Turba.php:627
+#: lib/Turba.php:610
 msgid "_Import/Export"
 msgstr "_Import/Export"
 
@@ -1680,15 +1733,15 @@ msgstr "_Import/Export"
 msgid "_Lists"
 msgstr "_Listen"
 
-#: lib/Turba.php:615
+#: lib/Turba.php:598
 msgid "_My Address Books"
 msgstr "_Meine Adressbücher"
 
-#: lib/Turba.php:621
+#: lib/Turba.php:604
 msgid "_New Contact"
 msgstr "_Neuer Kontakt"
 
-#: lib/Turba.php:632
+#: lib/Turba.php:615
 msgid "_Print"
 msgstr "_Drucken"
 
@@ -1696,11 +1749,11 @@ msgstr "_Drucken"
 msgid "_Remove from this list"
 msgstr "_Aus dieser Liste entfernen"
 
-#: lib/Turba.php:623
+#: lib/Turba.php:606
 msgid "_Search"
 msgstr "_Suche"
 
-#: contact.php:82
+#: contact.php:88
 msgid "_View"
 msgstr "_Anzeigen"
 
@@ -1721,19 +1774,19 @@ msgstr "durch mich"
 msgid "contact"
 msgstr "Kontakt"
 
-#: data.php:224 data.php:229 templates/data/export.inc:1
+#: data.php:312 data.php:317 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "adressen.csv"
 
-#: data.php:249
+#: data.php:337
 msgid "contacts.ldif"
 msgstr "adressen.ldif"
 
-#: data.php:234
+#: data.php:322
 msgid "contacts.tsv"
 msgstr "adressen.tsv"
 
-#: data.php:244
+#: data.php:332
 msgid "contacts.vcf"
 msgstr "adressen.vcf"
 
@@ -1741,16 +1794,16 @@ msgstr "adressen.vcf"
 msgid "descending"
 msgstr "absteigend"
 
-#: config/attributes.php.dist:387
+#: config/attributes.php.dist:433
 msgid "female"
 msgstr "weiblich"
 
-#: lib/Block/tree_menu.php:37
+#: lib/Block/tree_menu.php:38
 #, php-format
 msgid "in %s"
 msgstr "in %s"
 
-#: config/attributes.php.dist:387
+#: config/attributes.php.dist:433
 msgid "male"
 msgstr "männlich"
 
@@ -1770,7 +1823,7 @@ msgstr "zu einer Kontaktliste"
 msgid "to a different Address Book"
 msgstr "zu einem anderen Adressbuch"
 
-#: data.php:88 templates/browse/column_headers.inc:14
+#: data.php:103 templates/browse/column_headers.inc:14
 #: templates/data/import.inc:15 templates/data/export.inc:15
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/et_EE.po b/po/et_EE.po
index b8375ab..51c5da7 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -5,107 +5,118 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Turba 2.1-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-10-18 15:12+0200\n"
-"PO-Revision-Date: 2006-03-27 23:09+0300\n"
-"Last-Translator: Toomas Aas <toomas.aas at mail.ee>\n"
+"POT-Creation-Date: 2008-05-29 15:48+0300\n"
+"PO-Revision-Date: 2008-06-05 19:27+0200\n"
+"Last-Translator: Alar SIng <alar.sing at err.ee>\n"
 "Language-Team: Estonian <dev at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-13\n"
-"Content-Transfer-Encoding: 8-bit\n"
+"Content-Transfer-Encoding: 8bit\n"
 
-#: templates/prefs/imsp_opt.inc:42
+#: templates/prefs/imsp_opt.inc:40
 msgid " Add an IMSP Address Book"
 msgstr " Lisa IMSP aadressiraamat"
 
-#: templates/prefs/imsp_opt.inc:31
+#: templates/prefs/imsp_opt.inc:29
 msgid " Delete IMSP Address Book"
 msgstr " Kustuta IMSP aadressiraamat"
 
-#: data.php:325
+#: data.php:351
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr "\"%s\" ei imporditud, kuna see oli juba olemas."
 
-#: browse.php:126
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"\"%s\" kanne uuendati, kuid serverisse laetud faili salvestamine nurjus: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" kanne muudetud."
+
+#: lib/Views/Browse.php:192
 #, php-format
 msgid "\"%s\" was not copied because it is a list."
 msgstr "\"%s\" ei kopeeritud, kuna see on list."
 
-#: browse.php:124
+#: lib/Views/Browse.php:190
 #, php-format
 msgid "\"%s\" was not moved because it is a list."
 msgstr "\"%s\" ei teisaldatud, kuna see on list."
 
-#: config/prefs.php.dist:137
+#: config/prefs.php.dist:118
 msgid "\"Firstname Lastname\"  (ie. John Doe)"
 msgstr "\"Eesnimi Perekonnanimi\" (nt. Jaan Kask)"
 
-#: config/prefs.php.dist:136
+#: config/prefs.php.dist:117
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr "\"Perekonnanimi, Eesnimi\" (nt. Kask, Jaan)"
 
-#: add.php:109
+#: lib/Forms/AddContact.php:83
 #, php-format
 msgid "%s added."
 msgstr "%s lisatud."
 
-#: data.php:343
+#: data.php:370
 #, php-format
-msgid "%s file successfully imported"
+msgid "%s file successfully imported."
 msgstr "%s faili import õnnestus"
 
-#: templates/browse/footer.inc:5
+#: templates/list/numPager.inc:6
 #, php-format
 msgid "%s to %s of %s"
 msgstr "%s kuni %s, kokku %s"
 
-#: lib/Turba.php:446
+#: lib/Turba.php:531
 #, php-format
 msgid "%s's Address Book"
 msgstr "Kasutaja %s aadressiraamat"
 
-#: lib/Block/minisearch.php:45
+#: lib/Block/minisearch.php:42
 msgid "A browser that supports iFrames is required"
 msgstr "Vajalik on iFrame toetav veebilehitseja"
 
-#: config/prefs.php.dist:159
-msgid "Above search form"
-msgstr "Otsinguvormi kohal"
-
-#: view.php:52
+#: view.php:54
 #, php-format
 msgid "Access denied to %s"
 msgstr "Puudub õigus failile %s"
 
-#: add.php:56 templates/browse/actions.inc:22
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
 msgid "Add"
 msgstr "Lisa"
 
-#: templates/prefs/addressbookselect.inc:174
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Lisa kontakt"
+
+#: templates/prefs/addressbookselect.inc:173
 msgid "Add address book"
 msgstr "Lisa aadressiraamat"
 
-#: config/prefs.php.dist:48
-msgid "Add and Delete IMSP address books"
-msgstr "Lisa ja kustuta IMSP aadressiraamatuid"
-
 #: templates/prefs/columnselect.inc:237
 msgid "Add column"
 msgstr "Lisa veerg"
 
-#: edit.php:128
+#: lib/Forms/EditContact.php:34
 msgid "Add file"
 msgstr "Lisa fail"
 
-#: templates/browse/actions.inc:22
+#: templates/browse/actions.inc:30
 msgid "Add to"
 msgstr "Lisa"
 
-#: templates/addressbooks.inc:86
+#: lib/Driver.php:1518
+msgid "Adding contacts is not available."
+msgstr "Kontaktide lisamine ei ole saadaval."
+
+#: templates/addressbooks.inc:105
 msgid "Address Book"
 msgstr "Aadressiraamat"
 
-#: browse.php:28 config/prefs.php.dist:125
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
 msgid "Address Book Listing"
 msgstr "Aadresside loend"
 
@@ -113,102 +124,141 @@ msgstr "Aadresside loend"
 msgid "Address Books"
 msgstr "Aadressiraamatud"
 
-#: add.php:108
-msgid "Address book entry"
-msgstr "Aadressiraamatu kanne"
-
-#: data.php:305
+#: data.php:331
 msgid "Address book successfully purged."
 msgstr "Aadressiraamat on tühjendatud."
 
-#: templates/addressbooks.inc:62
+#: templates/addressbooks.inc:80
 msgid "Address book to delete "
 msgstr "Kustutatav aadressiraamat "
 
-#: templates/prefs/addressbookselect.inc:170
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
 msgid "Address books that will not be displayed:"
 msgstr "Aadressiraamatud, mida ei näidata:"
 
-#: search.php:88 templates/browse/search.inc:37
+#: search.php:161 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Põhjalik otsing"
 
-#: config/attributes.php.dist:64
+#: config/attributes.php.dist:77
 msgid "Alias"
 msgstr "Alias"
 
-#: templates/browse/footerAlpha.inc:7 templates/browse/footerAlpha.inc:10
-#: templates/browse/actions.inc:41
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
 msgid "All"
 msgstr "Kõik"
 
-#: lib/api.php:552
+#: lib/api.php:725
 msgid "Already Exists"
 msgstr "On juba olemas"
 
-#: templates/browse/javascript.inc:93
+#: config/attributes.php.dist:95
+msgid "Anniversary"
+msgstr "Aastapäev"
+
+#: templates/browse/javascript.inc:85
 #, php-format
 msgid "Are you sure that you want to delete %s?"
 msgstr "Kas oled kindel, et soovid %s kustutada?"
 
-#: templates/browse/javascript.inc:67
-msgid "Are you sure that you want to delete the selected entries?"
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
 msgstr "Kas oled kindel, et soovid märgitud kanded kustutada?"
 
-#: config/prefs.php.dist:96
-msgid "Ascending"
-msgstr "Kasvav"
+#: templates/addressbooks.inc:45
+msgid "Are you sure you want to delete the addressbook: "
+msgstr "Kas oled kindel, et soovid selle aadressi raamatu kustutada:"
 
-#: search.php:85 templates/browse/search.inc:36
+#: config/attributes.php.dist:368
+msgid "Assistant"
+msgstr "Assistent"
+
+#: search.php:158 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "Lihtotsing"
 
-#: config/prefs.php.dist:158
-msgid "Below search form"
-msgstr "Otsinguvormi all"
-
-#: lib/Driver/ldap.php:77 lib/Driver/ldap.php:80
+#: lib/Driver/ldap.php:95 lib/Driver/ldap.php:98
 #, php-format
 msgid "Bind failed: (%s) %s"
 msgstr "Bind nurjus: (%s) %s"
 
-#: config/attributes.php.dist:178
+#: config/attributes.php.dist:89
 msgid "Birthday"
 msgstr "Sünnipäev"
 
-#: templates/menu.inc:7
+#: lib/Driver.php:524
+#, php-format
+msgid "Birthday of %s"
+msgstr "Sünnipäev %s"
+
+#: lib/api.php:1255
+msgid "Birthdays"
+msgstr "Sünnipäevad"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Tühi nimi"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Mõlemad"
+
+#: templates/menu.inc:8
 msgid "Browse"
 msgstr "Sirvi"
 
-#: config/attributes.php.dist:173
+#: config/attributes.php.dist:280
 msgid "Business Category"
 msgstr "Tegevusala"
 
-#: data.php:49
+#: data.php:60
 msgid "CSV"
 msgstr "CSV"
 
-#: lib/Object/Group.php:57
+#: lib/Object/Group.php:68
 msgid "Can't add a group to itself."
 msgstr "Gruppi ei saa lisada iseenda liikmeks."
 
+#: lib/Driver/kolab.php:620
+#, fuzzy, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Ava \"%s\" kanne aadressiraamatus"
+
+#: config/attributes.php.dist:342
+msgid "Category"
+msgstr "Kategooria"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Vaheta sorteerimine %s - %s vastu"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Märgi/tühjenda kõik"
+
 #: templates/browse/column_headers.inc:7
 msgid "Check _All/None"
 msgstr "Märgi/tühjenda _kõik"
 
-#: templates/addressbooks.inc:44
+#: config/attributes.php.dist:107
+msgid "Children"
+msgstr "Lapsed"
+
+#: templates/addressbooks.inc:60
 msgid "Choose a name"
 msgstr "Vali nimi"
 
-#: add.php:48
+#: lib/Forms/AddContact.php:36
 msgid "Choose an address book"
 msgstr "Vali aadressiraamat"
 
-#: templates/prefs/columnselect.inc:221
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
 msgid "Choose an address book:"
 msgstr "Vali aadressiraamat:"
 
-#: templates/prefs/addressbookselect.inc:165
+#: templates/prefs/addressbookselect.inc:163
 msgid "Choose which address books to display, and in what order:"
 msgstr "Vali, milliseid aadressiraamatuid näidata, ja millises järjestuses:"
 
@@ -216,15 +266,23 @@ msgstr "Vali, milliseid aadressiraamatuid n
 msgid "Choose which address books to use."
 msgstr "Vali, milliseid aadressiraamatuid kasutada."
 
-#: templates/prefs/columnselect.inc:228
+#: templates/prefs/columnselect.inc:227
 msgid "Choose which columns to display and in what order:"
 msgstr "Vali, milliseid veerge näidata, ja millises järjestuses."
 
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Sule"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Sulge otsing"
+
 #: config/prefs.php.dist:17
 msgid "Column Options"
 msgstr "Veeru seaded"
 
-#: templates/prefs/columnselect.inc:233
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
 msgid "Columns that will not be displayed:"
 msgstr "Veerud, mida ei näidata:"
 
@@ -236,101 +294,111 @@ msgstr "Komaga eraldatud v
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "Komaga eraldatud väljad (Microsoft Outlook)"
 
-#: config/attributes.php.dist:76
+#: config/sources.php.dist:228 config/sources.php.dist:901
+#, fuzzy
+msgid "Communications"
+msgstr "Veeru seaded"
+
+#: config/attributes.php.dist:286
 msgid "Company"
 msgstr "Firma"
 
-#: config/attributes.php.dist:144
+#: config/attributes.php.dist:215
 msgid "Company Address"
 msgstr "Töökoha aadress"
 
-#: lib/api.php:318 lib/api.php:363 lib/api.php:407 lib/api.php:491
-#: lib/api.php:601 lib/api.php:688 lib/api.php:741 lib/api.php:819
-#: lib/api.php:1006 lib/api.php:1094
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:394 lib/api.php:439
+#: lib/api.php:490 lib/api.php:525 lib/api.php:574 lib/api.php:620
+#: lib/api.php:661 lib/api.php:778 lib/api.php:865 lib/api.php:923
+#: lib/api.php:1012 lib/api.php:1231 lib/api.php:1289 lib/api.php:1371
 #, php-format
 msgid "Connection failed: %s"
 msgstr "Ühendus nurjus: %s"
 
-#: lib/Driver/ldap.php:58
+#: lib/Driver/ldap.php:71
 msgid "Connection failure"
 msgstr "Ühendus nurjus"
 
-#: browse.php:191 browse.php:232
-msgid "Contact added to list."
-msgstr "Aadress lisati listi."
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+#, fuzzy
+msgid "Contact Search"
+msgstr "Lihtotsing"
 
-#: browse.php:60
-msgid "Contact removed from list."
-msgstr "Aadress eemaldati listist."
+#: config/sources.php.dist:833
+msgid "Contacts"
+msgstr "Kontaktid"
 
-#: browse.php:266
+#: templates/list/numPager.inc:3
+#, fuzzy
+msgid "Contacts displayed:"
+msgstr "Näidatavad kanded:"
+
+#: lib/Views/Browse.php:336
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "Aadressid listis: %s"
 
-#: templates/browse/actions.inc:12
+#: templates/browse/actions.inc:18
 msgid "Copy"
 msgstr "Kopeeri"
 
-#: templates/addressbooks.inc:53
+#: templates/addressbooks.inc:69
 msgid "Create"
 msgstr "Loo"
 
-#: templates/addressbooks.inc:40
+#: templates/addressbooks.inc:56
 msgid "Create Address Book"
 msgstr "Loo aadressiraamat"
 
-#: lib/ListView.php:315
+#: lib/ListView.php:443
 msgid "Create a new Contact List in:"
 msgstr "Loo uus list siia:"
 
-#: lib/ObjectView.php:133
+#: lib/Views/Contact.php:74
 msgid "Created"
 msgstr "Loodud"
 
-#: config/prefs.php.dist:98
-msgid "Default sorting direction:"
-msgstr "Vaikimisi järjestuse suund:"
+#: contact.php:86
+msgid "De_lete"
+msgstr "Kustuta"
 
-#: templates/addressbooks.inc:76 templates/browse/actions.inc:2
-#: lib/Object.php:328 lib/Renderer.php:47 lib/Renderer.php:50
+#: templates/addressbooks.inc:94 templates/browse/actions.inc:3
+#: lib/Views/DeleteContact.php:58
 msgid "Delete"
 msgstr "Kustuta"
 
-#: templates/addressbooks.inc:58
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Kustuta %s"
+
+#: templates/addressbooks.inc:76
 msgid "Delete Address Book"
 msgstr "Kustuta aadressiraamat"
 
-#: config/prefs.php.dist:38
-msgid "Delete Confirmation"
-msgstr "Kustutamise kinnitus"
-
-#: config/prefs.php.dist:39
-msgid "Delete button behaviour"
-msgstr "Kustutusnupu käitumine"
-
-#: lib/Driver/ldap.php:270
+#: lib/Driver/ldap.php:288
 #, php-format
 msgid "Delete failed: (%s) %s"
 msgstr "Kustutamine nurjus: (%s) %s"
 
-#: delete.php:38
+#: lib/Driver.php:1526
+#, fuzzy
+msgid "Deleting contacts is not available."
+msgstr "FTP laiendus ei ole saadaval."
+
+#: delete.php:40
 msgid "Deletion failed"
 msgstr "Kustutamine ebaõnnestus"
 
-#: config/attributes.php.dist:213
+#: config/attributes.php.dist:292
 msgid "Department"
 msgstr "Osakond"
 
-#: config/prefs.php.dist:97
-msgid "Descending"
-msgstr "Kahanev"
-
-#: templates/addressbooks.inc:115
+#: templates/addressbooks.inc:138
 msgid "Description"
 msgstr "Kirjeldus"
 
-#: templates/browse/search.inc:118
+#: templates/browse/search.inc:125
 msgid "Directory"
 msgstr "Kataloog"
 
@@ -343,63 +411,78 @@ msgstr "Esitus"
 msgid "Display Options"
 msgstr "Esituse seaded"
 
-#: config/prefs.php.dist:176
-msgid "Do you want to confirm deleting entries?"
-msgstr "Küsi kannete kustutamisel kinnitust"
-
-#: lib/Object.php:297
+#: lib/Object.php:348
 msgid "Download"
 msgstr "Salvesta"
 
-#: templates/browse/row.inc:17 templates/browse/contactrow.inc:25
+#: templates/browse/row.inc:13
 msgid "Download vCard"
 msgstr "Salvesta vCard"
 
-#: templates/addressbooks.inc:102 templates/browse/row.inc:25
-#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:3
-#: templates/browse/contactrow.inc:33 lib/Renderer.php:42
+#: templates/addressbooks.inc:123 templates/browse/column_headers.inc:10
+#: templates/browse/row.inc:21 templates/browse/actions.inc:6
 msgid "Edit"
 msgstr "Muuda"
 
-#: templates/browse/row.inc:25 templates/browse/contactrow.inc:33
+#: edit.php:91
 #, php-format
 msgid "Edit \"%s\""
 msgstr "Muuda \"%s\""
 
-#: templates/addressbooks.inc:81
+#: lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Muuda %s"
+
+#: templates/addressbooks.inc:100
 msgid "Edit Address Books"
 msgstr "Muuda aadressiraamatuid"
 
-#: edit.php:78 edit.php:154
-#, php-format
-msgid "Edit entry for %s"
-msgstr "Muuda %s andmeid"
-
-#: config/attributes.php.dist:58
+#: config/attributes.php.dist:229
 msgid "Email"
 msgstr "E-post"
 
-#: edit.php:147
-#, php-format
-msgid "Entry for %s updated, but saving the uploaded file failed: %s"
-msgstr ""
-"%s kanne uuendati, kuid serverisse laetud faili salvestamine nurjus: %s"
+#: config/attributes.php.dist:235
+#, fuzzy
+msgid "Emails"
+msgstr "E-post"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, fuzzy, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "%d sissekannet lisati listi."
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, fuzzy, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "%d sissekannet lisati listi."
+
+#: lib/Views/Browse.php:134
+#, fuzzy, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Viga sisu laadimisel: %s"
 
-#: edit.php:149 edit.php:152
+#: lib/Views/Browse.php:136
 #, php-format
-msgid "Entry for %s updated."
-msgstr "%s kanne muudetud."
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Viga kustutamise %d'l kontakti %d'st. "
+
+#: lib/Views/Browse.php:117
+#, fuzzy, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "%d sissekanne(t) listist eemaldatud."
 
-#: browse.php:74
-msgid "Entry successfully deleted."
-msgstr "Kanne kustutatud."
+#: lib/Views/Browse.php:119
+#, fuzzy, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "%d sissekanne(t) listist eemaldatud."
 
-#: lib/api.php:413
+#: lib/api.php:531
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr "Aadressiraamatu otsingu viga: %s"
 
-#: templates/browse/actions.inc:6 templates/data/export.inc:41
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
 msgid "Export"
 msgstr "Eksport"
 
@@ -407,168 +490,204 @@ msgstr "Eksport"
 msgid "Export Address Book"
 msgstr "Aadressiraamatu eksport"
 
-#: templates/data/export.inc:21
+#: templates/data/export.inc:22
 msgid "Export only the selected contacts."
 msgstr "Ekspordi ainult märgitud kanded."
 
-#: templates/data/export.inc:27
+#: templates/data/export.inc:28
 msgid "Export the following address book completely."
 msgstr "Ekspordi see aadressiraamat täies ulatuses."
 
-#: data.php:134 data.php:228 data.php:297 browse.php:35 browse.php:90
-#: browse.php:112 add.php:67 search.php:37
+#: search.php:86 add.php:42 data.php:143 data.php:242 data.php:320
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
 msgstr "Juurdepääs aadressiraamatule nurjus: %s"
 
-#: browse.php:139
+#: lib/Views/Browse.php:208
 #, php-format
 msgid "Failed to add %s to %s: %s"
 msgstr "%s lisamine %s-le nurjus: %s"
 
-#: browse.php:272
+#: lib/Views/Browse.php:342
 msgid "Failed to browse list"
 msgstr "Listi sirvimine nurjus"
 
-#: browse.php:310
+#: lib/Views/Browse.php:369
 msgid "Failed to browse the directory"
 msgstr "Kataloogi sirvimine ebaõnnestus"
 
-#: lib/Driver/ldap.php:309
+#: lib/Driver/ldap.php:321
 #, php-format
 msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
 msgstr "Nime muutmine nurjus: (%s) %s; Vana DN = %s, uus DN = %s, Root = %s"
 
-#: browse.php:120
+#: lib/Views/Browse.php:186
 #, php-format
 msgid "Failed to find object to be added: %s"
 msgstr "Ei leidnud objekti, mida lisada: %s"
 
-#: search.php:79
+#: search.php:152
 msgid "Failed to search the address book"
 msgstr "Aadressiraamatu otsing nurjus"
 
-#: data.php:149
+#: data.php:158
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "Otsing kataloogist ebaõnnestus: %s"
 
-#: config/attributes.php.dist:167
+#: config/sources.php.dist:532
+#, fuzzy
+msgid "Favourite Recipients"
+msgstr "Nähtamatud adressaadid"
+
+#: config/attributes.php.dist:256
 msgid "Fax"
 msgstr "Faks"
 
-#: edit.php:124 display.php:100
+#: lib/Forms/Contact.php:40
 msgid "Files"
 msgstr "Failid"
 
-#: templates/browse/search.inc:70
+#: templates/browse/search.inc:104
 msgid "Find"
 msgstr "Leia"
 
-#: edit.php:97 edit.php:187
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
 msgid "Finish"
 msgstr "Lõpp"
 
-#: config/attributes.php.dist:48
+#: config/attributes.php.dist:47
 msgid "First Name"
 msgstr "Eesnimi"
 
-#: config/attributes.php.dist:202
+#: config/attributes.php.dist:318
 msgid "Freebusy URL"
 msgstr "Freebusy URL"
 
-#: templates/browse/search.inc:83
+#: templates/browse/search.inc:98
 msgid "From"
 msgstr "Kellelt"
 
-#: config/sources.php.dist:604
+#: config/attributes.php.dist:374
+msgid "Gender"
+msgstr "Sugu"
+
+#: config/sources.php.dist:758
 msgid "Global Address Book"
 msgstr "Globaalne aadressiraamat"
 
-#: templates/browse/row.inc:43 templates/browse/contactrow.inc:44
+#: templates/browse/row.inc:39
 msgid "Group"
 msgstr "Grupp"
 
-#: config/attributes.php.dist:82
+#: config/attributes.php.dist:115
 msgid "Home Address"
 msgstr "Kodune aadress"
 
-#: config/attributes.php.dist:93
+#: config/attributes.php.dist:133
 msgid "Home City"
 msgstr "Kodulinn"
 
-#: config/attributes.php.dist:108
+#: config/attributes.php.dist:151
 msgid "Home Country"
 msgstr "Kodumaa"
 
-#: config/attributes.php.dist:150
+#: config/attributes.php.dist:241
 msgid "Home Phone"
 msgstr "Kodune telefon"
 
-#: config/attributes.php.dist:103
+#: config/attributes.php.dist:127
+msgid "Home Post Office Box"
+msgstr "Kodune postiindeks"
+
+#: config/attributes.php.dist:145
 msgid "Home Postal Code"
 msgstr "Kodune postiindeks"
 
-#: config/attributes.php.dist:98
+#: config/attributes.php.dist:139
 msgid "Home State/Province"
 msgstr "Kodumaakond"
 
-#: config/attributes.php.dist:88
+#: config/attributes.php.dist:121
 msgid "Home Street Address"
 msgstr "Kodune tänav/maja"
 
-#: config/sources.php.dist:506
+#: config/sources.php.dist:649
 msgid "IMSP"
 msgstr "IMSP"
 
-#: config/prefs.php.dist:47
-msgid "IMSP Address Book Administration"
-msgstr "IMSP aadressiraamatu haldus"
-
 #: templates/data/import.inc:7
 #, php-format
 msgid "Import Address Book, Step %d"
 msgstr "Aadressiraamatu import, samm %d"
 
-#: data.php:361
+#: data.php:388
 msgid "Import/Export Address Books"
 msgstr "Aadressiraamatute import/eksport"
 
-#: lib/api.php:596 lib/api.php:683
+#: config/attributes.php.dist:350
+msgid "Initials"
+msgstr "Initsiaalid"
+
+#: config/attributes.php.dist:356
+msgid "Instant Messenger"
+msgstr "Otse suhtlus"
+
+#: lib/api.php:773 lib/api.php:860
 msgid "Invalid ID"
 msgstr "Vigane ID"
 
-#: lib/api.php:230 lib/api.php:402 lib/api.php:486 lib/api.php:592
-#: lib/api.php:679 lib/api.php:731 lib/api.php:1077
-msgid "Invalid address book"
-msgstr "Vigane aadressiraamat"
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:306 lib/api.php:520
+#: lib/api.php:569 lib/api.php:615 lib/api.php:656 lib/api.php:769
+#: lib/api.php:856 lib/api.php:913 lib/api.php:1354
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Vigane aadressiraamat: %s"
 
-#: lib/api.php:1081 lib/api.php:1154 lib/api.php:1207
+#: lib/api.php:1358 lib/api.php:1432 lib/api.php:1489
 msgid "Invalid email"
 msgstr "Vigane e-posti aadress"
 
-#: lib/api.php:1089
+#: lib/api.php:1366
 msgid "Invalid entry"
 msgstr "Vigane kanne"
 
-#: lib/Driver/ldap.php:266
+#: lib/Driver/ldap.php:284
 msgid "Invalid key specified."
 msgstr "Määrati vigane võti."
 
-#: lib/api.php:1085
+#: lib/api.php:1362
 msgid "Invalid name"
 msgstr "Vigane nimi"
 
-#: lib/api.php:735
+#: lib/api.php:917
 msgid "Invalid objectId"
 msgstr "Vigane objectId"
 
-#: lib/Driver/ldap.php:30
+#: config/attributes.php.dist:268
+msgid "Job Title"
+msgstr "Tiitel"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Salvestamise võti peab olema UID mitte %s!"
+
+#: lib/Driver/ldap.php:67
 msgid ""
 "LDAP support is required but the LDAP module is not available or not loaded."
 msgstr "Vajalik on LDAP toetus, ent LDAP moodul puudub või pole laetud."
 
-#: lib/ObjectView.php:138
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF Aadressiraamat"
+
+#: config/attributes.php.dist:380
+msgid "Language"
+msgstr "Keel"
+
+#: lib/Views/Contact.php:80
 msgid "Last Modified"
 msgstr "Viimati muudetud"
 
@@ -576,19 +695,35 @@ msgstr "Viimati muudetud"
 msgid "Last Name"
 msgstr "Perekonnanimi"
 
+#: config/attributes.php.dist:386
+msgid "Latitude"
+msgstr "laiuskraad"
+
 #: templates/browse/column_headers.inc:16
 msgid "List"
 msgstr "Nimekiri"
 
-#: templates/browse/search.inc:77
+#: config/sources.php.dist:223 config/sources.php.dist:897
+msgid "Location"
+msgstr "Asukoht"
+
+#: config/attributes.php.dist:391
+msgid "Longitude"
+msgstr "Pikkuskraad"
+
+#: config/attributes.php.dist:362
+msgid "Manager"
+msgstr "Haldur"
+
+#: templates/browse/search.inc:109
 msgid "Matching"
 msgstr " mis sisaldab "
 
-#: lib/api.php:205
+#: lib/api.php:281
 msgid "Maximum Number of Contacts"
 msgstr "Kannete suurim arv"
 
-#: config/prefs.php.dist:107
+#: config/prefs.php.dist:88
 msgid "Maximum number of pages"
 msgstr "Lehekülgede suurim arv"
 
@@ -596,60 +731,65 @@ msgstr "Lehek
 msgid "Menu List"
 msgstr "Menüü nimekiri"
 
-#: lib/Block/minisearch.php:3
-msgid "Mini Search"
-msgstr "Miniotsing"
+#: config/attributes.php.dist:59
+msgid "Middle Names"
+msgstr "Kesknimi"
 
-#: lib/Driver/ldap.php:302
+#: lib/Driver/ldap.php:314
 msgid "Missing DN in LDAP source configuration."
 msgstr "LDAP allika seadistuses puudub DN."
 
-#: config/attributes.php.dist:162
+#: config/attributes.php.dist:251
 msgid "Mobile Phone"
 msgstr "Mobiiltelefon"
 
-#: lib/Driver/ldap.php:332 lib/Driver/ldap.php:348
+#: lib/Driver/ldap.php:343 lib/Driver/ldap.php:359
 #, php-format
 msgid "Modify failed: (%s) %s"
 msgstr "Muutmine nurjus: (%s) %s"
 
-#: lib/api.php:1193
+#: templates/browse/header.inc:8
+#, fuzzy
+msgid "More Options..."
+msgstr "Kirja seaded"
+
+#: lib/api.php:1474
 msgid "More than 1 entry found"
 msgstr "Leiti rohkem kui 1 kanne"
 
-#: templates/browse/actions.inc:11
+#: templates/browse/actions.inc:16
 msgid "Move"
 msgstr "Nihuta"
 
-#: templates/prefs/columnselect.inc:247
 #: templates/prefs/addressbookselect.inc:184
+#: templates/prefs/columnselect.inc:248
 msgid "Move left"
 msgstr "nihuta vasakule"
 
-#: templates/prefs/columnselect.inc:249
 #: templates/prefs/addressbookselect.inc:186
+#: templates/prefs/columnselect.inc:250
 msgid "Move right"
 msgstr "nihuta paremale"
 
-#: data.php:52 templates/data/import.inc:16
+#: data.php:63 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr "Mulberry aadressiraamat"
 
-#: lib/api.php:1113
+#: lib/api.php:1390
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
 msgstr "Kirjas on juba mitu inimest aadressiga [%s], kuid ühegi nimi pole [%s]"
 
-#: config/sources.php.dist:107 config/sources.php.dist:243
+#: config/sources.php.dist:161
 msgid "My Address Book"
 msgstr "Minu aadressiraamat"
 
-#: addressbooks.php:120
+#: addressbooks.php:174
 msgid "My Address Books"
 msgstr "Minu aadressiraamatud"
 
-#: templates/addressbooks.inc:107 config/attributes.php.dist:42
+#: templates/addressbooks.inc:130 config/attributes.php.dist:41
 msgid "Name"
 msgstr "Nimi"
 
@@ -657,61 +797,103 @@ msgstr "Nimi"
 msgid "Name Format"
 msgstr "Nime esitus"
 
-#: config/sources.php.dist:315
-msgid "Netcenter Member Directory"
-msgstr "Netcenteri liikmete kataloog"
+#: config/attributes.php.dist:65
+msgid "Name Prefixes"
+msgstr "Nime liides"
+
+#: config/attributes.php.dist:71
+msgid "Name Suffixes"
+msgstr "Nime liited."
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nimi:"
 
-#: add.php:36 add.php:124 lib/Block/minisearch.php:27
-#: lib/Block/tree_menu.php:27
+#: add.php:70 lib/Block/tree_menu.php:28
 msgid "New Contact"
 msgstr "Lisa uus sissekanne"
 
-#: edit.php:88 edit.php:95 edit.php:202 templates/data/import.inc:45
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
 msgid "Next"
 msgstr "Edasi"
 
-#: config/attributes.php.dist:218
+#: config/attributes.php.dist:83
 msgid "Nickname"
 msgstr "Hüüdnimi"
 
-#: lib/api.php:1195 lib/api.php:1244
+#: lib/api.php:1477 lib/api.php:1526
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "%s kannet %s jaoks ei leitud"
 
-#: lib/api.php:1163
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "Aadressi raamatuid ei ole saadaval. Import ja eksport on keelatud."
+
+#: search.php:72
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Aadressi raamatuid ei ole saadaval. Otsimine on keelatud."
+
+#: lib/api.php:1441
 msgid "No address books found."
 msgstr "Ei leitud ühtki aadressiraamatut."
 
-#: minisearch.php:83
+#: minisearch.php:81
 msgid "No contacts found"
 msgstr "Kandeid ei leitud"
 
-#: lib/api.php:511 lib/api.php:766
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Ühtegi vastet ei leitud otsingule."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Ühtegi vastet ei leitud."
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Lemmik saajate allikat ei leidu."
+
+#: lib/api.php:682 lib/api.php:949
 msgid "No vCard data was found."
 msgstr "vCard andmeid ei leitud."
 
-#: templates/browse/footer.inc:7
+#: templates/list/numPager.inc:8
 msgid "None"
 msgstr "Puudub"
 
-#: config/attributes.php.dist:184
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "Ei leitud"
+
+#: deletefile.php:22 edit.php:48
+msgid "Not found"
+msgstr "Ei leitud"
+
+#: config/attributes.php.dist:306
 msgid "Notes"
 msgstr "Märkmed"
 
-#: config/prefs.php.dist:115
+#: config/prefs.php.dist:96
 msgid "Number of items per page"
 msgstr "Kannete arv leheküljel"
 
-#: lib/api.php:614 lib/api.php:747
+#: lib/api.php:789 lib/api.php:929
 msgid "Object not found"
 msgstr "Objekti ei leitud"
 
-#: config/attributes.php.dist:223
+#: config/attributes.php.dist:274
+msgid "Occupation"
+msgstr "Amet"
+
+#: config/attributes.php.dist:298
 msgid "Office"
 msgstr "Töökoht"
 
-#: templates/prefs/imsp_opt.inc:23
+#: templates/prefs/imsp_opt.inc:22
 msgid ""
 "Once you save this option page, the address book will be permanently "
 "deleted. If this is not what you want, then you must change your selection "
@@ -720,69 +902,71 @@ msgstr ""
 "Selle seadistuse lehe salvestamisel kustutatakse aadressiraamat jäädavalt."
 "Kui sa seda ei taha, pead valima \"Puudub\"."
 
-#: lib/api.php:774
+#: lib/api.php:957
 msgid "Only one vcard supported."
 msgstr "Lubatud on ainult üks vCard."
 
-#: config/prefs.php.dist:37 config/prefs.php.dist:46
-msgid "Other Options"
-msgstr "Muud seaded"
+#: config/sources.php.dist:230 config/sources.php.dist:903
+msgid "Organization"
+msgstr "Organisatsioon"
+
+#: config/sources.php.dist:231 config/sources.php.dist:905
+msgid "Other"
+msgstr "Muu"
 
-#: config/attributes.php.dist:190
+#: config/attributes.php.dist:324
 msgid "PGP Public Key"
 msgstr "PGP avalik võti"
 
-#: lib/api.php:495 lib/api.php:605 lib/api.php:692 lib/api.php:934
-#: lib/api.php:1098
-msgid "Permission Denied"
-msgstr "Juurdepääs puudub"
+#: config/attributes.php.dist:261
+msgid "Pager"
+msgstr "Piipar"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Kustutada see kontakt igaveseks?"
 
-#: lib/Driver.php:543
+#: deletefile.php:36 lib/Driver.php:676 lib/api.php:665 lib/api.php:782
+#: lib/api.php:869 lib/api.php:1159 lib/api.php:1375 lib/Driver/sql.php:481
 msgid "Permission denied"
 msgstr "Juurdepääs puudub"
 
-#: templates/addressbooks.inc:99
+#: templates/addressbooks.inc:120
 msgid "Permissions"
 msgstr "Õigused"
 
-#: data.php:53 templates/data/import.inc:17
+#: config/sources.php.dist:221 config/sources.php.dist:893
+msgid "Personal"
+msgstr "Isiklik"
+
+#: data.php:64 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr "Pine aadressiraamat"
 
-#: templates/browse/javascript.inc:28
+#: templates/browse/javascript.inc:27
 msgid "Please name the new contact list:"
 msgstr "Sisesta uue listi nimi:"
 
-#: edit.php:91 edit.php:94 edit.php:194
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
 msgid "Previous"
 msgstr "Tagasi"
 
-#: config/sources.php.dist:416
-msgid "Private Address Book"
-msgstr "Isiklik aadressiraamat"
-
-#: lib/Driver/ldap.php:147
+#: lib/Driver/ldap.php:165
+#, php-format
 msgid "Query failed: (%s) %s"
 msgstr "Päring nurjus: (%s) %s"
 
-#: templates/block/minisearch.inc:18
-msgid "Quick Search"
-msgstr "Kiirotsing"
-
-#: lib/Driver/ldap.php:191 lib/Driver/ldap.php:199 lib/Driver/ldap.php:429
+#: lib/Driver/ldap.php:209 lib/Driver/ldap.php:217 lib/Driver/ldap.php:453
 #, php-format
 msgid "Read failed: (%s) %s"
 msgstr "Lugemine nurjus: (%s) %s"
 
-#: lib/Renderer.php:49
-msgid "Really delete this contact?"
-msgstr "Kas tõesti kustutada see kanne?"
-
-#: templates/browse/footer.inc:2
-msgid "Records displayed:"
-msgstr "Näidatavad kanded:"
+#: lib/Driver.php:1510
+msgid "Reading contacts is not available."
+msgstr "Kontaktide kuvamine ei ole võimalik."
 
-#: templates/prefs/addressbookselect.inc:176
+#: templates/prefs/addressbookselect.inc:175
 msgid "Remove address book"
 msgstr "Eemalda aadressiraamat"
 
@@ -790,11 +974,19 @@ msgstr "Eemalda aadressiraamat"
 msgid "Remove column"
 msgstr "eemalda veerg"
 
-#: templates/browse/actions.inc:2
+#: templates/browse/actions.inc:3
 msgid "Remove from this list"
 msgstr "Eemalda sellest listist"
 
-#: templates/data/import.inc:21
+#: lib/Driver.php:1548
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Kasutaja andmete kustutamine ei ole võimalik antud aadressi raamatu "
+"draiveriga."
+
+#: templates/data/import.inc:22
 msgid ""
 "Replace existing address book with the imported one? <strong>Warning: This "
 "deletes all entries in your current address book.</strong>"
@@ -802,75 +994,87 @@ msgstr ""
 "Kas asendame olemasoleva aadressiraamatu imporditavaga? <strong>Hoiatus: "
 "sellega hävivad kõik olemasolevad sissekanded aadressiraamatus.</strong>"
 
-#: lib/Driver.php:438
+#: lib/Driver.php:573
 msgid "Requested object not found."
 msgstr "Soovitud objekti ei leitud."
 
-#: add.php:37 templates/browse/search.inc:113
+#: templates/browse/search.inc:120
 msgid "Reset to Defaults"
 msgstr "Taasta vaikeväärtused"
 
-#: config/attributes.php.dist:196
+#: config/attributes.php.dist:330
 msgid "S/MIME Public Certificate"
 msgstr "S/MIME avalik sertifikaat"
 
-#: lib/Driver/ldap.php:69
+#: lib/Driver/ldap.php:87
 #, php-format
 msgid "STARTTLS failed: (%s) %s"
 msgstr "STARTTLS nurjus: (%s) %s"
 
-#: edit.php:99 add.php:37 templates/addressbooks.inc:124
+#: templates/addressbooks.inc:147 lib/Forms/EditContact.php:26
 msgid "Save"
 msgstr "Salvesta"
 
-#: templates/browse/search.inc:96 templates/browse/search.inc:112
-#: templates/block/minisearch.inc:21 lib/Block/tree_menu.php:49
-#: config/prefs.php.dist:126
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Säilita otsingutulemus virtuaalkaustana?"
+
+#: lib/Driver.php:1536
+msgid "Saving contacts is not available."
+msgstr "Kontatkide salvestamine ei ole saadaval."
+
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:59 config/prefs.php.dist:107
 msgid "Search"
 msgstr "Otsing"
 
-#: minisearch.php:63
-msgid "Search Results:"
-msgstr "Otsingu tulemus:"
-
-#: lib/api.php:1011
+#: lib/api.php:1236
 msgid "Search failed"
 msgstr "Otsing nurjus"
 
-#: lib/api.php:1103 lib/api.php:1109 lib/api.php:1118 lib/api.php:1131
+#: lib/api.php:1380 lib/api.php:1386 lib/api.php:1395 lib/api.php:1408
 #, php-format
 msgid "Search failed: %s"
 msgstr "Otsing nurjus: %s"
 
-#: templates/block/minisearch.inc:22
-msgid "Searching..."
-msgstr "Otsing käib..."
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Otsing: %s"
 
-#: templates/addressbooks.inc:66
+#: lib/Driver.php:1495
+msgid "Searching is not available."
+msgstr "Otismine ei ole saadaval."
+
+#: templates/addressbooks.inc:84
 msgid "Select an address book to delete"
 msgstr "Vali kustutamisele kuuluv aadressiraamat."
 
-#: templates/addressbooks.inc:90
+#: templates/addressbooks.inc:109
 msgid "Select an address book to edit"
 msgstr "Vali aadressiraamat, mida soovid muuta."
 
-#: templates/data/export.inc:32
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Vali kontakt"
+
+#: templates/data/export.inc:33
 msgid "Select the address book to export from:"
 msgstr "Kust eksportida:"
 
-#: templates/data/import.inc:26
+#: templates/data/import.inc:27
 msgid "Select the address book to import to:"
 msgstr "Kuhu importida:"
 
-#: templates/data/import.inc:35
+#: templates/data/import.inc:36
 msgid "Select the charset of the source file:"
 msgstr "Vali lähtefaili märgistik:"
 
 #: templates/data/export.inc:10
-msgid "Seect the export format:"
+msgid "Select the export format:"
 msgstr "Ekspordi vorming:"
 
-#: templates/data/import.inc:43
+#: templates/data/import.inc:44
 msgid "Select the file to import:"
 msgstr "Vali imporditav fail:"
 
@@ -878,7 +1082,7 @@ msgstr "Vali imporditav fail:"
 msgid "Select the format of the source file:"
 msgstr "Vali lähtefaili vorming:"
 
-#: config/prefs.php.dist:135
+#: config/prefs.php.dist:116
 msgid "Select the format used to display names:"
 msgstr "Vali nimede esitusviis:"
 
@@ -894,71 +1098,90 @@ msgstr "Vali, milliseid v
 msgid "Select which format to display names."
 msgstr "Vali, millisel kujul näidata nimesid."
 
-#: add.php:54
+#: lib/Forms/AddContact.php:42
 #, php-format
 msgid "Selected address book \"%s\"."
 msgstr "Valitud aadressiraamat \"%s\"."
 
-#: config/sources.php.dist:173
-msgid "Shared Directory"
-msgstr "Ühiskataloog"
-
-#: templates/browse/actions.inc:39
+#: templates/browse/actions.inc:49
 #, php-format
 msgid "Show %s"
 msgstr "Näita %s"
 
-#: templates/browse/actions.inc:41
-msgid "Show All"
-msgstr "Näita kõiki"
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Näita mõlemaid"
 
-#: templates/browse/actions.inc:40
+#: templates/browse/actions.inc:50
 msgid "Show Contacts"
 msgstr "Näita sissekandeid"
 
-#: templates/browse/actions.inc:39
+#: templates/browse/actions.inc:49
 msgid "Show Lists"
 msgstr "Näita liste"
 
-#: templates/browse/column_headers.inc:21
-#: templates/browse/column_headers.inc:34
+#: lib/ListView.php:319 lib/ListView.php:325
 msgid "Sort Direction"
 msgstr "Järjestuse suund"
 
-#: lib/api.php:198
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Järjesta %s järgi"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Järjesta ainult %s järgi"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Sorteeri %s ja siis %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Allikad:"
+
+#: lib/api.php:274
 msgid "Sources"
 msgstr "Allikad"
 
-#: config/prefs.php.dist:157
-msgid "Specify where you want advanced search results to appear."
-msgstr "Määra, kus peaksid ilmuma põhjaliku otsingu tulemused."
+#: config/attributes.php.dist:101
+msgid "Spouse"
+msgstr "Abikaasa"
 
-#: browse.php:214 browse.php:262
+#: lib/Views/Browse.php:258 lib/Views/Browse.php:298
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr "%d sissekannet lisati listi."
 
-#: browse.php:141
+#: lib/Views/Browse.php:212
 #, php-format
 msgid "Successfully added %s to %s"
 msgstr "%s lisati %s-i"
 
-#: browse.php:222
+#: lib/Views/Browse.php:288
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr "List \"%s\" loodud."
 
-#: browse.php:84
+#: search.php:127
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Virtuaal aadressiraamatu \"%s\" tegemine õnnestus"
+
+#: lib/Views/Browse.php:132
 #, php-format
 msgid "Successfully deleted %d contact(s)."
 msgstr "%d sissekanne(t) kustutatud."
 
-#: browse.php:64
+#: lib/Views/Browse.php:115
 #, php-format
 msgid "Successfully removed %d contact(s) from list."
 msgstr "%d sissekanne(t) listist eemaldatud."
 
-#: data.php:50
+#: data.php:61
 msgid "TSV"
 msgstr "TSV"
 
@@ -966,53 +1189,71 @@ msgstr "TSV"
 msgid "Tab separated values"
 msgstr "Tabulaatoriga eraldatud väljad"
 
-#: view.php:15
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Siht aadressiraamat"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Siht kontaktide nimekiri"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Fail %s ei sisaldanud ühtegi kontakti."
+
+#: view.php:17
 msgid "The VFS backend needs to be configured to enable attachment uploads."
 msgstr "Lisandite üleslaadimiseks peab VFS olema seadistatud."
 
-#: lib/Driver.php:1054
+#: lib/Driver.php:1466
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr "Aadressiraamatut \"%s\" pole olemas."
 
-#: addressbooks.php:45
+#: addressbooks.php:104
 #, php-format
 msgid "The address book \"%s\" was created successfully."
 msgstr "Aadressiraamat \"%s\" loodud."
 
-#: addressbooks.php:70
+#: addressbooks.php:130
 #, php-format
 msgid "The address book \"%s\" was removed successfully."
 msgstr "Aadressiraamat \"%s\" kustutatud."
 
-#: addressbooks.php:89
+#: addressbooks.php:151
 #, php-format
 msgid "The address book \"%s\" was successfully updated."
 msgstr "Muudatused aadressiraamatus \"%s\" salvestatud."
 
-#: data.php:303
+#: data.php:329
 #, php-format
 msgid "The address book could not be purged: %s"
 msgstr "Aadressiraamatut ei saanud tühjendada: %s"
 
-#: edit.php:47 vcard.php:22 display.php:23 view.php:26
+#: contact.php:23 view.php:28 vcard.php:19
 msgid "The contact you requested does not exist."
 msgstr "Soovitud sissekannet pole olemas."
 
-#: edit.php:116
+#: deletefile.php:46
 #, php-format
-msgid "The file \"%s\" has successfully been deleted."
-msgstr "Faili \"%s\" kustutamine õnnestus."
+msgid "The file \"%s\" has been deleted."
+msgstr "Fail \"%s\" on kustutatud."
 
-#: data.php:284
+#: data.php:302
 msgid "The import can be finished despite the warnings."
 msgstr "Import on võimalik sooritada hoiatustele vaatamata."
 
-#: browse.php:31
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "Otsitud kontakti ei leitud."
+
+#: lib/Views/Browse.php:80
 msgid "There are no browseable address books."
 msgstr "Ükski aadressiraamat ei luba sirvimist."
 
-#: add.php:29
+#: add.php:32
 msgid ""
 "There are no writeable address books. None of the available address books "
 "are configured to allow you to add new entries to them. If you believe this "
@@ -1021,7 +1262,12 @@ msgstr ""
 "Ükski kasutatav aadressiraamat ei võimalda sul aadresse lisada. Kui see on "
 "sinu arvates viga, võta ühendust süsteemi halduriga."
 
-#: add.php:121
+#: search.php:123
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Selle aadressiraamatu loomisel tekkis viga: %s"
+
+#: lib/Forms/AddContact.php:90
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
@@ -1029,275 +1275,334 @@ msgstr ""
 "Uue sissekande lisamisel tekkis viga. Abi saamiseks võta ühendust süsteemi "
 "halduriga."
 
-#: browse.php:189 browse.php:230
-msgid "There was an error adding this object."
-msgstr "Selle objekti lisamisel tekkis viga."
-
-#: browse.php:238
+#: lib/Views/Browse.php:308
 msgid "There was an error creating a new list."
 msgstr "Listi loomisel tekkis viga."
 
-#: addressbooks.php:35
+#: addressbooks.php:96 addressbooks.php:102
 #, php-format
 msgid "There was an error creating this address book: %s"
 msgstr "Selle aadressiraamatu loomisel tekkis viga: %s"
 
-#: browse.php:147
+#: lib/Views/Browse.php:218
 #, php-format
 msgid "There was an error deleting \"%s\" from the source address book."
 msgstr "\"%s\" kustutamisel lähteaadressiraamatust tekkis viga."
 
-#: delete.php:37
+#: delete.php:39
 #, php-format
 msgid "There was an error deleting this contact: %s"
 msgstr "Selle sissekande kustutamisel tekkis viga: %s"
 
-#: browse.php:72
-msgid "There was an error deleting this object."
-msgstr "Selle objekti kustutamisel tekkis viga."
-
-#: browse.php:278
+#: lib/Views/Browse.php:348
 msgid "There was an error displaying the list"
 msgstr "Listi näitamisel tekkis viga"
 
-#: data.php:335
+#: data.php:356
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "Andmete impordil tekkis viga: %s"
 
-#: lib/api.php:507 lib/api.php:761
+#: lib/api.php:678 lib/api.php:944
 msgid "There was an error importing the iCalendar data."
 msgstr "iCalendar andmete impordil tekkis viga."
 
-#: browse.php:58
-msgid "There was an error removing a contact from the list."
-msgstr "Liikme eemaldamisel listist tekkis viga."
+#: lib/api.php:227
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Selle aadressiraamatu eemaldamisel tekkis viga: %s"
 
-#: addressbooks.php:55 addressbooks.php:60 addressbooks.php:68
+#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
 #, php-format
 msgid "There was an error removing this address book: %s"
 msgstr "Selle aadressiraamatu eemaldamisel tekkis viga: %s"
 
-#: addressbooks.php:81 addressbooks.php:87
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Uue sissekande lisamisel tekkis viga. Abi saamiseks võta ühendust süsteemi "
+"halduriga."
+
+#: addressbooks.php:149
 #, php-format
 msgid "There was an error updating this address book: %s"
 msgstr "Selle aadressiraamatu muutmisel tekkis viga: %s"
 
-#: edit.php:158
-#, php-format
-msgid "There was an error updating this entry: %s"
-msgstr "Andmete muutmisel tekkis viga: %s"
-
-#: data.php:179
+#: data.php:188
 msgid "There were no addresses to export."
 msgstr "Polnudki aadresse, mida eksportida."
 
+#: templates/prefs/addressbookselect.inc:178
 #: templates/prefs/addressbookselect.inc:180
 msgid "These address books will display in this order:"
 msgstr "Aadressiraamatuid näidatakse selles järjestuses:"
 
-#: templates/prefs/columnselect.inc:243
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
 msgid "These columns will display in this order:"
 msgstr "Veerge näidatakse selles järjekorras:"
 
-#: data.php:269
+#: data.php:287
 msgid "This file format is not supported."
 msgstr "Seda failivormingut ei toetata."
 
-#: lib/api.php:1122 lib/api.php:1135
+#: lib/api.php:1399 lib/api.php:1412
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr "Sellel isikul on juba aadressiraamatus %s kanne"
 
-#: config/prefs.php.dist:147
+#: config/prefs.php.dist:129
 msgid ""
 "This will be the default address book when adding or importing contacts."
 msgstr ""
 "See on aadressiraamat, kuhu aadresse vaikimisi lisatakse ja imporditakse."
 
-#: config/attributes.php.dist:70
-msgid "Title"
-msgstr "Tiitel"
+#: config/attributes.php.dist:221
+msgid "Time Zone"
+msgstr "Ajatsoon"
 
-#: lib/Turba.php:435
-#, php-format
-msgid "Unable to create new share.  Missing source type."
-msgstr "Uue jao loomine nurjus. Puudub allika tüüp."
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Kontakti omaniku ei leitud."
 
-#: lib/Driver.php:979
+#: lib/Turba.php:643 lib/Driver.php:1388
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "Ei suuda laadida %s kirjeldust."
 
-#: edit.php:88 edit.php:91 edit.php:94 edit.php:99 edit.php:196
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "Otsing ei õnnestunud."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
 msgid "Undo Changes"
 msgstr "Võta tagasi"
 
-#: lib/api.php:540 lib/api.php:643 lib/api.php:779
+#: config/attributes.php.dist:340
+msgid "Unfiled"
+msgstr "Kategooriata"
+
+#: lib/api.php:711 lib/api.php:814 lib/api.php:962
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr "Toetamata Content-Type: %s"
 
-#: config/sources.php.dist:376
-msgid "Verisign Directory"
-msgstr "Verisigni kataloog"
-
-#: templates/browse/row.inc:19 templates/browse/contactrow.inc:27
-#, php-format
-msgid "View \"%s\""
-msgstr "Vaata \"%s\""
-
-#: minisearch.php:78
+#: minisearch.php:76
 msgid "View Contact"
 msgstr "Vaata sissekannet"
 
-#: config/prefs.php.dist:124
+#: config/prefs.php.dist:105
 msgid "View to display by default:"
 msgstr "Vaikimisi näidatav vaade:"
 
-#: config/attributes.php.dist:208
+#: config/attributes.php.dist:312
 msgid "Website URL"
 msgstr "Veebilehe URL"
 
-#: config/attributes.php.dist:113
+#: config/attributes.php.dist:165
 msgid "Work Address"
 msgstr "Tööaadress"
 
-#: config/attributes.php.dist:124
+#: config/attributes.php.dist:183
 msgid "Work City"
 msgstr "Töökoha linn"
 
-#: config/attributes.php.dist:139
+#: config/attributes.php.dist:201
 msgid "Work Country"
 msgstr "Töökoha riik"
 
-#: config/attributes.php.dist:156
+#: config/attributes.php.dist:246
 msgid "Work Phone"
 msgstr "Töötelefon"
 
-#: config/attributes.php.dist:134
+#: config/attributes.php.dist:177
+msgid "Work Post Office Box"
+msgstr "Töökoha postiindeks"
+
+#: config/attributes.php.dist:195
 msgid "Work Postal Code"
 msgstr "Töökoha postiindeks"
 
-#: config/attributes.php.dist:129
+#: config/attributes.php.dist:189
 msgid "Work State/Province"
 msgstr "Töökoha maakond"
 
-#: config/attributes.php.dist:119
+#: config/attributes.php.dist:171
 msgid "Work Street Address"
 msgstr "Töökoha tänav/maja"
 
-#: data.php:237 browse.php:93 browse.php:201 add.php:73
+#: add.php:48 data.php:251 lib/Views/Browse.php:159 lib/Views/Browse.php:271
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
 msgstr "Sa ei saa luua rohkem kui %d sissekannet \"%s\"-sse"
 
-#: edit.php:69 display.php:58 view.php:36
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Virtuaal aadressiraamatusse ei saa lisada kirjeid."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Virtuaal aadressiraamatusse ei saa lisada kirjeid."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Virtuaal aadressiraamatust ei saa kustutada kirjeid."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
 msgid "You do not have permission to view this contact."
 msgstr "Sul puuduvad õigused selle sissekande vaatamiseks."
 
-#: vcard.php:40
+#: vcard.php:37
 msgid "You do not have permission to view this object."
 msgstr "Sul puuduvad õigused selle objekti vaatamiseks."
 
-#: templates/browse/javascript.inc:55
+#: addressbooks.php:59
+msgid "You do not have permissions to delete this source."
+msgstr "Sul puuduvad õigused selle objekti kustutamiseks."
+
+#: lib/Driver/ldap.php:708
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Sul peab olema installeeritud PEAR pakket Net_LDAP kasutamaks raamistik "
+"kontroll funktsiooni."
+
+#: search.php:110
+msgid "You must provide a name for virtual address books."
+msgstr "Sa pead sisestama nime sellele virtuaal aadressiraamatule."
+
+#: templates/browse/javascript.inc:54
 msgid "You must select a target address book."
 msgstr "Sa pead valima sihtaadressiraamatu."
 
-#: templates/browse/javascript.inc:23
-msgid "You must select a target list."
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
 msgstr "Sa pead valima sihtlisti."
 
-#: edit.php:32
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
 msgid "You must select at least one contact first."
 msgstr "Kõigepealt pead valima vähemalt ühe sissekande."
 
-#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:49
-#: templates/browse/javascript.inc:72
-msgid "You must select at least one entry first."
-msgstr "Kõigepealt pead valima vähemalt ühe sissekande."
-
-#: edit.php:73
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
 msgid "You only have permission to view this contact."
 msgstr "Sul on õigus seda sissekannet ainult vaadata."
 
-#: browse.php:285
+#: lib/Views/Browse.php:355
 msgid "Your default address book is not browseable."
 msgstr "Sinu vaikeaadressiraamat ei võimalda sirvimist."
 
-#: templates/browse/row.inc:6 templates/browse/contactrow.inc:12
-msgid "[no value]"
-msgstr "[väärtus puudub]"
-
-#: lib/Turba.php:484
+#: lib/Turba.php:585
 msgid "_Browse"
 msgstr "Sir_vi"
 
-#: templates/browse/actions.inc:40
+#: templates/browse/actions.inc:50
 msgid "_Contacts"
 msgstr "_Kanded"
 
-#: templates/browse/actions.inc:2
+#: templates/browse/actions.inc:3
 msgid "_Delete"
 msgstr "K_ustuta"
 
-#: lib/Turba.php:493
+#: contact.php:82
+msgid "_Edit"
+msgstr "Muuda"
+
+#: lib/Turba.php:594
 msgid "_Import/Export"
 msgstr "_Import/Eksport"
 
-#: templates/browse/actions.inc:39
+#: templates/browse/actions.inc:49
 msgid "_Lists"
 msgstr "_Listid"
 
-#: lib/Turba.php:481
+#: lib/Turba.php:582
 msgid "_My Address Books"
 msgstr "_Minu aadressiraamatud"
 
-#: lib/Turba.php:487
+#: lib/Turba.php:588
 msgid "_New Contact"
 msgstr "_Uus sissekanne"
 
-#: templates/browse/actions.inc:2
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "_Prindi"
+
+#: templates/browse/actions.inc:3
 msgid "_Remove from this list"
 msgstr "_Eemalda sellest listist"
 
-#: lib/Turba.php:489
+#: lib/Turba.php:590
 msgid "_Search"
 msgstr "_Otsing"
 
-#: vcard.php:46
-msgid "contact.vcf"
-msgstr "aadress.vcf"
+#: contact.php:79
+msgid "_View"
+msgstr "Vaata"
 
-#: data.php:199 data.php:204 templates/data/export.inc:1
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "Kasvav"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "kontakt"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "aadressid.csv"
 
-#: data.php:209
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:218
 msgid "contacts.tsv"
 msgstr "aadressid.tsv"
 
-#: data.php:219
+#: data.php:228
 msgid "contacts.vcf"
 msgstr "aadressid.vcf"
 
-#: config/prefs.php.dist:138
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "Kahanev"
+
+#: config/attributes.php.dist:377
+msgid "female"
+msgstr "naine"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "%s sees"
+
+#: config/attributes.php.dist:377
+msgid "male"
+msgstr "mees"
+
+#: config/prefs.php.dist:119
 msgid "no formatting"
 msgstr "suvaline"
 
-#: templates/prefs/imsp_opt.inc:34
+#: templates/prefs/imsp_opt.inc:32
 msgid "none"
 msgstr "puudub"
 
-#: templates/browse/actions.inc:24
+#: templates/browse/actions.inc:33
 msgid "to a Contact List"
 msgstr "listi"
 
-#: templates/browse/actions.inc:14
+#: templates/browse/actions.inc:22
 msgid "to a different Address Book"
 msgstr "teise aadressiraamatusse"
 
-#: data.php:51 templates/browse/column_headers.inc:13
+#: data.php:62 templates/browse/column_headers.inc:13
 #: templates/data/import.inc:15 templates/data/export.inc:15
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/cs_CZ.po b/po/eu_ES.po
similarity index 57%
copy from po/cs_CZ.po
copy to po/eu_ES.po
index a8ed468..67a2ee3 100644
--- a/po/cs_CZ.po
+++ b/po/eu_ES.po
@@ -1,197 +1,188 @@
-# translation of turba.po to Cestina
-# Turba Czech Translation.
-# Copyright (C) 2004 Horde Project
-# This file is distributed under the same license as the Horde package.
-# Pavel Chytil <pavel at chytil.tk>, 2001-2004.
+# Basque translations for Turba.
+# Copyright (C) 2008 Horde Project
+# This file is distributed under the same license as the Turba package.
+# Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta at ehu.es>, 2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: turba\n"
+"Project-Id-Version: Turba H3 (2.1)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2007-03-30 18:15+0200\n"
-"PO-Revision-Date: 2007-04-05 11:35+0200\n"
-"Last-Translator: Jan Krivanek <honza at atack.cz>\n"
-"Language-Team: Cestina <cs 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=ISO-8859-2\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms:  nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: KBabel 1.11.4\n"
 
 #: templates/prefs/imsp_opt.inc:40
 msgid " Add an IMSP Address Book"
-msgstr "Pøidat IMSP Adresáø"
+msgstr " Gehitu IMSP helbide-liburu bat"
 
 #: templates/prefs/imsp_opt.inc:29
 msgid " Delete IMSP Address Book"
-msgstr "Smazat IMSP Adresáø"
+msgstr " Ezabatu IMSP helbide-liburua"
 
-#: data.php:333
+#: data.php:339
 #, php-format
 msgid "\"%s\" already exists and was not imported."
-msgstr "\"%s\" ji¾ existuje a nebyl naimportován."
+msgstr "\"%s\" badago lehendik eta ez da inportatu."
 
 #: browse.php:140
 #, php-format
 msgid "\"%s\" was not copied because it is a list."
-msgstr "\"%s\" nebyl zkopírován, proto¾e je to seznam."
+msgstr "\"%s\" ez da kopiatu zerrenda bat delako."
 
 #: browse.php:138
 #, php-format
 msgid "\"%s\" was not moved because it is a list."
-msgstr "\"%s\" nebyl pøesunut, proto¾e je to seznam."
+msgstr "\"%s\" ez da lekuz aldatu zerrenda bat delako."
 
-#: config/prefs.php.dist:137
+#: config/prefs.php.dist:130
 msgid "\"Firstname Lastname\"  (ie. John Doe)"
-msgstr "\"Jméno pøíjmení\" (napø. Josef Novák)"
+msgstr "\"Izena Abizena\" (adib. Maialen Ugarte)"
 
-#: config/prefs.php.dist:136
+#: config/prefs.php.dist:129
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
-msgstr "\"Pøíjmení, jméno\" (napø. Novák, Josef) "
+msgstr "\"Abizena, Izena\" (adib. Ugarte, Maialen)"
 
 #: add.php:112
 #, php-format
 msgid "%s added."
-msgstr "%s pøidán."
+msgstr "%s gehitu da."
 
-#: data.php:357
+#: data.php:363
 #, php-format
-msgid "%s file successfully imported"
-msgstr "%s soubor byl úspì¹nì importován"
+msgid "%s file successfully imported."
+msgstr "%s fitxategia ondo inportatu da."
 
 #: templates/browse/footer.inc:5
 #, php-format
 msgid "%s to %s of %s"
-msgstr "%s a¾ %s z %s"
+msgstr "%s - %s / %s"
 
-#: lib/Turba.php:458
+#: lib/Turba.php:460
 #, php-format
 msgid "%s's Address Book"
-msgstr "Adresáø %s"
+msgstr "%s(r)en helbide-liburua"
 
 #: lib/Block/minisearch.php:42
 msgid "A browser that supports iFrames is required"
-msgstr "Je nutné pou¾ít prohlí¾eè podporující iFrames."
-
-#: config/prefs.php.dist:160
-msgid "Above search form"
-msgstr "Vý¹e uvedený formuláø pro vyhledávání"
+msgstr "iFrames onartzen duen arakatzailea behar da."
 
 #: view.php:52
 #, php-format
 msgid "Access denied to %s"
-msgstr "Do %s byl pøístup zamítnut"
+msgstr "%s(e)rako sarbidea ukatuta"
 
 #: add.php:56 templates/browse/actions.inc:29
 msgid "Add"
-msgstr "Pøidat"
+msgstr "Gehitu"
 
 #: templates/prefs/addressbookselect.inc:174
 msgid "Add address book"
-msgstr "Pøidat Adresáø"
+msgstr "Gehitu helbide-liburua"
 
-#: config/prefs.php.dist:48
+#: config/prefs.php.dist:41
 msgid "Add and Delete IMSP address books"
-msgstr "Pøidat a smazat IMSP adresáøe"
+msgstr "Gehitu eta ezabatu IMPSP helbide-liburua"
 
 #: templates/prefs/columnselect.inc:237
 msgid "Add column"
-msgstr "Pøidat sloupec"
+msgstr "Gehitu zutabea"
 
 #: edit.php:135
 msgid "Add file"
-msgstr "Pøidat soubor"
+msgstr "Gehitu fitxategia"
 
 #: templates/browse/actions.inc:29
 msgid "Add to"
-msgstr "Pøidat do"
+msgstr "Gehitu hemen"
 
 #: lib/Driver/null.php:57
 msgid "Adding contacts is not available."
-msgstr "Pøidávání kontaktù není k dispozici."
+msgstr "Kontaktu-gehitzea ez dago erabilgarri."
 
 #: templates/addressbooks.inc:93
 msgid "Address Book"
-msgstr "Adresáø"
+msgstr "Helbide-liburua"
 
-#: browse.php:28 config/prefs.php.dist:125
+#: browse.php:28 config/prefs.php.dist:118
 msgid "Address Book Listing"
-msgstr "Výpis adresáøe"
+msgstr "Helbide-liburuen zerrenda"
 
 #: config/prefs.php.dist:10
 msgid "Address Books"
-msgstr "Adresáøe"
+msgstr "Helbide-liburuak"
 
 #: add.php:111
 msgid "Address book entry"
-msgstr "Polo¾ka adresáøe"
+msgstr "Helbide-liburuko sarrera"
 
-#: data.php:313
+#: data.php:319
 msgid "Address book successfully purged."
-msgstr "Adresáø byl úspì¹nì vyèistìný."
+msgstr "Helbide-liburua behar bezala purgatu da."
 
 #: templates/addressbooks.inc:69
 msgid "Address book to delete "
-msgstr "Adresáø ke smazání "
+msgstr "Ezabatzeko helbide-liburua "
 
 #: templates/prefs/addressbookselect.inc:170
 msgid "Address books that will not be displayed:"
-msgstr "Adresáøe, které nebudou zobrazeny:"
+msgstr "Bistaratuko ez diren helbide-liburuak:"
 
 #: search.php:88 templates/browse/search.inc:38
 msgid "Advanced Search"
-msgstr "Pokroèilé vyhledávání"
+msgstr "Bilaketa aurreratua"
 
 #: config/attributes.php.dist:64
 msgid "Alias"
-msgstr "Alias"
+msgstr "Aliasa"
 
 #: templates/browse/footerAlpha.inc:7 templates/browse/footerAlpha.inc:10
-#: templates/browse/actions.inc:48
+#: templates/browse/actions.inc:49
 msgid "All"
-msgstr "V¹e"
+msgstr "Denak"
 
 #: lib/api.php:607
 msgid "Already Exists"
-msgstr "Ji¾ existuje"
+msgstr "Badago lehendik"
 
 #: templates/browse/javascript.inc:93
 #, php-format
 msgid "Are you sure that you want to delete %s?"
-msgstr "Jste si jistí, ¾e chcete smazat %s?"
+msgstr "Ziur zaude %s ezabatu nahi duzula?"
 
 #: templates/browse/javascript.inc:67
 msgid "Are you sure that you want to delete the selected entries?"
-msgstr "Jste si jistí, ¾e chcete smazat vybrané polo¾ky?"
+msgstr "Ziur zaude hautatutako sarrerak ezabatu nahi dituzula?"
 
-#: config/prefs.php.dist:96
+#: config/prefs.php.dist:89
 msgid "Ascending"
-msgstr "Vzestupnì"
+msgstr "Gorantz"
 
 #: search.php:85 templates/browse/search.inc:37
 msgid "Basic Search"
-msgstr "Vyhledat"
-
-#: config/prefs.php.dist:159
-msgid "Below search form"
-msgstr "Pod formuláøem pro vyhledávání"
+msgstr "Oinarrizko bilaketa"
 
 #: lib/Driver/ldap.php:77 lib/Driver/ldap.php:80
 #, php-format
 msgid "Bind failed: (%s) %s"
-msgstr "Spojení selhalo: (%s) %s"
+msgstr "Loturak huts egin du: (%s) %s"
 
 #: config/attributes.php.dist:178
 msgid "Birthday"
-msgstr "Narozeniny"
+msgstr "Urtebetetzea"
 
 #: templates/menu.inc:7
 msgid "Browse"
-msgstr "Prohlí¾et"
+msgstr "Arakatu"
 
 #: config/attributes.php.dist:173
 msgid "Business Category"
-msgstr "Obchodní kategorie"
+msgstr "Negozio kategoria"
 
 #: data.php:49
 msgid "CSV"
@@ -199,549 +190,541 @@ msgstr "CSV"
 
 #: lib/Object/Group.php:57
 msgid "Can't add a group to itself."
-msgstr "Nelze pøidat skupinu sama sobì."
+msgstr "Ezin zaio talde bat gehitu bere buruari."
 
 #: templates/browse/column_headers.inc:7
 msgid "Check _All/None"
-msgstr "Vybrat _v¹e/¾ádné"
+msgstr "Egiaztatu _guztiak/bat ere ez"
 
 #: templates/addressbooks.inc:51
 msgid "Choose a name"
-msgstr "Zvolte název"
+msgstr "Aukeratu izen bat"
 
 #: add.php:48
 msgid "Choose an address book"
-msgstr "Vyberte adresáø"
+msgstr "Aukeratu helbide-liburu bat"
 
 #: templates/prefs/columnselect.inc:221
 msgid "Choose an address book:"
-msgstr "Zvolte Adresáø:"
+msgstr "Aukeratu helbide-liburu bat:"
 
 #: templates/prefs/addressbookselect.inc:165
 msgid "Choose which address books to display, and in what order:"
-msgstr "Zvolte adresáøe k zobrazení a jejich poøadí:"
+msgstr "Aukeratu zein helbide-liburu bistaratuko diren eta zein ordenatan:"
 
 #: config/prefs.php.dist:11
 msgid "Choose which address books to use."
-msgstr "Vyberte adresáø, který chcete pou¾ívat."
+msgstr "Aukeratu zein helbide-liburu erabiliko diren."
 
 #: templates/prefs/columnselect.inc:228
 msgid "Choose which columns to display and in what order:"
-msgstr "Vyberte sloupce k zobrazení a jejich poøadí:"
+msgstr "Aukeratu zein zutabe bistaratuko diren eta zein ordenatan:"
 
 #: config/prefs.php.dist:17
 msgid "Column Options"
-msgstr "Mo¾nosti sloupce"
+msgstr "Zutabe-aukerak"
 
 #: templates/prefs/columnselect.inc:233
 msgid "Columns that will not be displayed:"
-msgstr "Sloupce, které nebudou zobrazeny:"
+msgstr "Bistaratuko ez diren zutabeak:"
 
-#: templates/data/import.inc:13 templates/data/export.inc:12
+#: templates/data/export.inc:12 templates/data/import.inc:13
 msgid "Comma separated values"
-msgstr "Èárkou oddìlené hodnoty"
+msgstr "Komaz bereizitako balioak"
 
 #: templates/data/export.inc:13
 msgid "Comma separated values (Microsoft Outlook)"
-msgstr "Èárkou oddìlené hodnoty (Microsoft Outlook)"
+msgstr "Komaz bereizitako balioak (Microsoft Outlook)"
 
 #: config/attributes.php.dist:76
 msgid "Company"
-msgstr "Firma"
+msgstr "Enpresa"
 
 #: config/attributes.php.dist:144
 msgid "Company Address"
-msgstr "Adresa firmy"
+msgstr "Enpresaren helbidea"
 
 #: lib/api.php:319 lib/api.php:364 lib/api.php:414 lib/api.php:546
 #: lib/api.php:660 lib/api.php:747 lib/api.php:805 lib/api.php:886
-#: lib/api.php:1086 lib/api.php:1175
+#: lib/api.php:1087 lib/api.php:1176
 #, php-format
 msgid "Connection failed: %s"
-msgstr "Spojení selhalo: %s"
+msgstr "Konexioak huts egin du: %s"
 
 #: lib/Driver/ldap.php:58
 msgid "Connection failure"
-msgstr "Spojení selhalo"
+msgstr "Konexioak huts egin du"
 
 #: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
 msgid "Contact Search"
-msgstr "Vyhledat kontakt"
+msgstr "Kontaktu-bilaketa"
 
-#: browse.php:306
+#: browse.php:310
 #, php-format
 msgid "Contacts in list: %s"
-msgstr "Kontakty v seznamu: %s"
+msgstr "Zerrendako kontaktuak: %s"
 
 #: templates/browse/actions.inc:18
 msgid "Copy"
-msgstr "Kopírovat"
+msgstr "Kopiatu"
 
 #: templates/addressbooks.inc:60
 msgid "Create"
-msgstr "Vytvoøit"
+msgstr "Sortu"
 
 #: templates/addressbooks.inc:47
 msgid "Create Address Book"
-msgstr "Vytvoøit Adresáø"
+msgstr "Sortu helbide-liburua"
 
-#: lib/ListView.php:348
+#: lib/ListView.php:350
 msgid "Create a new Contact List in:"
-msgstr "Vytvoøit nový seznam kontaktù v:"
+msgstr "Sortu kontaktu-zerrenda berria hemen:"
 
 #: lib/ObjectView.php:133
 msgid "Created"
-msgstr "Vytvoøeno"
+msgstr "Sortu da"
 
-#: config/prefs.php.dist:98
+#: config/prefs.php.dist:91
 msgid "Default sorting direction:"
-msgstr "Implicitní smìr tøídìní:"
+msgstr "Ordenatze-noranzko lehenetsia:"
 
 #: lib/Renderer.php:47 lib/Renderer.php:50 lib/Object.php:328
 #: templates/addressbooks.inc:83 templates/browse/actions.inc:3
 msgid "Delete"
-msgstr "Smazat"
+msgstr "Ezabatu"
 
 #: templates/addressbooks.inc:65
 msgid "Delete Address Book"
-msgstr "Smazat Adresáø"
-
-#: config/prefs.php.dist:38
-msgid "Delete Confirmation"
-msgstr "Potvrzení smazání"
-
-#: config/prefs.php.dist:39
-msgid "Delete button behaviour"
-msgstr "Vlastnosti tlaèítka pro smazání"
+msgstr "Ezabatu helbide-liburua"
 
 #: lib/Driver/ldap.php:270
 #, php-format
 msgid "Delete failed: (%s) %s"
-msgstr "Smazaní selhalo: (%s) %s"
+msgstr "Huts egin du ezabatzean: (%s) %s"
 
 #: lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
-msgstr "Mazání kontaktù není k dispozici."
+msgstr "Kontaktu-ezabatzea ez dago erabilgarri."
 
 #: delete.php:38
 msgid "Deletion failed"
-msgstr "Smazaní selhalo"
+msgstr "Huts egin du ezabatzean"
 
 #: config/attributes.php.dist:213
 msgid "Department"
-msgstr "Oddìlìní"
+msgstr "Saila"
 
-#: config/prefs.php.dist:97
+#: config/prefs.php.dist:90
 msgid "Descending"
-msgstr "Sestupnì"
+msgstr "Beherantz"
 
 #: templates/addressbooks.inc:122
 msgid "Description"
-msgstr "Popis"
+msgstr "Azalpena"
 
-#: templates/browse/search.inc:119
+#: templates/browse/search.inc:106
 msgid "Directory"
-msgstr "Adresáø"
+msgstr "Direktorioa"
 
 #: config/prefs.php.dist:24
 msgid "Display"
-msgstr "Zobrazit"
+msgstr "Bistaratu"
 
 #: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
 #: config/prefs.php.dist:30
 msgid "Display Options"
-msgstr "Zobrazit mo¾nosti"
-
-#: config/prefs.php.dist:177
-msgid "Do you want to confirm deleting entries?"
-msgstr "Chcete potvrdit smazání polo¾ek?"
+msgstr "Bistaratzeko aukerak"
 
 #: lib/Object.php:297
 msgid "Download"
-msgstr "Stáhnout"
+msgstr "Deskargatu"
 
 #: templates/browse/row.inc:17 templates/browse/contactrow.inc:25
 msgid "Download vCard"
-msgstr "Stahnout vCard"
+msgstr "Deskargatu vCard"
 
 #: lib/Renderer.php:42 templates/addressbooks.inc:109
 #: templates/browse/row.inc:25 templates/browse/column_headers.inc:10
 #: templates/browse/contactrow.inc:33 templates/browse/actions.inc:6
 msgid "Edit"
-msgstr "Upravit"
+msgstr "Editatu"
 
 #: templates/browse/row.inc:25 templates/browse/contactrow.inc:33
 #, php-format
 msgid "Edit \"%s\""
-msgstr "Upravit \"%s\""
+msgstr "Editatu \"%s\""
 
 #: templates/addressbooks.inc:88
 msgid "Edit Address Books"
-msgstr "Upravit Adresáøe"
+msgstr "Editatu helbide-liburuak"
 
 #: edit.php:85 edit.php:161
 #, php-format
 msgid "Edit entry for %s"
-msgstr "Upravit polo¾ku pro %s"
+msgstr "Editatu %s(r)en sarrera"
 
 #: config/attributes.php.dist:58
 msgid "Email"
-msgstr "Email"
+msgstr "Helb.el."
 
 #: edit.php:154
 #, php-format
 msgid "Entry for %s updated, but saving the uploaded file failed: %s"
 msgstr ""
-"Polo¾ka pro  %s byla zaktualizována, ale selhalo ulo¾ení poslaného soubory: %"
-"s"
+"%s(r)en sarrera eguneratu da, baina huts egin du eguneratutako fitxategia "
+"gordetzean: %s"
 
 #: edit.php:156 edit.php:159
 #, php-format
 msgid "Entry for %s updated."
-msgstr "Polo¾ky pro %s byly aktualizovány."
+msgstr "%s(r)en sarrera eguneratu da."
 
-#: browse.php:216 browse.php:264
+#: browse.php:220 browse.php:268
 #, php-format
 msgid "Error adding %d contact(s) to list."
-msgstr "Chyba pøi pøidávání %d kontaktu(ù) do seznamu."
+msgstr "Errorea %d kontaktu zerrendan gehitzean."
 
-#: browse.php:218 browse.php:266
+#: browse.php:222 browse.php:270
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
-msgstr "Chyba pøi pøidávání %d z %d po¾adovaných kontaktù do seznamu."
+msgstr "Errorea eskatutako %d / %d kontaktu zerrendan gehitzean."
 
 #: browse.php:86
 #, php-format
 msgid "Error deleting %d contact(s)."
-msgstr "Chyba pøi mazání %d kontaktu(ù)."
+msgstr "Errorea %d kontaktu ezabatzean."
 
 #: browse.php:88
 #, php-format
 msgid "Error deleting %d of %d requested contacts(s)."
-msgstr "Chyba pøi odstraòování %d z po¾adovaných %d kontaktù."
+msgstr "Errorea eskatutako %d / %d kontaktu ezabatzean."
 
 #: browse.php:66
 #, php-format
 msgid "Error removing %d contact(s) from list."
-msgstr "Chyba pøi odstraòování %d kontakt(ù) ze seznamu."
+msgstr "Errorea %d kontaktu zerrendatik kentzean."
 
 #: browse.php:68
 #, php-format
 msgid "Error removing %d of %d requested contact(s) from list."
-msgstr "Chyba pøi odstraòování %d z po¾adovaných %d kontaktù ze seznamu."
+msgstr "Errorea eskatutako %d / %d kontaktu zerrendatik kentzean."
 
 #: lib/api.php:420
 #, php-format
 msgid "Error searching the address book: %s"
-msgstr "Chyba pøi hledání v Adresáøi: %s"
+msgstr "Errorea helbide liburuan bilatzean: %s"
 
 #: templates/browse/actions.inc:10 templates/data/export.inc:41
 msgid "Export"
-msgstr "Exportovat"
+msgstr "Esportatu"
 
 #: templates/data/export.inc:6
 msgid "Export Address Book"
-msgstr "Exportovat adresáø"
+msgstr "Esportatu helbide-liburua"
 
 #: templates/data/export.inc:21
 msgid "Export only the selected contacts."
-msgstr "Exportovat pouze vybrané kontakty."
+msgstr "Esportatu hautatako kontaktuak bakarrik."
 
 #: templates/data/export.inc:27
 msgid "Export the following address book completely."
-msgstr "Kompletnì exportovat následující adresáø."
+msgstr "Esportatu helbide-liburu hau osorik."
 
-#: data.php:134 data.php:228 data.php:302 browse.php:35 browse.php:103
-#: browse.php:130 search.php:37 add.php:67
+#: add.php:67 search.php:37 browse.php:35 browse.php:103 browse.php:130
+#: data.php:134 data.php:228 data.php:302
 #, php-format
 msgid "Failed to access the address book: %s"
-msgstr "Nelze pøistoupit k adresáøi: %s"
+msgstr "Huts egin du helbide-liburua atzitzean: %s"
 
 #: browse.php:158
 #, php-format
 msgid "Failed to add %s to %s: %s"
-msgstr "Selhalo pøidání %s do %s: %s"
+msgstr "Huts egin du gehitzean %s --> %s: %s"
 
-#: browse.php:312
+#: browse.php:316
 msgid "Failed to browse list"
-msgstr "Nelze prohlédnout seznam"
+msgstr "Huts egin du zerrenda arakatzean"
 
-#: browse.php:350
+#: browse.php:354
 msgid "Failed to browse the directory"
-msgstr "Nelze prohlédnout adresáø"
+msgstr "Huts egin du direktorioa arakatzean"
 
 #: lib/Driver/ldap.php:303
 #, php-format
 msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
-msgstr "Selhala zmìna jména: (%s) %s; staré DN = %s, nové DN = %s, Root = %s"
+msgstr ""
+"Huts egin du izena aldatzean: (%s) %s; DN zaharra = %s, DN berria = %s, Root "
+"= %s"
 
 #: browse.php:134
 #, php-format
 msgid "Failed to find object to be added: %s"
-msgstr "Nelze nalézt objekt k pøidání: %s"
+msgstr "Huts egin du gehitzeko objektua aurkitzean: %s"
 
 #: search.php:79
 msgid "Failed to search the address book"
-msgstr "Hledání v adresáøi je nedostupné"
+msgstr "Huts egin du helbide-liburuan bilatzean"
 
 #: data.php:149
 #, php-format
 msgid "Failed to search the directory: %s"
-msgstr "Nelze prohledat kontakty: %s"
+msgstr "Huts egin du direktorioan bilatzean: %s"
 
 #: config/attributes.php.dist:167
 msgid "Fax"
-msgstr "Fax"
+msgstr "Faxa"
 
-#: edit.php:131 display.php:99
+#: display.php:99 edit.php:131
 msgid "Files"
-msgstr "Soubory"
+msgstr "Fitxategiak"
 
-#: templates/browse/search.inc:71
+#: templates/browse/search.inc:77
 msgid "Find"
-msgstr "Hledat"
+msgstr "bilatu"
 
 #: edit.php:104 edit.php:195
 msgid "Finish"
-msgstr "Konec"
+msgstr "Amaitu"
 
 #: config/attributes.php.dist:48
 msgid "First Name"
-msgstr "Jméno"
+msgstr "Izena"
 
 #: config/attributes.php.dist:202
 msgid "Freebusy URL"
-msgstr "Free/Busy URL"
+msgstr "Libre/lanpetutaren URLa"
 
-#: templates/browse/search.inc:84
+#: templates/browse/search.inc:69
 msgid "From"
-msgstr "Od"
+msgstr "Hemen"
 
-#: config/sources.php.dist:589
+#: config/sources.php.dist:625
 msgid "Global Address Book"
-msgstr "Globální adresáø"
+msgstr "Helbide-liburu orokorra"
 
 #: templates/browse/row.inc:43 templates/browse/contactrow.inc:44
 msgid "Group"
-msgstr "Skupina"
+msgstr "Taldea"
 
 #: config/attributes.php.dist:82
 msgid "Home Address"
-msgstr "Adresa domù"
+msgstr "Helbidea (etxea)"
 
 #: config/attributes.php.dist:93
 msgid "Home City"
-msgstr "Mìsto adresy domù"
+msgstr "Herria (etxea)"
 
 #: config/attributes.php.dist:108
 msgid "Home Country"
-msgstr "Zemì adresy domù"
+msgstr "Estatua (etxea)"
 
 #: config/attributes.php.dist:150
 msgid "Home Phone"
-msgstr "Telefon domù"
+msgstr "Telefonoa (etxekoa)"
 
 #: config/attributes.php.dist:103
 msgid "Home Postal Code"
-msgstr "PSÈ domù"
+msgstr "Posta-kodea (etxea)"
 
 #: config/attributes.php.dist:98
 msgid "Home State/Province"
-msgstr "Stát/provincie adresy domù"
+msgstr "Herrialdea/probintzia (etxea)"
 
 #: config/attributes.php.dist:88
 msgid "Home Street Address"
-msgstr "Ulice adresy domù"
+msgstr "Kale-helbidea (etxea)"
 
-#: config/sources.php.dist:491
+#: config/sources.php.dist:527
 msgid "IMSP"
 msgstr "IMSP"
 
-#: config/prefs.php.dist:47
+#: config/prefs.php.dist:40
 msgid "IMSP Address Book Administration"
-msgstr "Správa IMSP Adresáøe"
+msgstr "IMSP helbide-liburuen administrazioa"
 
 #: templates/data/import.inc:7
 #, php-format
 msgid "Import Address Book, Step %d"
-msgstr "Importovat adresáø, krok %d"
+msgstr "Inportatu helbide-liburua, %d. urratsa"
 
-#: data.php:375
+#: data.php:381
 msgid "Import/Export Address Books"
-msgstr "Importovat/exportovat adresáøe"
+msgstr "Inportatu/esportatu helbide-liburuak"
 
 #: lib/api.php:655 lib/api.php:742
 msgid "Invalid ID"
-msgstr "Neplatné ID"
+msgstr "IDa ez da baliozkoa"
 
-#: lib/api.php:231 lib/api.php:1158
+#: lib/api.php:231 lib/api.php:1159
 msgid "Invalid address book"
-msgstr "Neplatný adresáø"
+msgstr "Helbide-liburua ez da baliozkoa"
 
 #: lib/api.php:409 lib/api.php:541 lib/api.php:651 lib/api.php:738
 #: lib/api.php:795
 #, php-format
 msgid "Invalid address book: %s"
-msgstr "Neplatný Adresáø: %s"
+msgstr "Helbide-liburua ez da baliozkoa: %s"
 
-#: lib/api.php:1162 lib/api.php:1236 lib/api.php:1292
+#: lib/api.php:1163 lib/api.php:1237 lib/api.php:1293
 msgid "Invalid email"
-msgstr "Neplatný email"
+msgstr "Helbide elektronikoa ez da baliozkoa"
 
-#: lib/api.php:1170
+#: lib/api.php:1171
 msgid "Invalid entry"
-msgstr "Neplatná polo¾ka"
+msgstr "Sarrera ez da baliozkoa"
 
 #: lib/Driver/ldap.php:266
 msgid "Invalid key specified."
-msgstr "Byl poskytnut neplatný klíè."
+msgstr "Gako baliogabea zehaztu da."
 
-#: lib/api.php:1166
+#: lib/api.php:1167
 msgid "Invalid name"
-msgstr "Neplatné jméno"
+msgstr "Izena ez da baliozkoa"
 
 #: lib/api.php:799
 msgid "Invalid objectId"
-msgstr "Neplatné ID objektu"
+msgstr "objectId ez da baliozkoa"
 
 #: lib/Driver/ldap.php:30
 msgid ""
 "LDAP support is required but the LDAP module is not available or not loaded."
-msgstr "Je vy¾adován LDAP, ale tento modul není dostupný nebo instalovaný."
+msgstr ""
+"LDAP euskarria behar da, baina LDAP modulua ez dago erabilgarri edo ez da "
+"kargatu."
 
 #: lib/ObjectView.php:138
 msgid "Last Modified"
-msgstr "Naposledy zmìnìno"
+msgstr "Aldatze-data"
 
 #: config/attributes.php.dist:53
 msgid "Last Name"
-msgstr "Pøíjmení"
+msgstr "Abizena"
 
 #: templates/browse/column_headers.inc:16
 msgid "List"
-msgstr "Seznam"
+msgstr "Zerrenda"
 
-#: templates/browse/search.inc:78
+#: templates/browse/search.inc:82
 msgid "Matching"
-msgstr "Shodující se s"
+msgstr "hau"
 
 #: lib/api.php:206
 msgid "Maximum Number of Contacts"
-msgstr "Maximální poèet kontaktù"
+msgstr "kontaktu gehienez"
 
-#: config/prefs.php.dist:107
+#: config/prefs.php.dist:100
 msgid "Maximum number of pages"
-msgstr "Maximální poèet stránek"
+msgstr "orri gehienez"
 
 #: lib/Block/tree_menu.php:3
 msgid "Menu List"
-msgstr "Seznam nabídky"
+msgstr "Menu-zerrenda"
 
 #: lib/Driver/ldap.php:296
 msgid "Missing DN in LDAP source configuration."
-msgstr "Chybìjící DN u konfigurace zdroje LDAP."
+msgstr "DN falta da LDAP iturburuen konfigurazioan."
 
 #: config/attributes.php.dist:162
 msgid "Mobile Phone"
-msgstr "Mobilní telefon"
+msgstr "Telefono mugikorra"
 
 #: lib/Driver/ldap.php:325 lib/Driver/ldap.php:341
 #, php-format
 msgid "Modify failed: (%s) %s"
-msgstr "Selhala úprava: (%s) %s"
+msgstr "Huts egin du aldaketak: (%s) %s"
 
-#: lib/api.php:1277
+#: lib/api.php:1278
 msgid "More than 1 entry found"
-msgstr "Byla nalezena více ne¾ 1 polo¾ka"
+msgstr "Sarrera bat baino gehiago aurkitu da"
 
 #: templates/browse/actions.inc:16
 msgid "Move"
-msgstr "Pøesunout"
+msgstr "Lekuz aldatu"
 
 #: templates/prefs/addressbookselect.inc:184
 #: templates/prefs/columnselect.inc:247
 msgid "Move left"
-msgstr "Pøesunout vlevo"
+msgstr "Eraman ezkerrera"
 
 #: templates/prefs/addressbookselect.inc:186
 #: templates/prefs/columnselect.inc:249
 msgid "Move right"
-msgstr "Pøesunout vpravo"
+msgstr "Mugitu eskuinera"
 
 #: data.php:52 templates/data/import.inc:16
 msgid "Mulberry Address Book"
-msgstr "Mulberry adresáø"
+msgstr "Mulberry helbide-liburua"
 
-#: lib/api.php:1194
+#: lib/api.php:1195
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
-msgstr "Více osob s adresou [%s], ale se jménem [%s] neexistuje nikdo"
+msgstr "Hainbat pertsonak dute helbidea [%s], baina ez dago [%s] izena duenik"
 
-#: config/sources.php.dist:114
+#: config/sources.php.dist:132
 msgid "My Address Book"
-msgstr "Mùj Adresáø"
+msgstr "Nire helbide-liburua"
 
 #: addressbooks.php:119
 msgid "My Address Books"
-msgstr "Mé Adresáøe"
+msgstr "Nire helbide-liburuak"
 
 #: templates/addressbooks.inc:114 config/attributes.php.dist:42
 msgid "Name"
-msgstr "Jméno"
+msgstr "Izena"
 
 #: config/prefs.php.dist:31
 msgid "Name Format"
-msgstr "Formát jména"
+msgstr "Izen-formatua"
 
 #: add.php:36 add.php:127 lib/Block/tree_menu.php:27
 msgid "New Contact"
-msgstr "Nový kontakt"
+msgstr "Kontaktu berria"
 
 #: edit.php:95 edit.php:102 edit.php:210 templates/data/import.inc:45
 msgid "Next"
-msgstr "Dal¹í"
+msgstr "Hurrengoa"
 
 #: config/attributes.php.dist:218
 msgid "Nickname"
-msgstr "Pøezdívka/alias"
+msgstr "Goitizena"
 
-#: lib/api.php:1280 lib/api.php:1329
+#: lib/api.php:1281 lib/api.php:1330
 #, php-format
 msgid "No %s entry found for %s"
-msgstr "®ádná polo¾ka %s nebyla nalezena pro %s"
+msgstr "Ez da aurkitu %s sarrerarik %s(r)entzat"
 
-#: lib/api.php:1245
+#: lib/api.php:1246
 msgid "No address books found."
-msgstr "Nebyl nalezen ¾ádný adresáø."
+msgstr "Ez da aurkitu helbide-libururik."
 
-#: minisearch.php:81
+#: minisearch.php:83
 msgid "No contacts found"
-msgstr "Nebyly nalezeny ¾ádné kontakty."
+msgstr "Ez da aurkitu kontakturik"
 
 #: lib/api.php:566 lib/api.php:830
 msgid "No vCard data was found."
-msgstr "Nebyly nalezeny ¾ádná vCard data."
+msgstr "Ez da aurkitu vCard daturik."
 
 #: templates/browse/footer.inc:7
 msgid "None"
-msgstr "®ádný"
+msgstr "Bat ere ez"
 
 #: config/attributes.php.dist:184
 msgid "Notes"
-msgstr "Poznámka"
+msgstr "Oharrak"
 
-#: config/prefs.php.dist:115
+#: config/prefs.php.dist:108
 msgid "Number of items per page"
-msgstr "Poèet polo¾ek na stránku"
+msgstr "Elementu kopurua orriko"
 
 #: lib/api.php:671 lib/api.php:811
 msgid "Object not found"
-msgstr "Objekt nebyl nalezen"
+msgstr "Objektua ez da aurkitu"
 
 #: config/attributes.php.dist:223
 msgid "Office"
-msgstr "Kanceláø"
+msgstr "Bulegoa"
 
 #: templates/prefs/imsp_opt.inc:22
 msgid ""
@@ -749,306 +732,305 @@ msgid ""
 "deleted. If this is not what you want, then you must change your selection "
 "to \"None\"."
 msgstr ""
-"Po ulo¾ení tohoto nastavení bude Adresáø nenávratnì odstranìn. Jestli¾e si "
-"to nepøejete, musíte zmìnit Va¹i volbu na \"®ádný\"."
+"Aukera-orri hau gordetzen duzunean, helbide-liburua betiko ezabatuko da. Ez "
+"baduzu hori nahi, hautatu \"Bat ere ez\"."
 
 #: lib/api.php:838
 msgid "Only one vcard supported."
-msgstr "Je podporávána jen jedna vCard."
+msgstr "vcard bat bakarrik onartzen da."
 
-#: config/prefs.php.dist:37 config/prefs.php.dist:46
+#: config/prefs.php.dist:39
 msgid "Other Options"
-msgstr "Dal¹í mo¾nosti"
+msgstr "Beste aukera batzuk"
 
 #: config/attributes.php.dist:190
 msgid "PGP Public Key"
-msgstr "Veøejný PGP klíè"
+msgstr "PGP gako publikoa"
 
-#: lib/api.php:550 lib/api.php:664 lib/api.php:751 lib/api.php:1014
-#: lib/api.php:1179
+#: lib/api.php:550 lib/api.php:664 lib/api.php:751 lib/api.php:1015
+#: lib/api.php:1180
 msgid "Permission Denied"
-msgstr "Nepovolený pøístup"
+msgstr "Baimena ukatu da"
 
 #: lib/Driver.php:554
 msgid "Permission denied"
-msgstr "Nepovolený pøístup"
+msgstr "Baimena ukatuta"
 
 #: templates/addressbooks.inc:106
 msgid "Permissions"
-msgstr "Oprávnìní"
+msgstr "Baimenak"
 
 #: data.php:53 templates/data/import.inc:17
 msgid "Pine Address Book"
-msgstr "Pine adresáø"
+msgstr "Pine helbide-liburua"
 
 #: templates/browse/javascript.inc:28
 msgid "Please name the new contact list:"
-msgstr "Zadejte jméno nového seznamu kontaktù:"
+msgstr "Idatzi kontaktu-zerrenda berriaren izena:"
 
 #: edit.php:98 edit.php:101 edit.php:202
 msgid "Previous"
-msgstr "Pøedchozí"
+msgstr "Aurrekoa"
 
 #: lib/Driver/ldap.php:147
 #, php-format
 msgid "Query failed: (%s) %s"
-msgstr "Vyhledávání selhalo: (%s) %s"
+msgstr "Kontsulta honek huts egin du: (%s) %s"
 
 #: templates/block/minisearch.inc:15
 msgid "Quick Search"
-msgstr "Rychlé vyhledávání"
+msgstr "Bilaketa azkarra"
 
 #: lib/Driver/ldap.php:191 lib/Driver/ldap.php:199 lib/Driver/ldap.php:435
 #, php-format
 msgid "Read failed: (%s) %s"
-msgstr "Ètení selhalo: (%s) %s"
+msgstr "Huts egin du irakurtzean: (%s) %s"
 
 #: lib/Driver/null.php:52
 msgid "Reading contacts is not available."
-msgstr "Ètení kontaktù není dostupné."
+msgstr "Kontaktu-irakurtzea ez dago erabilgarri."
 
 #: lib/Renderer.php:49
 msgid "Really delete this contact?"
-msgstr "Skuteènì odstranit tento kontakt?"
+msgstr "Ziur zaude kontaktu hau ezabatu nahi duzula?"
 
 #: templates/browse/footer.inc:2
 msgid "Records displayed:"
-msgstr "Zobrazené záznamy:"
+msgstr "Bistaratutako erregistroak:"
 
 #: templates/prefs/addressbookselect.inc:176
 msgid "Remove address book"
-msgstr "Odstranit Adresáø"
+msgstr "Kendu helbide-liburua"
 
 #: templates/prefs/columnselect.inc:239
 msgid "Remove column"
-msgstr "Odstranit sloupec"
+msgstr "Kendu zutabea"
 
 #: templates/browse/actions.inc:3
 msgid "Remove from this list"
-msgstr "Odstranit ze seznamu"
+msgstr "Kendu zerrenda honetatik"
 
 #: templates/data/import.inc:21
 msgid ""
 "Replace existing address book with the imported one? <strong>Warning: This "
 "deletes all entries in your current address book.</strong>"
 msgstr ""
-"Nahratit existující adresáø importovaným? <strong>Upozornìní: Tato operace "
-"sma¾e v¹echny dosavadní polo¾ky v adresáøi.</strong>"
+"Ordeztu lehendik dagoen helbide-liburua inportatutakoarekin? <strong>Kontuz: "
+"uneko helbide-liburuko sarrera guztiak ezabatuko ditu.</strong>"
 
 #: lib/Driver.php:442
 msgid "Requested object not found."
-msgstr "Po¾adovaný objekt nebyl nalezen."
+msgstr "Eskatutako objektua ez da aurkitu"
 
-#: add.php:37 templates/browse/search.inc:114
+#: add.php:37 templates/browse/search.inc:101
 msgid "Reset to Defaults"
-msgstr "Nastavit výchozí implicitní hodnoty"
+msgstr "Berrezarri lehenetsiak"
 
 #: config/attributes.php.dist:196
 msgid "S/MIME Public Certificate"
-msgstr "S/MIME veøejný certifikát"
+msgstr "S/MIME ziurtagiri publikoa"
 
 #: lib/Driver/ldap.php:69
 #, php-format
 msgid "STARTTLS failed: (%s) %s"
-msgstr "STARTTLS selhalo: (%s) %s"
+msgstr "STARTTLSek huts egin du: (%s) %s"
 
-#: edit.php:106 add.php:37 templates/addressbooks.inc:131
+#: add.php:37 edit.php:106 templates/addressbooks.inc:131
 msgid "Save"
-msgstr "Ulo¾it"
+msgstr "Gorde"
 
 #: lib/Driver/null.php:67
 msgid "Saving contacts is not available."
-msgstr "Ukládání kontaktù není dostupné."
+msgstr "Kontaktu-gordetzea ez dago erabilgarri."
 
-#: lib/Block/tree_menu.php:49 templates/browse/search.inc:97
-#: templates/browse/search.inc:113 templates/block/minisearch.inc:18
-#: config/prefs.php.dist:126
+#: lib/Block/tree_menu.php:49 templates/browse/search.inc:85
+#: templates/browse/search.inc:100 templates/block/minisearch.inc:18
+#: config/prefs.php.dist:119
 msgid "Search"
-msgstr "Hledat"
+msgstr "Bilatu"
 
-#: lib/api.php:1091
+#: lib/api.php:1092
 msgid "Search failed"
-msgstr "Hledání selhalo"
+msgstr "Bilaketak huts egin du"
 
-#: lib/api.php:1184 lib/api.php:1190 lib/api.php:1199 lib/api.php:1212
+#: lib/api.php:1185 lib/api.php:1191 lib/api.php:1200 lib/api.php:1213
 #, php-format
 msgid "Search failed: %s"
-msgstr "Hledání selhalo: %s"
+msgstr "Bilaketak huts egin du: %s"
 
 #: lib/Driver/null.php:47
 msgid "Searching is not available."
-msgstr "Hledání není dostupné."
+msgstr "Bilaketa ez dago erabilgarri."
 
 #: templates/block/minisearch.inc:19
 msgid "Searching..."
-msgstr "Vyhledávám..."
+msgstr "Bilatzen..."
 
 #: templates/addressbooks.inc:73
 msgid "Select an address book to delete"
-msgstr "Vyberte Adresáø k odstranìní"
+msgstr "Hautatu helbide-liburu bat ezabatzeko"
 
 #: templates/addressbooks.inc:97
 msgid "Select an address book to edit"
-msgstr "Vyberte Adresáø k úpravì"
+msgstr "Hautatu helbide-liburu bat editatzeko"
 
 #: templates/data/export.inc:32
 msgid "Select the address book to export from:"
-msgstr "Vyberte adresáø, ze kterého budete exportovat:"
+msgstr "Hautatu zein helbide-liburutatik egingo den esportazioa:"
 
 #: templates/data/import.inc:26
 msgid "Select the address book to import to:"
-msgstr "Vyberte adresáø, do kterého se bude importovat:"
+msgstr "Hautatu zein helbide-liburutara egingo den inportazioa:"
 
 #: templates/data/import.inc:35
 msgid "Select the charset of the source file:"
-msgstr "Vyberte znakovou sadu zdrojového souboru:"
+msgstr "Hautatu iturburu-fitxategiaren karaktere-katea:"
 
 #: templates/data/export.inc:10
 msgid "Select the export format:"
-msgstr "Veberte formát exportu:"
+msgstr "Hautatu esportazio-formatua:"
 
 #: templates/data/import.inc:43
 msgid "Select the file to import:"
-msgstr "Vyberte soubor k importování:"
+msgstr "Hautatu inportatu beharreko fitxategia:"
 
 #: templates/data/import.inc:11
 msgid "Select the format of the source file:"
-msgstr "Vyberte formát zdrojového souboru:"
+msgstr "Hautatu iturburu-fitxategiaren formatua:"
 
-#: config/prefs.php.dist:135
+#: config/prefs.php.dist:128
 msgid "Select the format used to display names:"
-msgstr "Vyberte formát zobrazení jmen:"
+msgstr "Hautatu izenak bistaratzeko erabiliko den formatua:"
 
 #: config/prefs.php.dist:25
 msgid "Select view to display by default, sort options, and paging options."
-msgstr "Zvolte implicitní zobrazení, mo¾nosti tøídìní a mo¾nosti stránkování."
+msgstr ""
+"Hautatu lehenespenez bistaratzeko ikuspegia, ordenatze-aukerak eta "
+"orrialdekatze-aukerak."
 
 #: config/prefs.php.dist:18
 msgid "Select which fields to display in the address lists."
-msgstr "Volba polí, která mají být zobrazena v seznamu adres."
+msgstr "Hautatu helbide-zerrendetan bistaratzeko eremuak."
 
 #: config/prefs.php.dist:32
 msgid "Select which format to display names."
-msgstr "Volba formátu zobrazení jmen."
+msgstr "Hautatu izenak bistaratzeko formatua."
 
 #: add.php:54
 #, php-format
 msgid "Selected address book \"%s\"."
-msgstr "Zvolený Adresáø \"%s\"."
+msgstr "Hautatutako helbidea liburua, \"%s\"."
 
-#: templates/browse/actions.inc:46
+#: templates/browse/actions.inc:47
 #, php-format
 msgid "Show %s"
-msgstr "Zobrazit %s"
+msgstr "Erakutsi %s"
 
-#: templates/browse/actions.inc:48
+#: templates/browse/actions.inc:49
 msgid "Show All"
-msgstr "Zobrazit v¹e"
+msgstr "Erakutsi denak"
 
-#: templates/browse/actions.inc:47
+#: templates/browse/actions.inc:48
 msgid "Show Contacts"
-msgstr "Zobrazit kontakty"
+msgstr "Erakutsi kontaktuak"
 
-#: templates/browse/actions.inc:46
+#: templates/browse/actions.inc:47
 msgid "Show Lists"
-msgstr "Zobrazit seznamy"
+msgstr "Erakutsi zerrendak"
 
 #: templates/browse/column_headers.inc:21
 #: templates/browse/column_headers.inc:36
 msgid "Sort Direction"
-msgstr "Smìr tøídìní"
+msgstr "Ordenatzeko noranzkoa"
 
 #: lib/api.php:199
 msgid "Sources"
-msgstr "Zdroje"
-
-#: config/prefs.php.dist:158
-msgid "Specify where you want advanced search results to appear."
-msgstr "Urèete kam si pøejete zobrazit výsledky pokroèilého vyhledávání."
+msgstr "Iturburuak"
 
-#: browse.php:214 browse.php:262
+#: browse.php:218 browse.php:266
 #, php-format
 msgid "Successfully added %d contact(s) to list."
-msgstr "Do seznamu bylo úspì¹nì pøidáno %d kontakt(ù)."
+msgstr "Behar bezala gehitu da/dira %d kontaktu zerrendan."
 
 #: browse.php:160
 #, php-format
 msgid "Successfully added %s to %s"
-msgstr "Úspì¹nì pøidáno %s do %s"
+msgstr "Behar bezala gehitu da: %s --> %s"
 
-#: browse.php:248
+#: browse.php:252
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
-msgstr "Seznam kontaktù \"%s\" byl úspì¹nì vytvoøen."
+msgstr "Behar bezala sortu da \"%s\" kontaktu-zerrenda."
 
 #: browse.php:84
 #, php-format
 msgid "Successfully deleted %d contact(s)."
-msgstr "%d kontakt(ù) bylo úspì¹nì odstranìno."
+msgstr "Behar bezala ezabatu da/dira %d kontaktu."
 
 #: browse.php:64
 #, php-format
 msgid "Successfully removed %d contact(s) from list."
-msgstr "%d kontakt(ù) bylo úspì¹nì odstranìno ze seznamu."
+msgstr "Behar bezala kendu da/dira %d kontaktu zerrendatik."
 
 #: data.php:50
 msgid "TSV"
 msgstr "TSV"
 
-#: templates/data/import.inc:14 templates/data/export.inc:14
+#: templates/data/export.inc:14 templates/data/import.inc:14
 msgid "Tab separated values"
-msgstr "Tab oddìlené hodnoty"
+msgstr "Tabulazioz bereizitako balioak"
 
 #: data.php:304
 #, php-format
 msgid "The %s file didn't contain any contacts."
-msgstr "Soubor %s neobsahoval ¾ádné kontakty."
+msgstr "%s fitxategiak ez dauka kontakturik."
 
 #: view.php:15
 msgid "The VFS backend needs to be configured to enable attachment uploads."
-msgstr "Pro odesílání pøíloh musí být nastaven VSF systém."
+msgstr ""
+"VFS moduluak eranskinak kargatzea gaitzeko egon behar du konfiguratuta."
 
-#: lib/Driver.php:1157
+#: lib/Driver.php:1188
 #, php-format
 msgid "The address book \"%s\" does not exist."
-msgstr "Adresáø \"%s\" neexistuje."
+msgstr "\"%s\" helbide-liburua ez dago."
 
 #: addressbooks.php:48
 #, php-format
 msgid "The address book \"%s\" was created successfully."
-msgstr "Adresáø \"%s\" byl úspì¹nì zalo¾en."
+msgstr "\"%s\" helbide-liburua behar bezala sortu da."
 
 #: addressbooks.php:71
 #, php-format
 msgid "The address book \"%s\" was removed successfully."
-msgstr "Adresáø \"%s\" byl úspì¹nì odstranìn."
+msgstr "\"%s\" helbide-liburua behar bezala kendu da."
 
 #: addressbooks.php:89
 #, php-format
 msgid "The address book \"%s\" was successfully updated."
-msgstr "Adresáø \"%s\" byl úspì¹nì aktualizován."
+msgstr "\"%s\" helbide-liburua behar bezala eguneratu da."
 
-#: data.php:311
+#: data.php:317
 #, php-format
 msgid "The address book could not be purged: %s"
-msgstr "Nelze vyèistit adresáø: %s"
+msgstr "Helbide-liburua ezin izan da purgatu: %s"
 
-#: edit.php:51 view.php:26 display.php:23 vcard.php:22
+#: view.php:26 display.php:23 vcard.php:22 edit.php:51
 msgid "The contact you requested does not exist."
-msgstr "Po¾adovaný kontakt neexistuje."
+msgstr "Zuk eskatutako kontaktua ez dago."
 
 #: edit.php:123
 #, php-format
 msgid "The file \"%s\" has successfully been deleted."
-msgstr "\"%s\" soubor byl úspì¹nì smazán."
+msgstr "\"%s\" fitxategia behar bezala ezabatu da."
 
 #: data.php:284
 msgid "The import can be finished despite the warnings."
-msgstr "Import mù¾e být dokonèen navzdory upozornìním."
+msgstr "Inportazioa burutu daiteke, abisuak egon arren."
 
 #: browse.php:31
 msgid "There are no browseable address books."
-msgstr "Nejsou dostupné ¾adné adresáøe k prohlí¾ení."
+msgstr "Ez dago arakatzeko moduko helbide-libururik."
 
 #: add.php:29
 msgid ""
@@ -1056,274 +1038,272 @@ msgid ""
 "are configured to allow you to add new entries to them. If you believe this "
 "is an error, please contact your system administrator."
 msgstr ""
-"Nejsou zde ¾ádné adresáøe s mo¾ností zápisu. ®ádné adresáøe nejsou "
-"nakonfigurovány pro zápis nových polo¾ek. Pokud si myslíte, ¾e je to chyba, "
-"prosím kontaktujte svého systémového administrátora."
+"Ez dago idazteko moduko helbide-libururik. Erabilgarri dauden helbide-"
+"liburuetako bat bera ere ez dago konfiguratuta sarrera berriak gehitu ahal "
+"izateko. Hau errore bat dela iruditzen bazaizu, galdetu sistema-"
+"administratzaileari."
 
 #: add.php:124
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
 msgstr ""
-"Nastala chyba pøi vkládání nového kontaktu. Kontaktujte Va¹eho systémového "
-"administrátora."
+"Errore bat gertatu da kontaktu berria gehitzean. Laguntza gehiago nahi "
+"izanez gero, galdetu sistema-administratzaileari."
 
-#: browse.php:271
+#: browse.php:275
 msgid "There was an error creating a new list."
-msgstr "Nastala chyba pøi vytváøení nového seznamu."
+msgstr "Errorea gertatu da zerrenda berria sortzean."
 
 #: addressbooks.php:38
 #, php-format
 msgid "There was an error creating this address book: %s"
-msgstr "Nastala chyba pøi vytváøení tohoto Adresáøe: %s"
+msgstr "Errorea gertatu da helbide-liburu hau sortzean: %s"
 
 #: browse.php:166
 #, php-format
 msgid "There was an error deleting \"%s\" from the source address book."
-msgstr "Nastala chyba pøi mazání \"%s\" ze zdrojového adresáøe."
+msgstr "Errorea gertatu da \"%s\" ezabatzean sorburuko helbide-liburutik."
 
 #: delete.php:37
 #, php-format
 msgid "There was an error deleting this contact: %s"
-msgstr "Nastala chyba pøi mazání tohoto kontaktu: %s"
+msgstr "Errorea gertatu da kontaktu hau ezabatzean: %s"
 
-#: browse.php:318
+#: browse.php:322
 msgid "There was an error displaying the list"
-msgstr "Nastala chyba pøi zobrazování seznamu"
+msgstr "Errorea gertatu da zerrenda bistaratzean"
 
-#: data.php:343
+#: data.php:349
 #, php-format
 msgid "There was an error importing the data: %s"
-msgstr "Nastala chyba pøi importování dat: %s"
+msgstr "Errorea gertatu da datuak inportatzean: %s"
 
 #: lib/api.php:562 lib/api.php:825
 msgid "There was an error importing the iCalendar data."
-msgstr "Pøi importování iCalendar dat do¹lo k chybì."
+msgstr "Errorea gertatu da iCalendar datuak inportatzean."
 
 #: addressbooks.php:58 addressbooks.php:63 addressbooks.php:69
 #, php-format
 msgid "There was an error removing this address book: %s"
-msgstr "Nastala chyba pøi odstraòování tohoto Adresáøe: %s"
+msgstr "Errorea gertatu da helbide-liburu hau kentzean: %s"
 
 #: addressbooks.php:87
 #, php-format
 msgid "There was an error updating this address book: %s"
-msgstr "Nastala chyba pøi aktualizaci tohoto Adresáøe: %s"
+msgstr "Errorea gertatu da helbide-liburu hau eguneratzean: %s"
 
 #: edit.php:165
 #, php-format
 msgid "There was an error updating this entry: %s"
-msgstr "Nastala chyba pøi aktualizaci této polo¾ky: %s"
+msgstr "Errorea gertatu da sarrera hau eguneratzean: %s"
 
 #: data.php:179
 msgid "There were no addresses to export."
-msgstr "®ádné kontakty pro exportování."
+msgstr "Ez dago helbiderik esportatzeko."
 
 #: templates/prefs/addressbookselect.inc:180
 msgid "These address books will display in this order:"
-msgstr "Tyto Adresáøe se zobrazí v tomto poøadí:"
+msgstr "Helbide-liburu hauek ordena honetan bistaratuko dira:"
 
 #: templates/prefs/columnselect.inc:243
 msgid "These columns will display in this order:"
-msgstr "Tyto sloupeèky se zobrazí v tomto poøadí:"
+msgstr "Zutabe hauek ordena honetan bistaratuko dira:"
 
 #: data.php:269
 msgid "This file format is not supported."
-msgstr "Tento formát souboru nelze pou¾ít."
+msgstr "Fitxategi-formatu hau ez da onartzen."
 
-#: lib/api.php:1203 lib/api.php:1216
+#: lib/api.php:1204 lib/api.php:1217
 #, php-format
 msgid "This person already has a %s entry in the address book"
-msgstr "Tato osoba se ji¾ nachází ve Va¹em adresáøi jako %s."
+msgstr "Pertsona honek badu lehendik %s sarrera bat helbide-liburuan"
 
-#: config/prefs.php.dist:148
+#: config/prefs.php.dist:141
 msgid ""
 "This will be the default address book when adding or importing contacts."
-msgstr "Toto bude implicitní Adresáø pro pøidávání nebo importování kontaktù."
+msgstr ""
+"Hau izango da kontaktuak gehitzeko edo inportatzeko helbide-liburu "
+"lehenetsia."
 
 #: config/attributes.php.dist:70
 msgid "Title"
-msgstr "Titul"
+msgstr "Titulua"
 
-#: lib/Turba.php:443
-#, php-format
-msgid "Unable to create new share. Missing source type."
-msgstr "Nelze vytvoøit novou sdílenou slo¾ku. Chybí typ zdroje."
-
-#: lib/Driver.php:1081
+#: lib/Driver.php:1112
 #, php-format
 msgid "Unable to load the definition of %s."
-msgstr "Nelze dosáhnout definici %s."
+msgstr "Ezin da kargatu %s(r)en definizioa."
 
 #: edit.php:95 edit.php:98 edit.php:101 edit.php:106 edit.php:204
 msgid "Undo Changes"
-msgstr "Storno zmìn"
+msgstr "Desegin aldaketak"
 
 #: lib/api.php:595 lib/api.php:696 lib/api.php:843
 #, php-format
 msgid "Unsupported Content-Type: %s"
-msgstr "Nepodporovaný typ obsahu (Content-Type): %s"
+msgstr "Eduki mota hau ez da onartzen: %s"
 
 #: templates/browse/row.inc:19 templates/browse/contactrow.inc:27
 #, php-format
 msgid "View \"%s\""
-msgstr "Zobrazit \"%s\""
+msgstr "Ikusi \"%s\""
 
-#: minisearch.php:76
+#: minisearch.php:78
 msgid "View Contact"
-msgstr "Zobrazit kontakt"
+msgstr "Ikusi kontaktua"
 
-#: config/prefs.php.dist:124
+#: config/prefs.php.dist:117
 msgid "View to display by default:"
-msgstr "Implicitní zobrazení:"
+msgstr "Lehenespenez bistaratzeko ikuspegia"
 
 #: config/attributes.php.dist:208
 msgid "Website URL"
-msgstr "URL www stránky"
+msgstr "Webgunearen URLa"
 
 #: config/attributes.php.dist:113
 msgid "Work Address"
-msgstr "Adresa do zamìstnání"
+msgstr "Helbidea (lantokia)"
 
 #: config/attributes.php.dist:124
 msgid "Work City"
-msgstr "Mìsto adresy do zamìstnání"
+msgstr "Herria (lantokia)"
 
 #: config/attributes.php.dist:139
 msgid "Work Country"
-msgstr "Zemì adresy do zamìstnání"
+msgstr "Estatua (lantokia)"
 
 #: config/attributes.php.dist:156
 msgid "Work Phone"
-msgstr "Telefon do zamìstnání"
+msgstr "Telefonoa (lanekoa)"
 
 #: config/attributes.php.dist:134
 msgid "Work Postal Code"
-msgstr "PSÈ do zamìstnání"
+msgstr "Posta-kodea (lantokia)"
 
 #: config/attributes.php.dist:129
 msgid "Work State/Province"
-msgstr "Stát/provincie adresy do zamìstnání"
+msgstr "Herrialdea/probintzia (lantokia)"
 
 #: config/attributes.php.dist:119
 msgid "Work Street Address"
-msgstr "Ulice adresy do zamìstnání"
+msgstr "Kale-helbidea (lantokia)"
 
-#: data.php:237 browse.php:106 browse.php:227 add.php:73
+#: add.php:73 browse.php:106 browse.php:231 data.php:237
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
-msgstr "Nejste oprávnìn vytvoøit více ne¾ %d kontaktù v \"%s\"."
+msgstr "Ez duzu baimenik %d kontaktu baino gehiago sortzeko hemen: \"%s\"."
 
-#: edit.php:73 view.php:36 display.php:52
+#: view.php:36 display.php:52 edit.php:73
 msgid "You do not have permission to view this contact."
-msgstr "Nedostateèná práva pro prohlí¾ení tohoto kontaktu."
+msgstr "Ez duzu baimenik kontaktu hau ikusteko."
 
 #: vcard.php:40
 msgid "You do not have permission to view this object."
-msgstr "Nedostateèná práva pro prohlí¾ení tohoto objektu."
+msgstr "Ez duzu baimenik objektu hau ikusteko."
 
-#: lib/Turba.php:534
+#: lib/Turba.php:536
 msgid "You do not have permissions to delete this source."
-msgstr "Nedostateèná práva pro smazání tohoto zdroje."
+msgstr "Ez duzu baimenik iturburu hau ezabatzeko."
 
 #: templates/browse/javascript.inc:55
 msgid "You must select a target address book."
-msgstr "Musíte nejdøíve vybrat cílový adresáø."
+msgstr "Helburuko helbide-liburu bat hautatu behar duzu."
 
 #: templates/browse/javascript.inc:23
 msgid "You must select a target list."
-msgstr "Musíte nejdøíve vybrat cílový seznam."
+msgstr "Helburuko zerrenda bat hautatu behar duzu."
 
 #: edit.php:32
 msgid "You must select at least one contact first."
-msgstr "Musíte nejdøíve vybrat alespoò jeden kontakt."
+msgstr "Kontaktu bat hautatu behar duzu gutxienez lehendabizi."
 
 #: templates/browse/javascript.inc:17 templates/browse/javascript.inc:49
 #: templates/browse/javascript.inc:72
 msgid "You must select at least one entry first."
-msgstr "Musíte nejdøíve vybrat alespoò jednu polo¾ku."
+msgstr "Sarrera bat hautatu behar duzu gutxienez lehendabizi."
 
 #: edit.php:77
 msgid "You only have permission to view this contact."
-msgstr "Va¹e práva dovolují pouze prohlí¾ení tohoto kontaktu."
+msgstr "Kontaktu hau ikusteko baimena bakarrik daukazu."
 
-#: browse.php:325
+#: browse.php:329
 msgid "Your default address book is not browseable."
-msgstr "Vá¹ implicitní adresáø nelze procházet."
+msgstr "Zure helbide-liburu lehenetsia ez da arakatzeko modukoa."
 
 #: templates/browse/row.inc:6 templates/browse/contactrow.inc:12
 msgid "[no value]"
-msgstr "[¾ádná hodnota]"
+msgstr "[baliorik ez]"
 
-#: lib/Turba.php:557
+#: lib/Turba.php:559
 msgid "_Browse"
-msgstr "_Prohlí¾et"
+msgstr "_Arakatu"
 
-#: templates/browse/actions.inc:47
+#: templates/browse/actions.inc:48
 msgid "_Contacts"
-msgstr "_Kontakty"
+msgstr "_Kontaktuak"
 
 #: templates/browse/actions.inc:3
 msgid "_Delete"
-msgstr "_Smazat"
+msgstr "E_zabatu"
 
-#: lib/Turba.php:566
+#: lib/Turba.php:568
 msgid "_Import/Export"
-msgstr "_Importovat/exportovat"
+msgstr "_Inportatu/esportatu"
 
-#: templates/browse/actions.inc:46
+#: templates/browse/actions.inc:47
 msgid "_Lists"
-msgstr "_Seznamy"
+msgstr "Zerren_dak"
 
-#: lib/Turba.php:554
+#: lib/Turba.php:556
 msgid "_My Address Books"
-msgstr "_Mé Adresáøe"
+msgstr "_Nire helbide-liburuak"
 
-#: lib/Turba.php:560
+#: lib/Turba.php:562
 msgid "_New Contact"
-msgstr "_Nový kontakt"
+msgstr "_Kontaktu berria"
 
 #: templates/browse/actions.inc:3
 msgid "_Remove from this list"
-msgstr "_Odstranit z tohoto seznamu"
+msgstr "K_endu zerrenda honetatik"
 
-#: lib/Turba.php:562
+#: lib/Turba.php:564
 msgid "_Search"
-msgstr "_Vyhledat"
+msgstr "_Bilatu"
 
 #: vcard.php:46
 msgid "contact.vcf"
-msgstr "kontakty.vcf"
+msgstr "kontaktua.vcf"
 
 #: data.php:199 data.php:204 templates/data/export.inc:1
 msgid "contacts.csv"
-msgstr "kontakty.csv"
+msgstr "kontaktuak.csv"
 
 #: data.php:209
 msgid "contacts.tsv"
-msgstr "kontakty.tsv"
+msgstr "kontaktuak.tsv"
 
 #: data.php:219
 msgid "contacts.vcf"
-msgstr "kontakty.vcf"
+msgstr "kontaktuak.vcf"
 
-#: config/prefs.php.dist:138
+#: config/prefs.php.dist:131
 msgid "no formatting"
-msgstr "bez formátování"
+msgstr "formaturik ez"
 
 #: templates/prefs/imsp_opt.inc:32
 msgid "none"
-msgstr "¾ádný"
+msgstr "bat ere ez"
 
 #: templates/browse/actions.inc:31
 msgid "to a Contact List"
-msgstr "do seznamu kontaktù"
+msgstr "kontaktu-zerrenda batera"
 
 #: templates/browse/actions.inc:21
 msgid "to a different Address Book"
-msgstr "do jiného Adresáøe"
+msgstr "beste helbide-liburu batera"
 
 #: data.php:51 templates/browse/column_headers.inc:13
-#: templates/data/import.inc:15 templates/data/export.inc:15
+#: templates/data/export.inc:15 templates/data/import.inc:15
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index d39ec45..de13456 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Turba 3.0-cvs\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-05-20 15:42+0300\n"
-"PO-Revision-Date: 2008-05-20 12:59+0200\n"
+"POT-Creation-Date: 2008-09-16 09:23+0300\n"
+"PO-Revision-Date: 2008-09-16 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"
@@ -17,23 +17,23 @@ msgstr ""
 
 #: templates/prefs/imsp_opt.inc:40
 msgid " Add an IMSP Address Book"
-msgstr "Lisää IMSP-osoitekirja"
+msgstr " Lisää IMSP-osoitekirja"
 
 #: templates/prefs/imsp_opt.inc:29
 msgid " Delete IMSP Address Book"
-msgstr "Poista IMSP-osoitekirja"
+msgstr " Poista IMSP-osoitekirja"
 
-#: data.php:350
+#: data.php:455
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr "\"%s\" on jo olemassa ja ei tuotu."
 
-#: lib/Forms/EditContact.php:76
+#: lib/Forms/EditContact.php:83
 #, php-format
 msgid "\"%s\" updated, but saving the uploaded file failed: %s"
 msgstr "\"%s\" päivitettiin, mutta tuodun tiedoston talletus epäonnistui: %s"
 
-#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
 #, php-format
 msgid "\"%s\" updated."
 msgstr "\"%s\" päivitetty."
@@ -56,27 +56,27 @@ msgstr "\"Etunimi Sukunimi\"  (esim. Matti Meik
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr "\"Sukunimi, Etunimi\" (esim. Meikäläinen, Matti)"
 
-#: lib/Forms/AddContact.php:83
+#: lib/Driver.php:619
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s / %s"
+
+#: lib/Forms/AddContact.php:88
 #, php-format
 msgid "%s added."
 msgstr "%s lisätty."
 
-#: data.php:369
+#: data.php:483
 #, php-format
 msgid "%s file successfully imported."
 msgstr "%s tiedosto tuotiin onnistuneesti."
 
-#: lib/Driver.php:559
-#, php-format
-msgid "%s of %s"
-msgstr "%s / %s"
-
 #: templates/list/numPager.inc:6
 #, php-format
 msgid "%s to %s of %s"
 msgstr "%s - %s / %s"
 
-#: lib/Turba.php:563
+#: lib/Turba.php:541
 #, php-format
 msgid "%s's Address Book"
 msgstr "%s:n osoitekirja"
@@ -110,7 +110,7 @@ msgstr "Lis
 msgid "Add to"
 msgstr "Lisää kohteeseen"
 
-#: lib/Driver.php:1895
+#: lib/Driver.php:2113 lib/Driver/null.php:57
 msgid "Adding contacts is not available."
 msgstr "Yhteystietojen lisääminen ei ole käytettävissä."
 
@@ -130,16 +130,16 @@ msgstr "Osoitekirjan selaus"
 msgid "Address Books"
 msgstr "Osoitekirjat"
 
-#: data.php:330
+#: data.php:435
 msgid "Address book successfully purged."
 msgstr "Osoitekirja tyhjennettiin."
 
 #: templates/prefs/addressbookselect.inc:167
 #: templates/prefs/addressbookselect.inc:169
 msgid "Address books that will not be displayed:"
-msgstr "Osoitekirjaa ei voitu näyttää: %s"
+msgstr "Osoitekirjat, joita ei näytetä"
 
-#: search.php:199 templates/browse/search.inc:47
+#: search.php:184 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Tarkempi haku"
 
@@ -151,7 +151,7 @@ msgstr "Alias"
 msgid "All"
 msgstr "Kaikki"
 
-#: lib/api.php:908
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr "On jo olemassa"
 
@@ -172,11 +172,11 @@ msgstr "Oletko varma, ett
 msgid "Are you sure that you want to delete the selected contacts?"
 msgstr "Oletko varma, että haluat poistaa valitut?"
 
-#: config/attributes.php.dist:378
+#: config/attributes.php.dist:424
 msgid "Assistant"
 msgstr "Apulainen"
 
-#: search.php:196 templates/browse/search.inc:46
+#: search.php:181 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "Yksinkertainen haku"
 
@@ -193,7 +193,7 @@ msgstr "Syntym
 msgid "Birthdays"
 msgstr "Syntymäpäivät"
 
-#: contact.php:106 templates/browse/row.inc:6
+#: contact.php:128 templates/browse/row.inc:10
 msgid "Blank name"
 msgstr "Tyhjä nimi"
 
@@ -206,11 +206,11 @@ msgstr "Molemmat"
 msgid "Browse"
 msgstr "Selaa"
 
-#: config/attributes.php.dist:288
+#: config/attributes.php.dist:300
 msgid "Business Category"
 msgstr "Liiketoiminnan luokitus"
 
-#: data.php:60
+#: data.php:101
 msgid "CSV"
 msgstr "CSV"
 
@@ -227,11 +227,11 @@ msgstr "Peru"
 msgid "Cannot delete all address book entries for %s"
 msgstr "Ei voida poistaa kaikkia osoitekirjan %s tietueita"
 
-#: config/attributes.php.dist:350
+#: config/attributes.php.dist:388
 msgid "Category"
 msgstr "Kategoria"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 #, php-format
 msgid "Change %s sort to %s"
 msgstr "Muuta %s:n järjestys %s:ksi"
@@ -240,11 +240,11 @@ msgstr "Muuta %s:n j
 msgid "Change Permissions"
 msgstr "Muuta oikeuksia"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check All/None"
 msgstr "Valitse kaikki/ei mitään"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check _All/None"
 msgstr "Valitse _kaikki/ei mitään"
 
@@ -265,8 +265,12 @@ msgid "Choose which address books to use."
 msgstr "Valitse mitä osoitekirjoja käytetään."
 
 #: templates/prefs/columnselect.inc:41
-msgid "Click an address book to sort its columns:"
-msgstr "Valitse osoitekirja, jonka sarakkeita haluat järjestää:"
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+"Napsauta osoitekirjaa järjestääksesi sen sarakkeita. Raahaamalla sarakkeita "
+"voit muuttaa niiden järjestystä. Merkitse sarake ottaaksesi sen käyttöön."
 
 #: templates/block/minisearch.inc:26
 msgid "Close"
@@ -288,58 +292,59 @@ msgstr "Pilkuilla erotetut arvot"
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "Pilkuilla erotetut arvot (Microsoft Outlook)"
 
-#: config/attributes.php.dist:476
+#: config/attributes.php.dist:522
 msgid "Common Address Extended"
 msgstr "Laajennettu osoite (julkinen)"
 
-#: config/attributes.php.dist:494
+#: config/attributes.php.dist:540
 msgid "Common City"
 msgstr "Kaupunki (julkinen)"
 
-#: config/attributes.php.dist:512
+#: config/attributes.php.dist:558
 msgid "Common Country"
 msgstr "Maa (julkinen)"
 
-#: config/attributes.php.dist:420
+#: config/attributes.php.dist:466
 msgid "Common Phone"
 msgstr "Puhelin (julkinen)"
 
-#: config/attributes.php.dist:488
+#: config/attributes.php.dist:534
 msgid "Common Post Office Box"
 msgstr "Postilokero (julkinen)"
 
-#: config/attributes.php.dist:506
+#: config/attributes.php.dist:552
 msgid "Common Postal Code"
 msgstr "Postinumero (julkinen)"
 
-#: config/attributes.php.dist:500
+#: config/attributes.php.dist:546
 msgid "Common State/Province"
 msgstr "lääni tai alue (julkinen)"
 
-#: config/attributes.php.dist:482
+#: config/attributes.php.dist:528
 msgid "Common Street"
 msgstr "Katuosoite (julkinen)"
 
-#: config/attributes.php.dist:445
+#: config/attributes.php.dist:491
 msgid "Common Video Call"
 msgstr "Videopuhelu (julkinen)"
 
-#: config/sources.php.dist:243 config/sources.php.dist:922
+#: config/sources.php.dist:256 config/sources.php.dist:948
 msgid "Communications"
 msgstr "Kommunikaatiot"
 
-#: config/attributes.php.dist:294
+#: config/attributes.php.dist:306
 msgid "Company"
 msgstr "Yritys"
 
-#: config/attributes.php.dist:223
+#: config/attributes.php.dist:235
 msgid "Company Address"
 msgstr "Yrityksen osoite"
 
-#: scripts/import_squirrelmail_abook.php:112 lib/api.php:523 lib/api.php:577
-#: lib/api.php:627 lib/api.php:670 lib/api.php:725 lib/api.php:784
-#: lib/api.php:834 lib/api.php:970 lib/api.php:1062 lib/api.php:1128
-#: lib/api.php:1234 lib/api.php:1467 lib/api.php:1544 lib/api.php:1693
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
 #, php-format
 msgid "Connection failed: %s"
 msgstr "Yhteys epäonnistui: %s"
@@ -352,7 +357,7 @@ msgstr "Yhteys ep
 msgid "Contact Search"
 msgstr "Yhteystietojen haku"
 
-#: config/sources.php.dist:851
+#: config/sources.php.dist:866
 msgid "Contacts"
 msgstr "Yhteystiedot"
 
@@ -360,7 +365,7 @@ msgstr "Yhteystiedot"
 msgid "Contacts displayed:"
 msgstr "Näytettävät yhteystiedot:"
 
-#: lib/Views/Browse.php:339
+#: lib/Views/Browse.php:346
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "Yhteystiedot listassa: %s"
@@ -381,7 +386,7 @@ msgstr "Luo osoitekirja"
 msgid "Create a new Address Book"
 msgstr "Luo uusi osoitekirja"
 
-#: lib/ListView.php:447
+#: lib/ListView.php:448
 msgid "Create a new Contact List in:"
 msgstr "Luo uusi yhteystietolista osoitekirjaan:"
 
@@ -389,7 +394,7 @@ msgstr "Luo uusi yhteystietolista osoitekirjaan:"
 msgid "Created"
 msgstr "Luotu"
 
-#: contact.php:89
+#: contact.php:95
 msgid "De_lete"
 msgstr "Po_ista"
 
@@ -404,12 +409,16 @@ msgstr "Poista"
 msgid "Delete %s"
 msgstr "Poista %s"
 
+#: lib/api.php:644
+msgid "Delete denied."
+msgstr "Poistaminen estetty."
+
 #: lib/Driver/ldap.php:321
 #, php-format
 msgid "Delete failed: (%s) %s"
 msgstr "Poistaminen epäonnistui: (%s) %s"
 
-#: lib/Driver.php:1903
+#: lib/Driver.php:2121 lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
 msgstr "Yhteystietojen poisto ei ole käytettävissä."
 
@@ -417,7 +426,7 @@ msgstr "Yhteystietojen poisto ei ole k
 msgid "Deletion failed"
 msgstr "Poistaminen epäonnistui"
 
-#: config/attributes.php.dist:300
+#: config/attributes.php.dist:312
 msgid "Department"
 msgstr "Osasto"
 
@@ -438,27 +447,23 @@ msgstr "N
 msgid "Display Options"
 msgstr "Näkymän asetukset"
 
-#: lib/Object.php:348
+#: lib/Object.php:354
 msgid "Download"
 msgstr "Tallenna"
 
-#: templates/browse/row.inc:15 templates/browse/row.inc:16
+#: templates/browse/contactrow.inc:25 templates/browse/row.inc:27
+#: templates/browse/row.inc:28
 msgid "Download vCard"
 msgstr "Tallenna VCard"
 
-#: templates/prefs/columnselect.inc:41
-msgid "Drag columns to re-arrange them. Check a column to enable it."
-msgstr ""
-"Raahaa sarake muuttaaksesi järjestystä. Merkitse sarake ottaaksesi sen "
-"käyttöön."
-
 #: templates/addressbook_list.php:31 templates/browse/actions.inc:6
-#: templates/browse/column_headers.inc:10 templates/browse/row.inc:28
-#: templates/browse/row.inc:29 addressbooks/index.php:40
+#: templates/browse/column_headers.inc:11 templates/browse/contactrow.inc:33
+#: templates/browse/row.inc:40 templates/browse/row.inc:41
+#: addressbooks/index.php:40
 msgid "Edit"
 msgstr "Muokkaa"
 
-#: edit.php:91
+#: edit.php:91 templates/browse/contactrow.inc:33
 #, php-format
 msgid "Edit \"%s\""
 msgstr "Muokkaa \"%s\""
@@ -468,20 +473,20 @@ msgstr "Muokkaa \"%s\""
 msgid "Edit %s"
 msgstr "Muokkaa %s"
 
-#: config/attributes.php.dist:237
+#: config/attributes.php.dist:249
 msgid "Email"
 msgstr "Sähköposti"
 
-#: config/attributes.php.dist:243
+#: config/attributes.php.dist:255
 msgid "Emails"
 msgstr "Sähköpostit"
 
-#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
 #, php-format
 msgid "Error adding %d contact(s) to list."
 msgstr "Tapahtui virhe lisättäessä %d yhteystietoa listalle."
 
-#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
 msgstr "Tapahtui virhe lisättäessä %d / %d yhteystietoa listalle."
@@ -506,7 +511,7 @@ msgstr "Tapahtui virhe poistettaessa %d osoitetietoa listalta."
 msgid "Error removing %d of %d requested contact(s) from list."
 msgstr "Tapahtui virhe poistettaessa %d / %d osoitetietoa listalta."
 
-#: lib/api.php:676
+#: lib/api.php:707
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr "Tapahtui virhe haettaessa osoitekirjasta: %s"
@@ -527,7 +532,7 @@ msgstr "Vie vain valitut yhteystiedot."
 msgid "Export the following address book completely."
 msgstr "Vie seuraavat osoitekirjat kokonaan."
 
-#: add.php:42 data.php:142 data.php:241 data.php:319 search.php:121
+#: add.php:42 data.php:247 data.php:346 data.php:424 search.php:106
 #: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
@@ -538,11 +543,11 @@ msgstr "Osoitekirjaan ei saatu yhteytt
 msgid "Failed to add %s to %s: %s"
 msgstr "%s:n lisäys epäonnistui %s:ään: %s"
 
-#: lib/Views/Browse.php:345
+#: lib/Views/Browse.php:352
 msgid "Failed to browse list"
 msgstr "Listan selaus epäonnistui."
 
-#: lib/Views/Browse.php:376
+#: lib/Views/Browse.php:383
 msgid "Failed to browse the directory"
 msgstr "Hakemiston selaus epäonnistui"
 
@@ -558,20 +563,20 @@ msgstr ""
 msgid "Failed to find object to be added: %s"
 msgstr "Lisättävän objektin haku epäonnistui: %s"
 
-#: search.php:190
+#: search.php:175
 msgid "Failed to search the address book"
 msgstr "Haku osoitekirjasta epäonnistui"
 
-#: data.php:157
+#: data.php:262
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "Haku epäonnistui hakemistosta: %s"
 
-#: config/sources.php.dist:550
+#: config/sources.php.dist:565
 msgid "Favourite Recipients"
 msgstr "Suositut vastaanottajat"
 
-#: config/attributes.php.dist:264
+#: config/attributes.php.dist:276
 msgid "Fax"
 msgstr "Faksi"
 
@@ -583,7 +588,7 @@ msgstr "Tiedostot"
 msgid "Find"
 msgstr "Haku"
 
-#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
 msgid "Finish"
 msgstr "Päätä"
 
@@ -591,7 +596,7 @@ msgstr "P
 msgid "First Name"
 msgstr "Etunimi"
 
-#: config/attributes.php.dist:326
+#: config/attributes.php.dist:350
 msgid "Freebusy URL"
 msgstr "Freebusy URL"
 
@@ -599,83 +604,83 @@ msgstr "Freebusy URL"
 msgid "From"
 msgstr "Lähde"
 
-#: config/attributes.php.dist:384
+#: config/attributes.php.dist:430
 msgid "Gender"
 msgstr "Sukupuoli"
 
-#: config/sources.php.dist:776
+#: config/sources.php.dist:791
 msgid "Global Address Book"
 msgstr "Yleinen osoitekirja"
 
-#: templates/browse/row.inc:49
+#: templates/browse/contactrow.inc:44 templates/browse/row.inc:61
 msgid "Group"
 msgstr "Ryhmä"
 
-#: config/attributes.php.dist:123
+#: config/attributes.php.dist:135
 msgid "Home Address"
-msgstr "Kotiosoite"
+msgstr "Osoite (koti)"
 
-#: config/attributes.php.dist:546
+#: config/attributes.php.dist:592
 msgid "Home Address Extended"
 msgstr "Laajennettu kotiosoite"
 
-#: config/attributes.php.dist:141
+#: config/attributes.php.dist:153
 msgid "Home City"
-msgstr "Kotikaupunki"
+msgstr "Kaupunki (koti)"
 
-#: config/attributes.php.dist:159
+#: config/attributes.php.dist:171
 msgid "Home Country"
-msgstr "Kotimaa"
+msgstr "Maa (koti)"
 
-#: config/attributes.php.dist:414
+#: config/attributes.php.dist:460
 msgid "Home Email"
 msgstr "Sähköposti (koti)"
 
-#: config/attributes.php.dist:430
+#: config/attributes.php.dist:476
 msgid "Home Fax"
 msgstr "Faksi (koti)"
 
-#: config/attributes.php.dist:552
+#: config/attributes.php.dist:598
 msgid "Home Latitude"
 msgstr "Korkeuspiiri (koti)"
 
-#: config/attributes.php.dist:557
+#: config/attributes.php.dist:603
 msgid "Home Longitude"
 msgstr "Pituuspiiri (koti)"
 
-#: config/attributes.php.dist:440
+#: config/attributes.php.dist:486
 msgid "Home Mobile Phone"
 msgstr "Matkapuhelin (koti)"
 
-#: config/attributes.php.dist:249
+#: config/attributes.php.dist:261
 msgid "Home Phone"
 msgstr "Puhelin (koti)"
 
-#: config/attributes.php.dist:135
+#: config/attributes.php.dist:147
 msgid "Home Post Office Box"
 msgstr "Postilokero (koti)"
 
-#: config/attributes.php.dist:153
+#: config/attributes.php.dist:165
 msgid "Home Postal Code"
 msgstr "Postinumero (koti)"
 
-#: config/attributes.php.dist:147
+#: config/attributes.php.dist:159
 msgid "Home State/Province"
-msgstr "Kotilääni tai alue"
+msgstr "Lääni tai alue (koti)"
 
-#: config/attributes.php.dist:129
+#: config/attributes.php.dist:141
 msgid "Home Street Address"
-msgstr "Katuosoite (Koti)"
+msgstr "Katuosoite (koti)"
 
-#: config/attributes.php.dist:455
+#: config/attributes.php.dist:501
 msgid "Home Video Call"
 msgstr "Videopuhelu (koti)"
 
-#: config/attributes.php.dist:540
+#: config/attributes.php.dist:586
 msgid "Home Website URL"
 msgstr "www-sivuston URL (koti)"
 
-#: config/sources.php.dist:667
+#: config/sources.php.dist:682
 msgid "IMSP"
 msgstr "IMSP"
 
@@ -684,38 +689,38 @@ msgstr "IMSP"
 msgid "Import Address Book, Step %d"
 msgstr "Osoitekirjan tuonti, askel %d"
 
-#: data.php:387
+#: data.php:501
 msgid "Import/Export Address Books"
 msgstr "Tuo/Vie osoitekirjoja"
 
-#: config/attributes.php.dist:360
+#: config/attributes.php.dist:406
 msgid "Initials"
 msgstr "Nimikirjaimet"
 
-#: config/attributes.php.dist:366
+#: config/attributes.php.dist:412
 msgid "Instant Messenger"
 msgstr "Pikaviestin"
 
-#: lib/api.php:965 lib/api.php:1057
+#: lib/api.php:999 lib/api.php:1132
 msgid "Invalid ID"
 msgstr "Virheellinen ID"
 
-#: scripts/import_squirrelmail_abook.php:105 lib/api.php:345 lib/api.php:665
-#: lib/api.php:720 lib/api.php:779 lib/api.php:827 lib/api.php:961
-#: lib/api.php:1053 lib/api.php:1118 lib/api.php:1676
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
 #, php-format
 msgid "Invalid address book: %s"
 msgstr "Epäkelpo osoitekirja: %s"
 
-#: lib/api.php:1122
+#: lib/api.php:1198
 msgid "Invalid contact unique ID"
 msgstr "Epäkelpo yhteistietojen yksikäsitteinen ID"
 
-#: lib/api.php:1680 lib/api.php:1766 lib/api.php:1827
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
 msgid "Invalid email"
 msgstr "Virheellinen sähköpostiosoite"
 
-#: lib/api.php:1688
+#: lib/api.php:1786
 msgid "Invalid entry"
 msgstr "Virheellinen merkintä"
 
@@ -723,15 +728,15 @@ msgstr "Virheellinen merkint
 msgid "Invalid key specified."
 msgstr "Määritelty avain on virheellinen"
 
-#: lib/api.php:1684
+#: lib/api.php:1782
 msgid "Invalid name"
 msgstr "Virheellinen nimi"
 
-#: config/attributes.php.dist:276
+#: config/attributes.php.dist:288
 msgid "Job Title"
 msgstr "Titteli"
 
-#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
 #, php-format
 msgid "Key for saving must be a UID not %s!"
 msgstr "Tallennusavain pitää olla UID ei %s!"
@@ -742,11 +747,11 @@ msgid ""
 msgstr ""
 "LDAP-tuki on pakollinen, mutta LDAP-moduuli ei ole käytettävissä tai ladattu."
 
-#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
 msgid "LDIF Address Book"
 msgstr "LDIF-Osoitekirja"
 
-#: config/attributes.php.dist:390
+#: config/attributes.php.dist:436
 msgid "Language"
 msgstr "Kieli"
 
@@ -758,23 +763,31 @@ msgstr "Muokattu viimeksi"
 msgid "Last Name"
 msgstr "Sukunimi"
 
-#: config/attributes.php.dist:396
+#: config/attributes.php.dist:442
 msgid "Latitude"
 msgstr "Korkeuspiiri"
 
-#: templates/browse/column_headers.inc:16
+#: templates/browse/column_headers.inc:17
 msgid "List"
 msgstr "Lista"
 
-#: config/sources.php.dist:238 config/sources.php.dist:918
+#: config/sources.php.dist:251 config/sources.php.dist:944
 msgid "Location"
 msgstr "Paikka"
 
-#: config/attributes.php.dist:401
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "Logo"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr "Logon MIME-tyyppi"
+
+#: config/attributes.php.dist:447
 msgid "Longitude"
 msgstr "Pituuspiiri"
 
-#: lib/api.php:593
+#: lib/api.php:616
 msgid "Malformed request."
 msgstr "Epäkelpo pyyntö"
 
@@ -782,15 +795,19 @@ msgstr "Ep
 msgid "Manage Address Books"
 msgstr "Hallinnoin osoitekirjoja"
 
-#: config/attributes.php.dist:372
+#: config/attributes.php.dist:418
 msgid "Manager"
 msgstr "Johtaja"
 
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Merkitse tämä tieto omaksi yhteystiedoksi"
+
 #: templates/browse/search.inc:109
 msgid "Matching"
 msgstr "On"
 
-#: lib/api.php:306
+#: lib/api.php:329
 msgid "Maximum Number of Contacts"
 msgstr "Yhteystietojen enimmäismäärä"
 
@@ -810,7 +827,7 @@ msgstr "Muut etunimet"
 msgid "Missing DN in LDAP source configuration."
 msgstr "DN puuttuu LDAP lähdemäärittelyistä."
 
-#: config/attributes.php.dist:259
+#: config/attributes.php.dist:271
 msgid "Mobile Phone"
 msgstr "Matkapuhelin"
 
@@ -823,7 +840,7 @@ msgstr "Muokkaus ep
 msgid "More Options..."
 msgstr "Muut asetukset..."
 
-#: lib/api.php:1804
+#: lib/api.php:1902
 msgid "More than 1 entry found"
 msgstr "Löytyi useampi kuin 1 merkintää"
 
@@ -839,11 +856,11 @@ msgstr "Siirr
 msgid "Move right"
 msgstr "Siirrä oikealle"
 
-#: data.php:63 templates/data/import.inc:16
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr "Mulberry-osoitekirja"
 
-#: lib/api.php:1712
+#: lib/api.php:1810
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
@@ -851,7 +868,7 @@ msgstr ""
 "Osoitekirjassa oli monta henkilöä osoitteella [%s], mutta ei ketään nimellä "
 "[%s]."
 
-#: config/sources.php.dist:162
+#: config/sources.php.dist:167
 msgid "My Address Book"
 msgstr "Oma osoitekirja"
 
@@ -876,12 +893,12 @@ msgstr "Nimen p
 msgid "Name:"
 msgstr "Nimi:"
 
-#: add.php:70 lib/Block/tree_menu.php:27
+#: add.php:70 lib/Block/tree_menu.php:28
 msgid "New Contact"
 msgstr "Uusi yhteystieto"
 
-#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
-#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
 msgid "Next"
 msgstr "Seuraava"
 
@@ -889,22 +906,22 @@ msgstr "Seuraava"
 msgid "Nickname"
 msgstr "Lempinimi"
 
-#: lib/api.php:1807 lib/api.php:1867
+#: lib/api.php:1905 lib/api.php:1965
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "Merkintää %s ei löytynyt %s:lle"
 
-#: data.php:52
+#: data.php:93
 msgid ""
 "No Address Books are currently available. Import and Export is disabled."
 msgstr "Ainuttakaan osoitekirjaa ei ole saatavilla. Tuonti/Vienti on estetty."
 
-#: search.php:107
+#: search.php:92
 msgid "No Address Books are currently available. Searching is disabled."
 msgstr "Ainuttakaan osoitekirjaa ei ole saatavilla. Haku on estetty."
 
-#: lib/api.php:659 lib/api.php:714 lib/api.php:774 lib/api.php:956
-#: lib/api.php:1048 lib/api.php:1113
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
 msgid "No address book specified"
 msgstr "Ei määriteltyä osoitekirjaa"
 
@@ -912,7 +929,7 @@ msgstr "Ei m
 msgid "No contacts found"
 msgstr "Ei löytynyt yhteystietoja"
 
-#: templates/browse/column_headers.inc:43
+#: templates/browse/column_headers.inc:44
 msgid "No contacts match the current filter."
 msgstr "Ei nykyiseen filtteriin täsmääviä yhteystietoja"
 
@@ -924,7 +941,7 @@ msgstr "Ei t
 msgid "No source for favourite recipients exists."
 msgstr "Lähdettä suosituille vastaanottajille ei ole olemassa."
 
-#: lib/api.php:860 lib/api.php:1158
+#: lib/api.php:893 lib/api.php:1235
 msgid "No vCard data was found."
 msgstr "vCard tietoja ei löytynyt."
 
@@ -941,7 +958,7 @@ msgstr "Ei l
 msgid "Not found"
 msgstr "Ei löytynyt"
 
-#: config/attributes.php.dist:314
+#: config/attributes.php.dist:338
 msgid "Notes"
 msgstr "Muistiinpanot"
 
@@ -949,20 +966,20 @@ msgstr "Muistiinpanot"
 msgid "Number of items per page"
 msgstr "Tietoja lukumäärä sivulla"
 
-#: lib/api.php:1007 lib/api.php:1183
+#: lib/api.php:1041 lib/api.php:1260
 msgid "Object not found"
 msgstr "Objektia ei löytynyt"
 
-#: lib/Driver/kolab.php:1184
+#: lib/Driver/kolab.php:1199
 #, php-format
 msgid "Object with UID %s does not exist!"
 msgstr "Objektia UID:lla %s ei ole olemassa!"
 
-#: config/attributes.php.dist:282
+#: config/attributes.php.dist:294
 msgid "Occupation"
 msgstr "Ammatti"
 
-#: config/attributes.php.dist:306
+#: config/attributes.php.dist:318
 msgid "Office"
 msgstr "Toimisto"
 
@@ -976,27 +993,27 @@ msgstr ""
 "et halua poistaa osoitekirjaasi, niin sinun pitää muuttaa valinnaksi \"Ei "
 "mitään\"."
 
-#: lib/api.php:1166
+#: lib/api.php:1243
 msgid "Only one vcard supported."
 msgstr "Tuettuna vain yksi vcard."
 
-#: config/sources.php.dist:245 config/sources.php.dist:924
+#: config/sources.php.dist:258 config/sources.php.dist:950
 msgid "Organization"
 msgstr "Järjestö"
 
-#: config/sources.php.dist:246 config/sources.php.dist:926
+#: config/sources.php.dist:259 config/sources.php.dist:952
 msgid "Other"
 msgstr "Muut"
 
-#: config/attributes.php.dist:332
+#: config/attributes.php.dist:356
 msgid "PGP Public Key"
 msgstr "Julkinen PGP-avain"
 
-#: config/attributes.php.dist:471
+#: config/attributes.php.dist:517
 msgid "PTT"
 msgstr "PTT"
 
-#: config/attributes.php.dist:269
+#: config/attributes.php.dist:281
 msgid "Pager"
 msgstr "Hakulaite"
 
@@ -1004,16 +1021,24 @@ msgstr "Hakulaite"
 msgid "Permanently delete this contact?"
 msgstr "Haluatko lopullisesti poistaa tämän yhteystiedon?"
 
-#: deletefile.php:36 lib/Driver.php:740 lib/api.php:838 lib/api.php:1697
-#: lib/Driver/sql.php:486
+#: deletefile.php:36 lib/Driver.php:804 lib/api.php:870 lib/api.php:1795
+#: lib/Driver/sql.php:515
 msgid "Permission denied"
 msgstr "Käyttö kielletty"
 
-#: config/sources.php.dist:235 config/sources.php.dist:914
+#: config/sources.php.dist:248 config/sources.php.dist:940
 msgid "Personal"
 msgstr "Yksityinen"
 
-#: data.php:64 templates/data/import.inc:17
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "Valokuva"
+
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr "Valokuvan MIME-tyyppi"
+
+#: data.php:105 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr "Pine-osoitekirja"
 
@@ -1021,8 +1046,8 @@ msgstr "Pine-osoitekirja"
 msgid "Please name the new contact list:"
 msgstr "Anna nimi uudelle yhteystietolistalle:"
 
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:167
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
 msgid "Previous"
 msgstr "Edellinen"
 
@@ -1036,7 +1061,7 @@ msgstr "Kysely ep
 msgid "Read failed: (%s) %s"
 msgstr "Luku epäonnistui: (%s) %s"
 
-#: lib/Driver.php:1887
+#: lib/Driver.php:2105 lib/Driver/null.php:52
 msgid "Reading contacts is not available."
 msgstr "Yhteystietojen luku ei ole käytettävissä."
 
@@ -1057,7 +1082,7 @@ msgstr "Poista osoitekirja"
 msgid "Remove from this list"
 msgstr "Poista tältä listalta"
 
-#: lib/Driver.php:1925
+#: lib/Driver.php:2143
 msgid ""
 "Removing user data is not supported in the current address book storage "
 "driver."
@@ -1072,7 +1097,7 @@ msgstr ""
 "Korvaa olemassaoleva osoitekirja tuodulla osoitekirjalla. <strong>Varoitus: "
 "Tämä poistaa kaikki merkinnät nykyisestä osoitekirjastasi.</strong>"
 
-#: lib/Driver.php:634
+#: lib/Driver.php:698
 msgid "Requested object not found."
 msgstr "Pyydettyä objektia ei löytynyt."
 
@@ -1080,11 +1105,11 @@ msgstr "Pyydetty
 msgid "Reset to Defaults"
 msgstr "Palauta oletukset"
 
-#: config/attributes.php.dist:338
+#: config/attributes.php.dist:362
 msgid "S/MIME Public Certificate"
 msgstr "Julkinen S/MIME-varmenne"
 
-#: config/attributes.php.dist:465
+#: config/attributes.php.dist:511
 msgid "SIP"
 msgstr "SIP"
 
@@ -1101,21 +1126,21 @@ msgstr "Talleta"
 msgid "Save search as a virtual address book?"
 msgstr "Talleta haku virtuaaliseen osoitekirjaan?"
 
-#: lib/Driver.php:1913
+#: lib/Driver.php:2131 lib/Driver/null.php:67
 msgid "Saving contacts is not available."
 msgstr "Yhteystietojen talletus ei ole käytettävissä."
 
 #: templates/browse/header.inc:3 templates/browse/search.inc:111
 #: templates/browse/search.inc:119 templates/block/minisearch.inc:25
-#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
 msgid "Search"
 msgstr "Haku"
 
-#: lib/api.php:1472
+#: lib/api.php:1568
 msgid "Search failed"
 msgstr "Haku epäonnistui"
 
-#: lib/api.php:1702 lib/api.php:1708 lib/api.php:1717 lib/api.php:1730
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
 #, php-format
 msgid "Search failed: %s"
 msgstr "Haku epäonnistui: %s"
@@ -1124,11 +1149,11 @@ msgstr "Haku ep
 msgid "Search for: "
 msgstr "Haetaan kohdetta: "
 
-#: lib/Driver.php:1872
+#: lib/Driver.php:2090 lib/Driver/null.php:47
 msgid "Searching is not available."
 msgstr "Haku ei ole käytettävissä."
 
-#: templates/browse/row.inc:40
+#: templates/browse/row.inc:52
 msgid "Select contact"
 msgstr "Valitse yhteystieto"
 
@@ -1206,17 +1231,17 @@ msgstr "N
 msgid "Sort Direction"
 msgstr "Järjestyksen suunta"
 
-#: templates/browse/column_headers.inc:31
+#: templates/browse/column_headers.inc:32
 #, php-format
 msgid "Sort by %s"
 msgstr "Järjestä %s mukaan"
 
-#: templates/browse/column_headers.inc:26
+#: templates/browse/column_headers.inc:27
 #, php-format
 msgid "Sort by %s only"
 msgstr "Järjestä vain %s mukaan"
 
-#: templates/browse/column_headers.inc:29
+#: templates/browse/column_headers.inc:30
 #, php-format
 msgid "Sort by %s, then by %s"
 msgstr "Järjestä %s mukaan, ja sitten %s mukaan"
@@ -1225,7 +1250,7 @@ msgstr "J
 msgid "Source:"
 msgstr "Lähteet:"
 
-#: lib/api.php:299
+#: lib/api.php:322
 msgid "Sources"
 msgstr "Lähteet"
 
@@ -1233,7 +1258,7 @@ msgstr "L
 msgid "Spouse"
 msgstr "Puoliso"
 
-#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr "Onnistuttiin lisäämään %d yhteytietoa listalle."
@@ -1243,12 +1268,12 @@ msgstr "Onnistuttiin lis
 msgid "Successfully added %s to %s"
 msgstr "Onnistuttiin lisäämään %s %s:ään"
 
-#: lib/Views/Browse.php:291
+#: lib/Views/Browse.php:298
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr "Yhteystietolistan \"%s\" luonti onnistui."
 
-#: search.php:165
+#: search.php:150
 #, php-format
 msgid "Successfully created virtual address book \"%s\""
 msgstr "Virtuaalisen osoitekirjan \"%s\" luonti onnistui."
@@ -1263,7 +1288,7 @@ msgstr "Onnistuttiin poistamaan %d yhteystietoa."
 msgid "Successfully removed %d contact(s) from list."
 msgstr "Onnistuttiin poistamaan %d yhteystietoa listalta."
 
-#: data.php:61
+#: data.php:102
 msgid "TSV"
 msgstr "TSV"
 
@@ -1279,7 +1304,7 @@ msgstr "Kohde osoitekirja"
 msgid "Target Contact List"
 msgstr "Kohde yhteystietolista"
 
-#: data.php:321
+#: data.php:426
 #, php-format
 msgid "The %s file didn't contain any contacts."
 msgstr "Tiedostossa %s ei ollut ainuttakaan yhteystietoa."
@@ -1289,7 +1314,7 @@ msgid "The VFS backend needs to be configured to enable attachment uploads."
 msgstr ""
 "VFS-taustajärjestelmä pitää olla käytettävissä ennenkuin liitteitä voi tuoda."
 
-#: lib/Driver.php:1843
+#: lib/Driver.php:2061
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr "Osoitekirjaa \"%s\" ei ole olemassa."
@@ -1299,11 +1324,15 @@ msgstr "Osoitekirjaa \"%s\" ei ole olemassa."
 msgid "The address book \"%s\" has been created."
 msgstr "Osoitekirjan \"%s\" luonti onnistui."
 
-#: data.php:328
+#: data.php:433
 #, php-format
 msgid "The address book could not be purged: %s"
 msgstr "Osoitekirjaa ei voitu tyhjentää: %s"
 
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Osoitekirjaa, jossa oli omat tietosi, ei ole enää olemassa."
+
 #: addressbooks/delete.php:50
 #, php-format
 msgid "The addressbook \"%s\" has been deleted."
@@ -1328,7 +1357,7 @@ msgstr "Pyyt
 msgid "The file \"%s\" has been deleted."
 msgstr "Poistettiin tiedosto \"%s\"."
 
-#: data.php:301
+#: data.php:406
 msgid "The import can be finished despite the warnings."
 msgstr "Tuonnin voi suorittaa loppuun vaikka tulisi varoituksia."
 
@@ -1351,7 +1380,7 @@ msgstr ""
 "salli sinun lisätä niihin uusia osoitteita. Jos epäilet virhetilannetta, "
 "niin ota yhteys järjestelmän ylläpitäjään."
 
-#: lib/Views/Browse.php:349
+#: lib/Views/Browse.php:356
 #, php-format
 msgid "There is %d contact in this list that is not viewable to you"
 msgid_plural "There are %d contacts in this list that are not viewable to you"
@@ -1360,12 +1389,12 @@ msgstr[0] ""
 msgstr[1] ""
 "Tällä listalla on %d yhteystietoa, joiden näyttäminen ei ole sallittu."
 
-#: search.php:161
+#: search.php:146
 #, php-format
 msgid "There was a problem creating the virtual address book: %s"
 msgstr "Tapahtui virhe luotaessa virtuaalista osoitekirjaa: %s"
 
-#: lib/Forms/AddContact.php:90
+#: lib/Forms/AddContact.php:95
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
@@ -1373,7 +1402,7 @@ msgstr ""
 "Tapahtui virhe uusien yhteystietojen lisäämisessä. Ota yhteyttä järjestelmän "
 "ylläpitäjään."
 
-#: lib/Views/Browse.php:311
+#: lib/Views/Browse.php:318
 msgid "There was an error creating a new list."
 msgstr "Tapahtui virhe tehtäessä uutta listaa."
 
@@ -1388,32 +1417,32 @@ msgstr ""
 msgid "There was an error deleting this contact: %s"
 msgstr "Tapahtui virhe poistettaessa tätä yhteystietoa: %s"
 
-#: lib/Views/Browse.php:355
+#: lib/Views/Browse.php:362
 msgid "There was an error displaying the list"
 msgstr "Tapahtui virhe näytettäessä listaa"
 
-#: data.php:355
+#: data.php:469
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "Tapahtui virhe tuotaessa tietoa: %s"
 
-#: lib/api.php:856 lib/api.php:1153
+#: lib/api.php:889 lib/api.php:1230
 msgid "There was an error importing the iCalendar data."
 msgstr "iCalendar-tietojen tuonnissa tapahtui virhe."
 
-#: lib/api.php:235
+#: lib/api.php:258
 #, php-format
 msgid "There was an error removing an address book for %s"
 msgstr "Tapahtui virhe poistettaessa osoitekirjaa: %s."
 
-#: lib/Forms/EditContact.php:86
+#: lib/Forms/EditContact.php:93
 msgid ""
 "There was an error saving the contact. Contact your system administrator for "
 "further help."
 msgstr ""
 "Tapahtui taletettaessa yhteystietoja. Ota yhteyttä järjestelmän ylläpitäjään."
 
-#: data.php:187
+#: data.php:292
 msgid "There were no addresses to export."
 msgstr "Ei ole yhtään vietävää osoitetta."
 
@@ -1426,11 +1455,15 @@ msgstr "N
 msgid "This addressbook cannot be deleted"
 msgstr "Osoitekirjaa ei voitu poistaa"
 
-#: data.php:286
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Tämä yhteystieto on merkitty omaksi."
+
+#: data.php:391
 msgid "This file format is not supported."
 msgstr "Tämä tiedostomuoto ei ole tuettu."
 
-#: lib/api.php:1721 lib/api.php:1734
+#: lib/api.php:1819 lib/api.php:1832
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr "Tällä henkilöllä on jo %s merkintä osoitekirjassa"
@@ -1440,7 +1473,7 @@ msgid ""
 "This will be the default address book when adding or importing contacts."
 msgstr "Tämä on oletusosoitekirja kun lisätään tai tuodaan yhteystietoja."
 
-#: config/attributes.php.dist:229
+#: config/attributes.php.dist:241
 msgid "Time Zone"
 msgstr "Aikavyöhyke"
 
@@ -1448,7 +1481,7 @@ msgstr "Aikavy
 msgid "Unable to find contact owner."
 msgstr "Yhteystiedon omistajaa ei löytynyt."
 
-#: lib/Driver.php:1765 lib/Turba.php:675
+#: lib/Driver.php:1981 lib/Turba.php:659
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "Määrityksen %s lukeminen epäonnistui."
@@ -1462,15 +1495,20 @@ msgstr "Osoitekirjaa \"%s\" ei voitu tallentaa: %s"
 msgid "Unable to search."
 msgstr "Ei voi hakea."
 
-#: config/attributes.php.dist:353
+#: config/attributes.php.dist:391
 msgid "Unfiled"
 msgstr "Luokittelematon"
 
-#: lib/api.php:894 lib/api.php:1004 lib/api.php:1171
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr "Ei tuettu Content-Type: %s"
 
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Näytä \"%s\""
+
 #: minisearch.php:72 minisearch.php:73
 msgid "View Contact"
 msgstr "Näytä yhteystiedot"
@@ -1479,83 +1517,83 @@ msgstr "N
 msgid "View to display by default:"
 msgstr "Oletuksena käytettävä näkymä:"
 
-#: config/attributes.php.dist:460
+#: config/attributes.php.dist:506
 msgid "VoIP"
 msgstr "VoIP"
 
-#: config/attributes.php.dist:320
+#: config/attributes.php.dist:344
 msgid "Website URL"
 msgstr "Website URL"
 
-#: config/attributes.php.dist:173
+#: config/attributes.php.dist:185
 msgid "Work Address"
-msgstr "Osoite (Työ)"
+msgstr "Osoite (työ)"
 
-#: config/attributes.php.dist:524
+#: config/attributes.php.dist:570
 msgid "Work Address Extended"
-msgstr "Laajennettu osoite (Työ)"
+msgstr "Laajennettu osoite (työ)"
 
-#: config/attributes.php.dist:191
+#: config/attributes.php.dist:203
 msgid "Work City"
-msgstr "Kapunki (Työ)"
+msgstr "Kaupunki (työ)"
 
-#: config/attributes.php.dist:209
+#: config/attributes.php.dist:221
 msgid "Work Country"
-msgstr "Maa (Työ)"
+msgstr "Maa (työ)"
 
-#: config/attributes.php.dist:408
+#: config/attributes.php.dist:454
 msgid "Work Email"
-msgstr "Sähköposti (Työ)"
+msgstr "Sähköposti (työ)"
 
-#: config/attributes.php.dist:425
+#: config/attributes.php.dist:471
 msgid "Work Fax"
-msgstr "Faksi (Työ)"
+msgstr "Faksi (työ)"
 
-#: config/attributes.php.dist:530
+#: config/attributes.php.dist:576
 msgid "Work Latitude"
-msgstr "Korkeuspiiri (Työ)"
+msgstr "Korkeuspiiri (työ)"
 
-#: config/attributes.php.dist:535
+#: config/attributes.php.dist:581
 msgid "Work Longitude"
-msgstr "Pituuspiiri (Työ)"
+msgstr "Pituuspiiri (työ)"
 
-#: config/attributes.php.dist:435
+#: config/attributes.php.dist:481
 msgid "Work Mobile Phone"
-msgstr "Matkapuhelin (Työ)"
+msgstr "Matkapuhelin (työ)"
 
-#: config/attributes.php.dist:254
+#: config/attributes.php.dist:266
 msgid "Work Phone"
-msgstr "Puhelin (Työ)"
+msgstr "Puhelin (työ)"
 
-#: config/attributes.php.dist:185
+#: config/attributes.php.dist:197
 msgid "Work Post Office Box"
-msgstr "Postilokero (Työ)"
+msgstr "Postilokero (työ)"
 
-#: config/attributes.php.dist:203
+#: config/attributes.php.dist:215
 msgid "Work Postal Code"
-msgstr "Postinumero (Työ)"
+msgstr "Postinumero (työ)"
 
-#: config/attributes.php.dist:197
+#: config/attributes.php.dist:209
 msgid "Work State/Province"
-msgstr "Lääni tai alue (Työ)"
+msgstr "Lääni tai alue (työ)"
 
-#: config/attributes.php.dist:179
+#: config/attributes.php.dist:191
 msgid "Work Street Address"
-msgstr "Katuosoite (Työ)"
+msgstr "Katuosoite (työ)"
 
-#: config/attributes.php.dist:450
+#: config/attributes.php.dist:496
 msgid "Work Video Call"
-msgstr "Videopuhelu (Työ)"
+msgstr "Videopuhelu (työ)"
 
-#: config/attributes.php.dist:518
+#: config/attributes.php.dist:564
 msgid "Work Website URL"
-msgstr "Www-sivusto URL (Työ)"
+msgstr "Www-sivusto URL (työ)"
 
 #: addressbooks/edit.php:30
 msgid "You are not allowed to change this addressbook."
 msgstr "Sinulla ei ole oikeutta muuttaa tätä osoitekirjaa."
 
-#: add.php:48 data.php:250 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#: add.php:48 data.php:355 lib/Views/Browse.php:159 lib/Views/Browse.php:281
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
 msgstr "Ei voi luoda kuin enintään %d yhteystietoa \"%s\":een."
@@ -1564,7 +1602,7 @@ msgstr "Ei voi luoda kuin enint
 msgid "You are not allowed to delete this addressbook."
 msgstr "Sinulla ei ole oikeuksia poistaa tätä osoitekirjaa."
 
-#: lib/api.php:198
+#: lib/api.php:204
 msgid "You are not allowed to remove user data."
 msgstr "Sinulla ei ole oikeuksia poistaa käyttäjätietoja."
 
@@ -1580,6 +1618,10 @@ msgstr "Et voi lis
 msgid "You cannot delete contacts from a virtual address book"
 msgstr "Et voi poistaa yhteystietoja virtuaalisesti osoitekirjasta"
 
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr "Et ole vielä merkinnyt yhteystietoa omaksesi."
+
 #: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
 #: lib/Views/EditContact.php:49
 msgid "You do not have permission to view this contact."
@@ -1593,6 +1635,14 @@ msgstr "Sinulla ei ole oikeuksia n
 msgid "You do not have permissions to delete this address book."
 msgstr "Sinulla ei ole oikeuksia poistaa tätä osoitekirjaa."
 
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"Sinulla ei ole oikeuksia selata osoitekirjaa, johon omat tietosi on "
+"talletettu."
+
 #: lib/Driver/ldap.php:741
 msgid ""
 "You must have the Net_LDAP PEAR library installed to use the schema check "
@@ -1601,7 +1651,7 @@ msgstr ""
 "Sinulla pitää olla asennettua Net_LDAP PEAR-kirjasto, jotta voit käyttää "
 "skeematarkistus funktiota."
 
-#: search.php:148
+#: search.php:133
 msgid "You must provide a name for virtual address books."
 msgstr "Sinun pitää antaa nimi virtuaaliselle osoitekirjalle."
 
@@ -1622,11 +1672,24 @@ msgstr "Sinun pit
 msgid "You only have permission to view this contact."
 msgstr "Sinulla on oikeudet vain katsoa tätä yhteystietoa."
 
-#: lib/Views/Browse.php:362
+#: lib/Views/Browse.php:369
 msgid "Your default address book is not browseable."
 msgstr "Oletusosoitekirjasi ei ole selattavissa."
 
-#: lib/Turba.php:617
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "Näytä omat yhteystiedot"
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr "Omia yhteystietoja ei löyty osoitekirjasta."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[ei tietoja]"
+
+#: lib/Turba.php:601
 msgid "_Browse"
 msgstr "_Selaa"
 
@@ -1638,11 +1701,11 @@ msgstr "_Yhteystiedot"
 msgid "_Delete"
 msgstr "_Poista"
 
-#: contact.php:85
+#: contact.php:91
 msgid "_Edit"
 msgstr "_Muokkaa"
 
-#: lib/Turba.php:626
+#: lib/Turba.php:610
 msgid "_Import/Export"
 msgstr "_Tuo/Vie"
 
@@ -1650,15 +1713,15 @@ msgstr "_Tuo/Vie"
 msgid "_Lists"
 msgstr "_Listat"
 
-#: lib/Turba.php:614
+#: lib/Turba.php:598
 msgid "_My Address Books"
 msgstr "O_mat osoitekirjat"
 
-#: lib/Turba.php:620
+#: lib/Turba.php:604
 msgid "_New Contact"
 msgstr "_Uusi yhteystieto"
 
-#: lib/Turba.php:631
+#: lib/Turba.php:615
 msgid "_Print"
 msgstr "_Tulosta"
 
@@ -1666,15 +1729,15 @@ msgstr "_Tulosta"
 msgid "_Remove from this list"
 msgstr "_Poista tältä listalta"
 
-#: lib/Turba.php:622
+#: lib/Turba.php:606
 msgid "_Search"
 msgstr "_Haku"
 
-#: contact.php:82
+#: contact.php:88
 msgid "_View"
 msgstr "_Näytä"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "ascending"
 msgstr "nouseva"
 
@@ -1691,36 +1754,36 @@ msgstr "itse"
 msgid "contact"
 msgstr "contact"
 
-#: data.php:207 data.php:212 templates/data/export.inc:1
+#: data.php:312 data.php:317 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "contacts.csv"
 
-#: data.php:232
+#: data.php:337
 msgid "contacts.ldif"
 msgstr "contacts.ldif"
 
-#: data.php:217
+#: data.php:322
 msgid "contacts.tsv"
 msgstr "contacts.tsv"
 
-#: data.php:227
+#: data.php:332
 msgid "contacts.vcf"
 msgstr "contacts.vcf"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "descending"
 msgstr "laskeva"
 
-#: config/attributes.php.dist:387
+#: config/attributes.php.dist:433
 msgid "female"
 msgstr "nainen"
 
-#: lib/Block/tree_menu.php:37
+#: lib/Block/tree_menu.php:38
 #, php-format
 msgid "in %s"
 msgstr "%s:ssä"
 
-#: config/attributes.php.dist:387
+#: config/attributes.php.dist:433
 msgid "male"
 msgstr "mies"
 
@@ -1740,7 +1803,7 @@ msgstr "yhteystietolistaan"
 msgid "to a different Address Book"
 msgstr "eri osoitekirjaan"
 
-#: data.php:62 templates/data/import.inc:15 templates/data/export.inc:15
-#: templates/browse/column_headers.inc:13
+#: data.php:103 templates/data/import.inc:15 templates/data/export.inc:15
+#: templates/browse/column_headers.inc:14
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 569906b..265d6ea 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -1,4 +1,4 @@
-# translation of fr_FR.po to french
+# translation of fr.po to french
 # French translation of Turba 2.2-cvs
 # Turba french translation.
 # Copyright (C) 2001-2002.
@@ -9,18 +9,18 @@
 # Benoit St-André <ben at benoitst-andre.net>, 2004.
 # Thierry Thomas <thierry at pompo.net>, 2002, 2003, 2005, 2006, 2007.
 # Yannick Sebastia <yannick.sebastia at ecole-navale.fr>, 2008.
+# Yannick Sebastia, Benoit Poulet <yannick.sebastia at ecole-navale.fr, benoit.poulet at businessdecision.com>, 2008.
 msgid ""
 msgstr ""
-"Project-Id-Version: fr_FR\n"
+"Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-03-18 09:02+0100\n"
-"PO-Revision-Date: 2008-03-18 09:00+0100\n"
+"POT-Creation-Date: 2008-09-25 12:32+0200\n"
+"PO-Revision-Date: 2008-11-28 15:51+0100\n"
 "Last-Translator: Yannick Sebastia <yannick.sebastia at ecole-navale.fr>\n"
 "Language-Team: Français <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"
-"<ben at benoitst-andre.net>\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Generator: KBabel 1.11.4\n"
 
@@ -32,18 +32,18 @@ msgstr "Ajouter un carnet d'adresses IMSP"
 msgid " Delete IMSP Address Book"
 msgstr "Supprimer un carnet d'adresses IMSP"
 
-#: data.php:351
+#: data.php:455
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr "« %s » existait déjà et n'a pas été importé."
 
-#: lib/Forms/EditContact.php:76
+#: lib/Forms/EditContact.php:83
 #, php-format
 msgid "\"%s\" updated, but saving the uploaded file failed: %s"
 msgstr ""
 "%s a été mis à jour, mais la sauvegarde du fichier téléchargé a échoué : %s"
 
-#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
 #, php-format
 msgid "\"%s\" updated."
 msgstr "Mise à jour de « %s » effectuée."
@@ -58,41 +58,41 @@ msgstr "
 msgid "\"%s\" was not moved because it is a list."
 msgstr "« %s » n'a pas été déplacé parce que c'est une liste."
 
-#: config/prefs.php.dist:118
+#: config/prefs.php.dist:127
 msgid "\"Firstname Lastname\"  (ie. John Doe)"
 msgstr "« Prénom Nom »  (c. à d.. Michel Tremblay)"
 
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:126
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr "« Nom, Prénom »  (c. à d.. Tremblay, Michel)"
 
-#: lib/Forms/AddContact.php:83
+#: lib/Driver.php:619
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s de %s"
+
+#: lib/Forms/AddContact.php:88
 #, php-format
 msgid "%s added."
 msgstr "%s ajouté."
 
-#: data.php:370
+#: data.php:483
 #, php-format
 msgid "%s file successfully imported."
 msgstr "fichier %s importé avec succès."
 
-#: lib/Driver.php:529
-#, php-format
-msgid "%s of %s"
-msgstr "%s de %s"
-
 #: templates/list/numPager.inc:6
 #, php-format
 msgid "%s to %s of %s"
 msgstr "%s à %s sur %s"
 
-#: lib/Turba.php:531
+#: lib/Turba.php:541
 #, php-format
 msgid "%s's Address Book"
 msgstr "Carnet d'adresses de %s"
 
-#: lib/Block/minisearch.php:42
-msgid "A browser that supports iFrames is required"
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
 msgstr "Un navigateur supportant les cadres (iFrames) est requis"
 
 #: view.php:54
@@ -100,7 +100,7 @@ msgstr "Un navigateur supportant les cadres (iFrames) est requis"
 msgid "Access denied to %s"
 msgstr "Accès à %s refusé"
 
-#: lib/Forms/AddContact.php:25 templates/browse/actions.inc:30
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
 msgid "Add"
 msgstr "Ajouter"
 
@@ -112,10 +112,6 @@ msgstr "Ajouter un contact"
 msgid "Add address book"
 msgstr "Ajouter un carnet d'adresses"
 
-#: templates/prefs/columnselect.inc:237
-msgid "Add column"
-msgstr "Ajouter une colonne"
-
 #: lib/Forms/EditContact.php:34
 msgid "Add file"
 msgstr "Ajouter un fichier"
@@ -124,20 +120,19 @@ msgstr "Ajouter un fichier"
 msgid "Add to"
 msgstr "Ajouter à"
 
-#: lib/Driver.php:1561 lib/Driver/null.php:57
+#: lib/Driver.php:2113 lib/Driver/null.php:57
 msgid "Adding contacts is not available."
 msgstr "L'ajout de contacts n'est pas disponible."
 
-#: templates/addressbook_list.php:15
+#: templates/addressbook_list.php:16
 msgid "Address Book"
 msgstr "Carnet d'adresses"
 
 #: templates/addressbook_list.php:12
-#, fuzzy
 msgid "Address Book List"
 msgstr "Liste des annuaires"
 
-#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
 msgid "Address Book Listing"
 msgstr "Liste des annuaires"
 
@@ -145,7 +140,7 @@ msgstr "Liste des annuaires"
 msgid "Address Books"
 msgstr "Carnets d'adresses"
 
-#: data.php:331
+#: data.php:435
 msgid "Address book successfully purged."
 msgstr "Carnet d'adresses nettoyé avec succès."
 
@@ -154,7 +149,7 @@ msgstr "Carnet d'adresses nettoy
 msgid "Address books that will not be displayed:"
 msgstr "Carnet d'adresses qui ne seront pas affichés :"
 
-#: search.php:160 templates/browse/search.inc:47
+#: search.php:184 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Recherche avancée"
 
@@ -166,7 +161,7 @@ msgstr "Alias"
 msgid "All"
 msgstr "Tout"
 
-#: lib/api.php:729
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr "Existe déjà"
 
@@ -184,15 +179,14 @@ msgid "Are you sure that you want to delete %s?"
 msgstr "Êtes-vous certain de vouloir supprimer %s ?"
 
 #: templates/browse/javascript.inc:66
-#, fuzzy
 msgid "Are you sure that you want to delete the selected contacts?"
-msgstr "Êtes-vous certain de vouloir supprimer les entrées sélectionnées ?"
+msgstr "Êtes-vous certain de vouloir supprimer les contacts sélectionnés ?"
 
-#: config/attributes.php.dist:377
+#: config/attributes.php.dist:424
 msgid "Assistant"
 msgstr "Assistant"
 
-#: search.php:157 templates/browse/search.inc:46
+#: search.php:181 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "Recherche simple"
 
@@ -209,7 +203,7 @@ msgstr "Anniversaire"
 msgid "Birthdays"
 msgstr "Anniversaires"
 
-#: contact.php:103 templates/browse/row.inc:6
+#: contact.php:128 templates/browse/row.inc:10
 msgid "Blank name"
 msgstr "Nom à blanc"
 
@@ -217,15 +211,16 @@ msgstr "Nom 
 msgid "Both"
 msgstr "Les deux"
 
-#: templates/menu.inc:8
+#: templates/menu.inc:8 templates/addressbook_list.php:29
+#: addressbooks/index.php:39
 msgid "Browse"
 msgstr "Parcourir"
 
-#: config/attributes.php.dist:288
+#: config/attributes.php.dist:300
 msgid "Business Category"
 msgstr "Catégorie affaire"
 
-#: data.php:60
+#: data.php:101
 msgid "CSV"
 msgstr "CSV"
 
@@ -237,29 +232,29 @@ msgstr "Impossible d'ajouter un groupe 
 msgid "Cancel"
 msgstr "Annuler"
 
-#: lib/Driver/kolab.php:620
+#: lib/Driver/kolab.php:624
 #, php-format
 msgid "Cannot delete all address book entries for %s"
 msgstr "Ne peut supprimer toutes entrées de l'annuaire pour %s"
 
-#: config/attributes.php.dist:349
+#: config/attributes.php.dist:388
 msgid "Category"
 msgstr "Catégorie"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 #, php-format
 msgid "Change %s sort to %s"
 msgstr "Permuter le tri %s en %s"
 
-#: templates/addressbook_list.php:31 addressbooks/index.php:40
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
 msgid "Change Permissions"
 msgstr "Changer les permissions"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check All/None"
 msgstr "Vérifier Tout/Rien"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check _All/None"
 msgstr "Vérifier _Tout/Rien"
 
@@ -271,10 +266,6 @@ msgstr "Enfants"
 msgid "Choose an address book"
 msgstr "Choisir un carnet d'adresses"
 
-#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
-msgid "Choose an address book:"
-msgstr "Choisir un carnet d'adresses :"
-
 #: templates/prefs/addressbookselect.inc:163
 msgid "Choose which address books to display, and in what order:"
 msgstr "Choisir quels carnets d'adresses afficher, et dans quel ordre :"
@@ -283,11 +274,15 @@ msgstr "Choisir quels carnets d'adresses afficher, et dans quel ordre
 msgid "Choose which address books to use."
 msgstr "Choisir quel carnet d'adresses utiliser."
 
-#: templates/prefs/columnselect.inc:227
-msgid "Choose which columns to display and in what order:"
-msgstr "Choisissez quelles colonnes afficher et dans quel ordre :"
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+"Cliquer sur un annuaire pour trier ses colonnes. Déplacez les colonnes pour "
+"les organiser. Cocher les colonnes pour les activer."
 
-#: templates/block/minisearch.inc:27
+#: templates/block/minisearch.inc:26
 msgid "Close"
 msgstr "Fermer"
 
@@ -299,10 +294,6 @@ msgstr "Fermer la recherche"
 msgid "Column Options"
 msgstr "Options des colonnes"
 
-#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
-msgid "Columns that will not be displayed:"
-msgstr "Colonnes qui ne seront pas affichées :"
-
 #: templates/data/import.inc:13 templates/data/export.inc:12
 msgid "Comma separated values"
 msgstr "Valeurs séparées par des virgules"
@@ -311,22 +302,59 @@ msgstr "Valeurs s
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "Valeurs séparées par des virgules (Microsoft Outlook)"
 
-#: config/sources.php.dist:229 config/sources.php.dist:905
+#: config/attributes.php.dist:522
+msgid "Common Address Extended"
+msgstr "Adresse"
+
+#: config/attributes.php.dist:540
+msgid "Common City"
+msgstr "Ville"
+
+#: config/attributes.php.dist:558
+msgid "Common Country"
+msgstr "Pays"
+
+#: config/attributes.php.dist:466
+msgid "Common Phone"
+msgstr "Téléphone"
+
+#: config/attributes.php.dist:534
+msgid "Common Post Office Box"
+msgstr "Boite postale"
+
+#: config/attributes.php.dist:552
+msgid "Common Postal Code"
+msgstr "Code postal"
+
+#: config/attributes.php.dist:546
+msgid "Common State/Province"
+msgstr "État/Province"
+
+#: config/attributes.php.dist:528
+msgid "Common Street"
+msgstr "Rue commune"
+
+#: config/attributes.php.dist:491
+msgid "Common Video Call"
+msgstr "Cisiophone commun"
+
+#: config/sources.php.dist:256 config/sources.php.dist:948
 msgid "Communications"
 msgstr "Communications"
 
-#: config/attributes.php.dist:294
+#: config/attributes.php.dist:306
 msgid "Company"
 msgstr "Société"
 
-#: config/attributes.php.dist:223
+#: config/attributes.php.dist:235
 msgid "Company Address"
 msgstr "Adresse professionnelle"
 
-#: scripts/import_squirrelmail_abook.php:112 lib/api.php:398 lib/api.php:443
-#: lib/api.php:494 lib/api.php:529 lib/api.php:578 lib/api.php:624
-#: lib/api.php:665 lib/api.php:782 lib/api.php:869 lib/api.php:928
-#: lib/api.php:1020 lib/api.php:1229 lib/api.php:1301 lib/api.php:1386
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
 #, php-format
 msgid "Connection failed: %s"
 msgstr "La connexion a échoué : %s"
@@ -339,7 +367,7 @@ msgstr "
 msgid "Contact Search"
 msgstr "Recherche de contacts"
 
-#: config/sources.php.dist:837
+#: config/sources.php.dist:866
 msgid "Contacts"
 msgstr "Contacts"
 
@@ -347,7 +375,7 @@ msgstr "Contacts"
 msgid "Contacts displayed:"
 msgstr "Contacts affichés :"
 
-#: lib/Views/Browse.php:338
+#: lib/Views/Browse.php:346
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "Contacts dans la liste : %s"
@@ -368,35 +396,39 @@ msgstr "Cr
 msgid "Create a new Address Book"
 msgstr "Créer un carnet d'adresses"
 
-#: lib/ListView.php:443
+#: lib/ListView.php:448
 msgid "Create a new Contact List in:"
 msgstr "Créer une nouvelle liste de contacts dans :"
 
-#: lib/Views/Contact.php:74
+#: lib/Views/Contact.php:80
 msgid "Created"
 msgstr "Créé"
 
-#: contact.php:86
+#: contact.php:95
 msgid "De_lete"
 msgstr "_Supprimer"
 
-#: lib/Forms/DeleteAddressBook.php:45 lib/Views/DeleteContact.php:58
-#: templates/addressbook_list.php:33 templates/browse/actions.inc:3
-#: addressbooks/index.php:41
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: addressbooks/index.php:42 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
 msgid "Delete"
 msgstr "Effacer"
 
-#: lib/Forms/DeleteAddressBook.php:40 lib/Views/DeleteContact.php:28
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
 #, php-format
 msgid "Delete %s"
 msgstr "Supprimer %s"
 
-#: lib/Driver/ldap.php:285
+#: lib/api.php:644
+msgid "Delete denied."
+msgstr "Suppression refusée."
+
+#: lib/Driver/ldap.php:321
 #, php-format
 msgid "Delete failed: (%s) %s"
 msgstr "Échec de la suppression : (%s) %s"
 
-#: lib/Driver.php:1569 lib/Driver/null.php:62
+#: lib/Driver.php:2121 lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
 msgstr "La suppression des contacts n'est pas disponible."
 
@@ -404,11 +436,11 @@ msgstr "La suppression des contacts n'est pas disponible."
 msgid "Deletion failed"
 msgstr "Échec de la suppression"
 
-#: config/attributes.php.dist:300
+#: config/attributes.php.dist:312
 msgid "Department"
 msgstr "Département"
 
-#: lib/Forms/CreateAddressBook.php:37 lib/Forms/EditAddressBook.php:44
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
 msgid "Description"
 msgstr "Description"
 
@@ -425,17 +457,19 @@ msgstr "Affichage"
 msgid "Display Options"
 msgstr "Options d'affichage"
 
-#: lib/Object.php:348
+#: lib/Object.php:354
 msgid "Download"
 msgstr "Télécharger"
 
-#: templates/browse/row.inc:13 templates/browse/contactrow.inc:25
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
+#: templates/browse/contactrow.inc:25
 msgid "Download vCard"
 msgstr "Télécharger vCard"
 
-#: templates/addressbook_list.php:29 templates/browse/row.inc:21
-#: templates/browse/contactrow.inc:33 templates/browse/column_headers.inc:10
-#: templates/browse/actions.inc:6 addressbooks/index.php:39
+#: templates/addressbook_list.php:31 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/column_headers.inc:11
+#: templates/browse/actions.inc:6 templates/browse/contactrow.inc:33
+#: addressbooks/index.php:40
 msgid "Edit"
 msgstr "Éditer"
 
@@ -444,26 +478,25 @@ msgstr "
 msgid "Edit \"%s\""
 msgstr "Éditer « %s »"
 
-#: lib/Forms/EditAddressBook.php:40 lib/Views/EditContact.php:35
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
 #, php-format
 msgid "Edit %s"
 msgstr "Éditer %s"
 
-#: config/attributes.php.dist:237
+#: config/attributes.php.dist:249
 msgid "Email"
 msgstr "Courriel"
 
-#: config/attributes.php.dist:243
-#, fuzzy
+#: config/attributes.php.dist:255
 msgid "Emails"
-msgstr "Courriel"
+msgstr "Courriels"
 
-#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
 #, php-format
 msgid "Error adding %d contact(s) to list."
 msgstr "Erreur lors de l'ajout de %d contact(s) à la liste."
 
-#: lib/Views/Browse.php:264 lib/Views/Browse.php:304
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
 msgstr "Erreur lors de l'ajout à la liste de %d sur %d contact(s) demandé(s)."
@@ -488,12 +521,12 @@ msgstr "Erreur lors du retrait de %d contact(s) de la liste."
 msgid "Error removing %d of %d requested contact(s) from list."
 msgstr "Erreur lors du retrait de la liste de %d contact(s) sur %d."
 
-#: lib/api.php:535
+#: lib/api.php:707
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr "Erreur lors de la recherche dans le carnet d'adresse : %s"
 
-#: templates/data/export.inc:42 templates/browse/actions.inc:10
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
 msgid "Export"
 msgstr "Exporter"
 
@@ -509,26 +542,26 @@ msgstr "N'exporter que les contacts s
 msgid "Export the following address book completely."
 msgstr "Exporter en totalité le carnet d'adresses suivant."
 
-#: search.php:85 add.php:42 data.php:143 data.php:242 data.php:320
+#: data.php:247 data.php:346 data.php:424 add.php:42 search.php:106
 #: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
 msgstr "Impossible d'accéder au carnet d'adresses : %s"
 
-#: lib/Views/Browse.php:210
+#: lib/Views/Browse.php:211
 #, php-format
 msgid "Failed to add %s to %s: %s"
 msgstr "Impossible d'ajouter %s à %s : %s"
 
-#: lib/Views/Browse.php:344
+#: lib/Views/Browse.php:352
 msgid "Failed to browse list"
 msgstr "Impossible d'accéder à cette liste"
 
-#: lib/Views/Browse.php:371
+#: lib/Views/Browse.php:383
 msgid "Failed to browse the directory"
 msgstr "Impossible d'accéder à ce répertoire"
 
-#: lib/Driver/ldap.php:318
+#: lib/Driver/ldap.php:354
 #, php-format
 msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
 msgstr ""
@@ -540,20 +573,20 @@ msgstr ""
 msgid "Failed to find object to be added: %s"
 msgstr "Impossible de trouver l'objet à ajouter : %s"
 
-#: search.php:151
+#: search.php:175
 msgid "Failed to search the address book"
 msgstr "Impossible d'effectuer une recherche dans ce carnet d'adresses : %s"
 
-#: data.php:158
+#: data.php:262
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "Impossible d'effectuer une recherche dans ce répertoire : %s"
 
-#: config/sources.php.dist:536
+#: config/sources.php.dist:565
 msgid "Favourite Recipients"
 msgstr "Destinataires préférés"
 
-#: config/attributes.php.dist:264
+#: config/attributes.php.dist:276
 msgid "Fax"
 msgstr "Télécopie"
 
@@ -565,7 +598,7 @@ msgstr "Fichiers"
 msgid "Find"
 msgstr "Rechercher"
 
-#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
 msgid "Finish"
 msgstr "Terminer"
 
@@ -573,7 +606,7 @@ msgstr "Terminer"
 msgid "First Name"
 msgstr "Prénom"
 
-#: config/attributes.php.dist:326
+#: config/attributes.php.dist:350
 msgid "Freebusy URL"
 msgstr "URL des disponibilités"
 
@@ -581,52 +614,83 @@ msgstr "URL des disponibilit
 msgid "From"
 msgstr "Dans"
 
-#: config/attributes.php.dist:383
+#: config/attributes.php.dist:430
 msgid "Gender"
 msgstr "Genre"
 
-#: config/sources.php.dist:762
+#: config/sources.php.dist:791
 msgid "Global Address Book"
 msgstr "Carnet d'adresses global"
 
-#: templates/browse/row.inc:39 templates/browse/contactrow.inc:44
+#: templates/browse/row.inc:61 templates/browse/contactrow.inc:44
 msgid "Group"
 msgstr "Groupe"
 
-#: config/attributes.php.dist:123
+#: config/attributes.php.dist:135
 msgid "Home Address"
 msgstr "Adresse domicile"
 
-#: config/attributes.php.dist:141
+#: config/attributes.php.dist:592
+msgid "Home Address Extended"
+msgstr "Adresse domicile étendue"
+
+#: config/attributes.php.dist:153
 msgid "Home City"
 msgstr "Ville"
 
-#: config/attributes.php.dist:159
+#: config/attributes.php.dist:171
 msgid "Home Country"
 msgstr "Pays"
 
-#: config/attributes.php.dist:249
+#: config/attributes.php.dist:460
+msgid "Home Email"
+msgstr "Courriel"
+
+#: config/attributes.php.dist:476
+msgid "Home Fax"
+msgstr "Fax"
+
+#: config/attributes.php.dist:598
+msgid "Home Latitude"
+msgstr "Latitude"
+
+#: config/attributes.php.dist:603
+msgid "Home Longitude"
+msgstr "Longitude"
+
+#: config/attributes.php.dist:486
+msgid "Home Mobile Phone"
+msgstr "Téléphone mobile"
+
+#: config/attributes.php.dist:261
 msgid "Home Phone"
 msgstr "Tél. domicile"
 
-#: config/attributes.php.dist:135
-#, fuzzy
+#: config/attributes.php.dist:147
 msgid "Home Post Office Box"
-msgstr "Code postal"
+msgstr "Boite postale"
 
-#: config/attributes.php.dist:153
+#: config/attributes.php.dist:165
 msgid "Home Postal Code"
 msgstr "Code postal"
 
-#: config/attributes.php.dist:147
+#: config/attributes.php.dist:159
 msgid "Home State/Province"
 msgstr "État/Province"
 
-#: config/attributes.php.dist:129
+#: config/attributes.php.dist:141
 msgid "Home Street Address"
 msgstr "Rue"
 
-#: config/sources.php.dist:653
+#: config/attributes.php.dist:501
+msgid "Home Video Call"
+msgstr "Visiophone personnel"
+
+#: config/attributes.php.dist:586
+msgid "Home Website URL"
+msgstr "URL du site web"
+
+#: config/sources.php.dist:682
 msgid "IMSP"
 msgstr "IMSP"
 
@@ -635,55 +699,54 @@ msgstr "IMSP"
 msgid "Import Address Book, Step %d"
 msgstr "Importer un carnet d'adresses, étape %d"
 
-#: data.php:388
+#: data.php:501
 msgid "Import/Export Address Books"
 msgstr "Importer/Exporter carnet d'adresses"
 
-#: config/attributes.php.dist:359
+#: config/attributes.php.dist:406
 msgid "Initials"
 msgstr "Initiales"
 
-#: config/attributes.php.dist:365
+#: config/attributes.php.dist:412
 msgid "Instant Messenger"
 msgstr "Messagerie instantanée"
 
-#: lib/api.php:777 lib/api.php:864
+#: lib/api.php:999 lib/api.php:1132
 msgid "Invalid ID"
 msgstr "Identifiant invalide"
 
-#: scripts/import_squirrelmail_abook.php:105 lib/api.php:310 lib/api.php:524
-#: lib/api.php:573 lib/api.php:619 lib/api.php:660 lib/api.php:773
-#: lib/api.php:860 lib/api.php:918 lib/api.php:1369
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
 #, php-format
 msgid "Invalid address book: %s"
 msgstr "Carnet d'adresses invalide : %s"
 
-#: lib/api.php:1373 lib/api.php:1447 lib/api.php:1503
+#: lib/api.php:1198
+msgid "Invalid contact unique ID"
+msgstr "ID unique de contrat invalide"
+
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
 msgid "Invalid email"
 msgstr "Courriel invalide"
 
-#: lib/api.php:1381
+#: lib/api.php:1786
 msgid "Invalid entry"
 msgstr "Entrée invalide"
 
-#: lib/Driver/ldap.php:281
+#: lib/Driver/ldap.php:317
 msgid "Invalid key specified."
 msgstr "Clef spécifiée invalide."
 
-#: lib/api.php:1377
+#: lib/api.php:1782
 msgid "Invalid name"
 msgstr "Nom invalide"
 
-#: lib/api.php:922
-msgid "Invalid objectId"
-msgstr "ObjectId invalide"
-
-#: config/attributes.php.dist:276
-#, fuzzy
+#: config/attributes.php.dist:288
 msgid "Job Title"
 msgstr "Fonction"
 
-#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
 #, php-format
 msgid "Key for saving must be a UID not %s!"
 msgstr "La clé de sauvegarde doit être un UID pas %s!"
@@ -695,56 +758,71 @@ msgstr ""
 "Le support LDAP est requis mais le module LDAP est inaccessible ou non "
 "chargé."
 
-#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
 msgid "LDIF Address Book"
 msgstr "Carnet d'adresses au format LDIF"
 
-#: config/attributes.php.dist:389
+#: config/attributes.php.dist:436
 msgid "Language"
 msgstr "Langue"
 
-#: lib/Views/Contact.php:80
+#: lib/Views/Contact.php:91
 msgid "Last Modified"
 msgstr "Dernière modification"
 
 #: config/attributes.php.dist:59
 msgid "Last Name"
-msgstr "Nom"
+msgstr "Nom de famille"
 
-#: config/attributes.php.dist:395
+#: config/attributes.php.dist:442
 msgid "Latitude"
 msgstr "Latitude"
 
-#: templates/browse/column_headers.inc:16
+#: templates/browse/column_headers.inc:17
 msgid "List"
 msgstr "Liste"
 
-#: config/sources.php.dist:224 config/sources.php.dist:901
+#: config/sources.php.dist:251 config/sources.php.dist:944
 msgid "Location"
 msgstr "Lieu"
 
-#: config/attributes.php.dist:400
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "Logo"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr "Type MIME du logo"
+
+#: config/attributes.php.dist:447
 msgid "Longitude"
 msgstr "Longitude"
 
-#: templates/addressbook_list.php:2 addressbooks/index.php:45
-#, fuzzy
+#: lib/api.php:616
+msgid "Malformed request."
+msgstr "Requête mal formée."
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
 msgid "Manage Address Books"
-msgstr "Mes annuaires"
+msgstr "Gérer les annuaires"
 
-#: config/attributes.php.dist:371
+#: config/attributes.php.dist:418
 msgid "Manager"
 msgstr "Supérieur"
 
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Marquer comme étant votre propre contact"
+
 #: templates/browse/search.inc:109
 msgid "Matching"
 msgstr "Contenant"
 
-#: lib/api.php:285
+#: lib/api.php:329
 msgid "Maximum Number of Contacts"
 msgstr "Nombre maximal de contacts"
 
-#: config/prefs.php.dist:88
+#: config/prefs.php.dist:97
 msgid "Maximum number of pages"
 msgstr "Nombre maximal de pages"
 
@@ -756,15 +834,15 @@ msgstr "Menu"
 msgid "Middle Names"
 msgstr "Deuxièmes prénoms"
 
-#: lib/Driver/ldap.php:311
+#: lib/Driver/ldap.php:347
 msgid "Missing DN in LDAP source configuration."
 msgstr "DN manquant dans la configuration de la source LDAP."
 
-#: config/attributes.php.dist:259
+#: config/attributes.php.dist:271
 msgid "Mobile Phone"
 msgstr "Tél. mobile"
 
-#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
 #, php-format
 msgid "Modify failed: (%s) %s"
 msgstr "Échec de la modification : (%s) %s"
@@ -773,7 +851,7 @@ msgstr "
 msgid "More Options..."
 msgstr "Plus d'options..."
 
-#: lib/api.php:1489
+#: lib/api.php:1902
 msgid "More than 1 entry found"
 msgstr "Plus d'une entrée trouvée"
 
@@ -781,21 +859,19 @@ msgstr "Plus d'une entr
 msgid "Move"
 msgstr "Déplacer"
 
-#: templates/prefs/columnselect.inc:248
 #: templates/prefs/addressbookselect.inc:184
 msgid "Move left"
 msgstr "Déplacer à gauche"
 
-#: templates/prefs/columnselect.inc:250
 #: templates/prefs/addressbookselect.inc:186
 msgid "Move right"
 msgstr "Déplacer à droite"
 
-#: data.php:63 templates/data/import.inc:16
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr "Annuaire Mulberry"
 
-#: lib/api.php:1405
+#: lib/api.php:1810
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
@@ -803,14 +879,14 @@ msgstr ""
 "Plusieurs personnes avec l'adresse [%s], mais aucune avec le nom [%s] "
 "existent déjà"
 
-#: config/sources.php.dist:161
+#: config/sources.php.dist:167
 msgid "My Address Book"
 msgstr "Mon annuaire"
 
-#: lib/Forms/CreateAddressBook.php:36 lib/Forms/EditAddressBook.php:43
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
 #: config/attributes.php.dist:47
 msgid "Name"
-msgstr "Nom"
+msgstr "Nom complet"
 
 #: config/prefs.php.dist:31
 msgid "Name Format"
@@ -828,12 +904,12 @@ msgstr "Suffixes de nom"
 msgid "Name:"
 msgstr "Nom :"
 
-#: add.php:70 lib/Block/tree_menu.php:27
+#: add.php:70 lib/Block/tree_menu.php:28
 msgid "New Contact"
 msgstr "Nouveau contact"
 
-#: lib/Forms/EditContact.php:112 lib/Forms/EditContact.php:119
-#: lib/Forms/EditContact.php:174 templates/data/import.inc:46
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
 msgid "Next"
 msgstr "Suivant"
 
@@ -841,44 +917,45 @@ msgstr "Suivant"
 msgid "Nickname"
 msgstr "Surnom"
 
-#: lib/api.php:1492 lib/api.php:1543
+#: lib/api.php:1905 lib/api.php:1965
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "Aucune entrée %s trouvée pour %s. "
 
-#: data.php:52
+#: data.php:93
 msgid ""
 "No Address Books are currently available. Import and Export is disabled."
 msgstr ""
-"Aucun carnet d'adresses disponible actuellement. L'importation et "
-"l'exportation sont désactivés."
+"Aucun carnet d'adresses disponible actuellement. L'import et l'export sont "
+"désactivés."
 
-#: search.php:71
+#: search.php:92
 msgid "No Address Books are currently available. Searching is disabled."
 msgstr ""
 "Aucun carnet d'adresses disponible actuellement. La recherche est désactivée."
 
-#: lib/api.php:1456
-msgid "No address books found."
-msgstr "Aucun carnet d'adresses trouvé."
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
+msgid "No address book specified"
+msgstr "Aucun carnet d'adresses spécifié."
 
-#: minisearch.php:81
+#: minisearch.php:80
 msgid "No contacts found"
 msgstr "Aucun contact trouvé"
 
-#: templates/browse/column_headers.inc:43
+#: templates/browse/column_headers.inc:44
 msgid "No contacts match the current filter."
 msgstr "Aucun contact ne correspond au filtre courant."
 
-#: lib/ListView.php:251
+#: lib/ListView.php:255
 msgid "No matching contacts"
 msgstr "Aucun contact ne correspond"
 
-#: lib/Driver/favourites.php:120
+#: lib/Driver/favourites.php:124
 msgid "No source for favourite recipients exists."
 msgstr "Il n'existe pas de source pour les destinataires préférés."
 
-#: lib/api.php:686 lib/api.php:957
+#: lib/api.php:893 lib/api.php:1235
 msgid "No vCard data was found."
 msgstr "Aucune donnée vCard trouvée."
 
@@ -895,23 +972,28 @@ msgstr "Non trouv
 msgid "Not found"
 msgstr "Non trouvé"
 
-#: config/attributes.php.dist:314
+#: config/attributes.php.dist:338
 msgid "Notes"
 msgstr "Notes"
 
-#: config/prefs.php.dist:96
+#: config/prefs.php.dist:105
 msgid "Number of items per page"
 msgstr "Nombre d'items par page"
 
-#: lib/api.php:793 lib/api.php:937
+#: lib/api.php:1041 lib/api.php:1260
 msgid "Object not found"
 msgstr "Sujet non trouvé"
 
-#: config/attributes.php.dist:282
+#: lib/Driver/kolab.php:1199
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "L'objet avec l'UID %s n'existe pas !"
+
+#: config/attributes.php.dist:294
 msgid "Occupation"
 msgstr "Emploi"
 
-#: config/attributes.php.dist:306
+#: config/attributes.php.dist:318
 msgid "Office"
 msgstr "Bureau"
 
@@ -925,23 +1007,27 @@ msgstr ""
 "définitivement. Si ce n'est pas ce que vous voulez, vous devez changer votre "
 "sélection en « Aucun »."
 
-#: lib/api.php:965
+#: lib/api.php:1243
 msgid "Only one vcard supported."
 msgstr "Une seule vCard est supportée."
 
-#: config/sources.php.dist:231 config/sources.php.dist:907
+#: config/sources.php.dist:258 config/sources.php.dist:950
 msgid "Organization"
 msgstr "Organisation"
 
-#: config/sources.php.dist:232 config/sources.php.dist:909
+#: config/sources.php.dist:259 config/sources.php.dist:952
 msgid "Other"
 msgstr "Autre"
 
-#: config/attributes.php.dist:332
+#: config/attributes.php.dist:356
 msgid "PGP Public Key"
 msgstr "Clé publique PGP"
 
-#: config/attributes.php.dist:269
+#: config/attributes.php.dist:517
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:281
 msgid "Pager"
 msgstr "Récepteur d'appel"
 
@@ -949,16 +1035,24 @@ msgstr "R
 msgid "Permanently delete this contact?"
 msgstr "Effacer ce contact définitivement ?"
 
-#: deletefile.php:36 lib/api.php:669 lib/api.php:786 lib/api.php:873
-#: lib/api.php:931 lib/api.php:1390 lib/Driver.php:701 lib/Driver/sql.php:481
+#: deletefile.php:36 lib/Driver.php:804 lib/api.php:870 lib/api.php:1795
+#: lib/Driver/sql.php:515
 msgid "Permission denied"
 msgstr "Permission refusée"
 
-#: config/sources.php.dist:221 config/sources.php.dist:897
+#: config/sources.php.dist:248 config/sources.php.dist:940
 msgid "Personal"
 msgstr "Petite annonce personnelle"
 
-#: data.php:64 templates/data/import.inc:17
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "Photo"
+
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr "Type MIME de la photo"
+
+#: data.php:105 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr "Annuaire Pine"
 
@@ -966,22 +1060,22 @@ msgstr "Annuaire Pine"
 msgid "Please name the new contact list:"
 msgstr "Veuillez nommer la nouvelle liste de contacts :"
 
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:166
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
 msgid "Previous"
 msgstr "Précédent"
 
-#: lib/Driver/ldap.php:162
+#: lib/Driver/ldap.php:197
 #, php-format
 msgid "Query failed: (%s) %s"
 msgstr "Échec de la requête : (%s) %s"
 
-#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
 #, php-format
 msgid "Read failed: (%s) %s"
 msgstr "Échec de lecture : (%s) %s"
 
-#: lib/Driver.php:1553 lib/Driver/null.php:52
+#: lib/Driver.php:2105 lib/Driver/null.php:52
 msgid "Reading contacts is not available."
 msgstr "La lecture des contacts n'est pas disponible."
 
@@ -998,15 +1092,11 @@ msgstr ""
 msgid "Remove address book"
 msgstr "Supprimer un carnet d'adresses"
 
-#: templates/prefs/columnselect.inc:239
-msgid "Remove column"
-msgstr "Retirer la colonne"
-
 #: templates/browse/actions.inc:3
 msgid "Remove from this list"
 msgstr "Retirer de la liste"
 
-#: lib/Driver.php:1591
+#: lib/Driver.php:2143
 msgid ""
 "Removing user data is not supported in the current address book storage "
 "driver."
@@ -1023,18 +1113,22 @@ msgstr ""
 "<strong>Attention : cela supprimera toutes vos entrées du présent carnet "
 "d'adresses.</strong>"
 
-#: lib/Driver.php:595
+#: lib/Driver.php:698
 msgid "Requested object not found."
 msgstr "Sujet non trouvé."
 
 #: templates/browse/search.inc:120
 msgid "Reset to Defaults"
-msgstr "Remettre à la configuration par défaut"
+msgstr "Réinitialiser le formulaire"
 
-#: config/attributes.php.dist:338
+#: config/attributes.php.dist:362
 msgid "S/MIME Public Certificate"
 msgstr "Certificat public S/MIME"
 
+#: config/attributes.php.dist:511
+msgid "SIP"
+msgstr "SIP"
+
 #: lib/Driver/ldap.php:84
 #, php-format
 msgid "STARTTLS failed: (%s) %s"
@@ -1045,49 +1139,56 @@ msgid "Save"
 msgstr "Enregistrer"
 
 #: templates/browse/search_vbook.inc:4
-#, fuzzy
 msgid "Save search as a virtual address book?"
 msgstr "Enregistrer la recherche en tant que carnet d'adresses virtuel ?"
 
-#: lib/Driver.php:1579 lib/Driver/null.php:67
+#: lib/Driver.php:2131 lib/Driver/null.php:67
 msgid "Saving contacts is not available."
 msgstr "L'enregistrement des contacts n'est pas disponible."
 
-#: lib/Block/tree_menu.php:58 templates/block/minisearch.inc:26
-#: templates/browse/header.inc:3 templates/browse/search.inc:111
-#: templates/browse/search.inc:119 config/prefs.php.dist:107
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
 msgid "Search"
 msgstr "Rechercher"
 
-#: lib/api.php:1234
+#: lib/api.php:1568
 msgid "Search failed"
 msgstr "La recherche a échoué"
 
-#: lib/api.php:1395 lib/api.php:1401 lib/api.php:1410 lib/api.php:1423
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
 #, php-format
 msgid "Search failed: %s"
 msgstr "Échec de la recherche : %s"
 
-#: templates/block/minisearch.inc:24
+#: templates/block/minisearch.inc:23
 msgid "Search for: "
 msgstr "Recherche de :"
 
-#: lib/Driver.php:1538 lib/Driver/null.php:47
+#: lib/Driver.php:2090 lib/Driver/null.php:47
 msgid "Searching is not available."
 msgstr "La recherche n'est pas disponible."
 
-#: templates/browse/row.inc:30
+#: templates/browse/row.inc:52
 msgid "Select contact"
 msgstr "Sélectionnez un contact"
 
 #: templates/data/export.inc:33
 msgid "Select the address book to export from:"
-msgstr "Sélectionnez le carnet d'adresses pour l'exportation :"
+msgstr "Sélectionnez le carnet d'adresses à exporter :"
 
 #: templates/data/import.inc:27
 msgid "Select the address book to import to:"
 msgstr "Sélectionnez le carnet d'adresses pour l'importation :"
 
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Sélectionner l'annuaire qui sera utiliser pour la synchronisation avec les "
+"périphériques externes :"
+
 #: templates/data/import.inc:36
 msgid "Select the charset of the source file:"
 msgstr "Sélectionnez le jeu de caractères du fichier source :"
@@ -1104,15 +1205,15 @@ msgstr "S
 msgid "Select the format of the source file:"
 msgstr "Choisissez le format du fichier source :"
 
-#: config/prefs.php.dist:116
+#: config/prefs.php.dist:125
 msgid "Select the format used to display names:"
 msgstr "Sélectionnez le format à utiliser pour afficher les noms :"
 
 #: config/prefs.php.dist:25
-msgid "Select view to display by default, sort options, and paging options."
+msgid "Select view to display by default and paging options."
 msgstr ""
-"Sélectionnez la vue à afficher par défaut, ainsi que les options de tri et "
-"de pagination."
+"Sélectionnez la vue à afficher par défaut, ainsi que les options de "
+"pagination."
 
 #: config/prefs.php.dist:18
 msgid "Select which fields to display in the address lists."
@@ -1144,21 +1245,21 @@ msgstr "Afficher contacts"
 msgid "Show Lists"
 msgstr "Afficher listes"
 
-#: lib/ListView.php:319 lib/ListView.php:325
+#: lib/ListView.php:323 lib/ListView.php:329
 msgid "Sort Direction"
 msgstr "Sens du tri"
 
-#: templates/browse/column_headers.inc:31
+#: templates/browse/column_headers.inc:32
 #, php-format
 msgid "Sort by %s"
 msgstr "Tri selon %s"
 
-#: templates/browse/column_headers.inc:26
+#: templates/browse/column_headers.inc:27
 #, php-format
 msgid "Sort by %s only"
 msgstr "Tri selon %s seulement"
 
-#: templates/browse/column_headers.inc:29
+#: templates/browse/column_headers.inc:30
 #, php-format
 msgid "Sort by %s, then by %s"
 msgstr "Tri par %s, puis par %s"
@@ -1167,7 +1268,7 @@ msgstr "Tri par %s, puis par %s"
 msgid "Source:"
 msgstr "Sources :"
 
-#: lib/api.php:278
+#: lib/api.php:322
 msgid "Sources"
 msgstr "Sources"
 
@@ -1175,22 +1276,22 @@ msgstr "Sources"
 msgid "Spouse"
 msgstr "Époux"
 
-#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr "%d contact(s) ajouté(s) à la liste."
 
-#: lib/Views/Browse.php:214
+#: lib/Views/Browse.php:215
 #, php-format
 msgid "Successfully added %s to %s"
 msgstr "« %s » a bien été ajouté(e) à %s."
 
-#: lib/Views/Browse.php:290
+#: lib/Views/Browse.php:298
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr "La liste « %s » a bien été créée."
 
-#: search.php:126
+#: search.php:150
 #, php-format
 msgid "Successfully created virtual address book \"%s\""
 msgstr "Création du carnet d'adresses virtuel « %s » effectuée"
@@ -1205,7 +1306,7 @@ msgstr "Suppression de %d contact(s) effectu
 msgid "Successfully removed %d contact(s) from list."
 msgstr "%d contact(s) retiré(s) de la liste."
 
-#: data.php:61
+#: data.php:102
 msgid "TSV"
 msgstr "TSV"
 
@@ -1221,7 +1322,7 @@ msgstr "Carnet d'adresses cible"
 msgid "Target Contact List"
 msgstr "Liste de contacts cible"
 
-#: data.php:322
+#: data.php:426
 #, php-format
 msgid "The %s file didn't contain any contacts."
 msgstr "Le fichier %s ne contenait aucuns contacts."
@@ -1232,21 +1333,25 @@ msgstr ""
 "Le module VFS doit être configuré pour permettre le téléchargement des "
 "pièces jointes."
 
-#: lib/Driver.php:1509
+#: lib/Driver.php:2061
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr "Le carnet d'adresses « %s » n'existe pas."
 
 #: addressbooks/create.php:32
-#, fuzzy, php-format
+#, php-format
 msgid "The address book \"%s\" has been created."
 msgstr "Le carnet d'adresses « %s » a été créé."
 
-#: data.php:329
+#: data.php:433
 #, php-format
 msgid "The address book could not be purged: %s"
 msgstr "Le carnet d'adresses n'a pas pu être purgé : %s"
 
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Le carnet d'adresses avec votre contact n'existe plus."
+
 #: addressbooks/delete.php:50
 #, php-format
 msgid "The addressbook \"%s\" has been deleted."
@@ -1271,7 +1376,7 @@ msgstr "Le contact demand
 msgid "The file \"%s\" has been deleted."
 msgstr "Le fichier « %s » a été supprimé."
 
-#: data.php:302
+#: data.php:406
 msgid "The import can be finished despite the warnings."
 msgstr "L'importation s'est terminée malgré les avertissements."
 
@@ -1294,13 +1399,20 @@ msgstr ""
 "d'ajouter un nouveau contact. Si vous pensez que ceci est une erreur, "
 "contactez votre administrateur système."
 
-#: search.php:122
+#: lib/Views/Browse.php:356
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "Il y a %d contact dans cette liste que nous ne pouvez pas voir"
+msgstr[1] "Il y a %d contacts dans cette liste que nous ne pouvez pas voir"
+
+#: search.php:146
 #, php-format
 msgid "There was a problem creating the virtual address book: %s"
 msgstr ""
 "Une erreur est survenue lors de la création du carnet d'adresses virtuel : %s"
 
-#: lib/Forms/AddContact.php:90
+#: lib/Forms/AddContact.php:95
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
@@ -1308,11 +1420,11 @@ msgstr ""
 "Une erreur est survenue lors de l'ajout de ce contact. Contactez votre "
 "administrateur système pour plus d'informations."
 
-#: lib/Views/Browse.php:310
+#: lib/Views/Browse.php:318
 msgid "There was an error creating a new list."
 msgstr "Une erreur est survenue lors de la création de cette liste."
 
-#: lib/Views/Browse.php:220
+#: lib/Views/Browse.php:221
 #, php-format
 msgid "There was an error deleting \"%s\" from the source address book."
 msgstr ""
@@ -1324,26 +1436,26 @@ msgstr ""
 msgid "There was an error deleting this contact: %s"
 msgstr "Une erreur est survenue lors de la suppression de ce contact : %s"
 
-#: lib/Views/Browse.php:350
+#: lib/Views/Browse.php:362
 msgid "There was an error displaying the list"
 msgstr "Une erreur est survenue lors de l'affichage de la liste"
 
-#: data.php:356
+#: data.php:469
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "Une erreur est survenue lors de l'importation des données : %s"
 
-#: lib/api.php:682 lib/api.php:952
+#: lib/api.php:889 lib/api.php:1230
 msgid "There was an error importing the iCalendar data."
 msgstr "Une erreur est survenue lors de l'importation des données iCalendar."
 
-#: lib/api.php:231
+#: lib/api.php:258
 #, php-format
 msgid "There was an error removing an address book for %s"
 msgstr ""
 "Une erreur est survenue lors de la suppression d'un carnet d'adresses pour %s"
 
-#: lib/Forms/EditContact.php:86
+#: lib/Forms/EditContact.php:93
 msgid ""
 "There was an error saving the contact. Contact your system administrator for "
 "further help."
@@ -1351,7 +1463,7 @@ msgstr ""
 "Une erreur est survenue lors de l'enregistrement de ce contact. Contactez "
 "votre administrateur système pour plus d'informations."
 
-#: data.php:188
+#: data.php:292
 msgid "There were no addresses to export."
 msgstr "Il n'y a pas de carnet d'adresses à exporter."
 
@@ -1360,31 +1472,31 @@ msgstr "Il n'y a pas de carnet d'adresses 
 msgid "These address books will display in this order:"
 msgstr "Ces carnets d'adresses seront affichés dans cet ordre :"
 
-#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
-msgid "These columns will display in this order:"
-msgstr "Ces colonnes seront affichées dans cet ordre :"
-
 #: addressbooks/delete.php:26
 msgid "This addressbook cannot be deleted"
 msgstr "Ce carnet d'adresses ne peut être supprimé"
 
-#: data.php:287
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Ce contact à été marqué comme étant le votre."
+
+#: data.php:391
 msgid "This file format is not supported."
 msgstr "Ce format de fichier n'est pas supporté."
 
-#: lib/api.php:1414 lib/api.php:1427
+#: lib/api.php:1819 lib/api.php:1832
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr "Cette personne a déjà une entrée %s dans le carnet d'adresses."
 
-#: config/prefs.php.dist:129
+#: config/prefs.php.dist:138
 msgid ""
 "This will be the default address book when adding or importing contacts."
 msgstr ""
 "Ce sera le carnet d'adresses par défaut pour l'ajout ou l'importation de "
 "contacts."
 
-#: config/attributes.php.dist:229
+#: config/attributes.php.dist:241
 msgid "Time Zone"
 msgstr "Fuseau horaire"
 
@@ -1392,7 +1504,7 @@ msgstr "Fuseau horaire"
 msgid "Unable to find contact owner."
 msgstr "Impossible de trouver le propriétaire du contact."
 
-#: lib/Driver.php:1431 lib/Turba.php:643
+#: lib/Driver.php:1981 lib/Turba.php:659
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "Impossible de charger la définition de %s."
@@ -1402,21 +1514,15 @@ msgstr "Impossible de charger la d
 msgid "Unable to save address book \"%s\": %s"
 msgstr "Impossible de sauvegarder le carnet d'adresses \"%s\": %s"
 
-#: lib/Driver/kolab.php:486
+#: lib/Driver/kolab.php:490
 msgid "Unable to search."
 msgstr "Impossible de rechercher."
 
-#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:168
-msgid "Undo Changes"
-msgstr "Défaire les modifications"
-
-#: config/attributes.php.dist:352
+#: config/attributes.php.dist:391
 msgid "Unfiled"
 msgstr "Hors catégorie"
 
-#: lib/api.php:715 lib/api.php:818 lib/api.php:970
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr "Type de contenu non-supporté : %s"
@@ -1426,56 +1532,91 @@ msgstr "Type de contenu non-support
 msgid "View \"%s\""
 msgstr "Visualiser \"%s\""
 
-#: minisearch.php:76
+#: minisearch.php:72 minisearch.php:73
 msgid "View Contact"
 msgstr "Afficher le contact"
 
-#: config/prefs.php.dist:105
+#: config/prefs.php.dist:114
 msgid "View to display by default:"
 msgstr "Affichage par défaut :"
 
-#: config/attributes.php.dist:320
+#: config/attributes.php.dist:506
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:344
 msgid "Website URL"
 msgstr "URL du site web"
 
-#: config/attributes.php.dist:173
+#: config/attributes.php.dist:185
 msgid "Work Address"
 msgstr "Adresse bureau"
 
-#: config/attributes.php.dist:191
+#: config/attributes.php.dist:570
+msgid "Work Address Extended"
+msgstr "Adresse bureau étendue"
+
+#: config/attributes.php.dist:203
 msgid "Work City"
 msgstr "Ville du bureau"
 
-#: config/attributes.php.dist:209
+#: config/attributes.php.dist:221
 msgid "Work Country"
 msgstr "Pays du bureau"
 
-#: config/attributes.php.dist:254
+#: config/attributes.php.dist:454
+msgid "Work Email"
+msgstr "Courriel professionnel"
+
+#: config/attributes.php.dist:471
+msgid "Work Fax"
+msgstr "Fax professionnel"
+
+#: config/attributes.php.dist:576
+msgid "Work Latitude"
+msgstr "Latitude professionnelle"
+
+#: config/attributes.php.dist:581
+msgid "Work Longitude"
+msgstr "Longitude professionnel"
+
+#: config/attributes.php.dist:481
+msgid "Work Mobile Phone"
+msgstr "Téléphone mobile professionnel"
+
+#: config/attributes.php.dist:266
 msgid "Work Phone"
 msgstr "Tél. bureau"
 
-#: config/attributes.php.dist:185
-#, fuzzy
+#: config/attributes.php.dist:197
 msgid "Work Post Office Box"
-msgstr "Code postal du bureau"
+msgstr "Boite postale professionnelle"
 
-#: config/attributes.php.dist:203
+#: config/attributes.php.dist:215
 msgid "Work Postal Code"
 msgstr "Code postal du bureau"
 
-#: config/attributes.php.dist:197
+#: config/attributes.php.dist:209
 msgid "Work State/Province"
 msgstr "État/Province du bureau"
 
-#: config/attributes.php.dist:179
+#: config/attributes.php.dist:191
 msgid "Work Street Address"
 msgstr "Rue du bureau"
 
+#: config/attributes.php.dist:496
+msgid "Work Video Call"
+msgstr "Visiophone professionnel"
+
+#: config/attributes.php.dist:564
+msgid "Work Website URL"
+msgstr "URL du site web professionnel"
+
 #: addressbooks/edit.php:30
 msgid "You are not allowed to change this addressbook."
 msgstr "Vous n'êtes pas autorisé à changer ce carnet d'adresses."
 
-#: add.php:48 data.php:251 lib/Views/Browse.php:159 lib/Views/Browse.php:273
+#: data.php:355 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:281
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
 msgstr "Vous n'êtes pas autorisé à créer plus de %d contacts dans « %s »."
@@ -1484,7 +1625,7 @@ msgstr "Vous n'
 msgid "You are not allowed to delete this addressbook."
 msgstr "Vous n'êtes pas autorisé à supprimer ce carnet d'adresses."
 
-#: lib/api.php:194
+#: lib/api.php:204
 msgid "You are not allowed to remove user data."
 msgstr "Vous n'êtes pas autorisé à supprimer des données d'utilisateur."
 
@@ -1503,6 +1644,10 @@ msgid "You cannot delete contacts from a virtual address book"
 msgstr ""
 "Vous ne pouvez pas supprimer de contacts d'un carnet d'adresses virtuel"
 
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr "Vous n'avez pas encore marqué ce contact comme étant le votre."
+
 #: edit.php:66 view.php:38 lib/Views/EditContact.php:49
 #: lib/Views/DeleteContact.php:42
 msgid "You do not have permission to view this contact."
@@ -1516,7 +1661,15 @@ msgstr "Vous n'
 msgid "You do not have permissions to delete this address book."
 msgstr "Vous n'êtes pas autorisé à supprimer ce carnet d'adresses."
 
-#: lib/Driver/ldap.php:705
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"Vous n'êtes pas autorisé à lire ce carnet d'adresses qui contient votre "
+"contact."
+
+#: lib/Driver/ldap.php:741
 msgid ""
 "You must have the Net_LDAP PEAR library installed to use the schema check "
 "function."
@@ -1524,7 +1677,7 @@ msgstr ""
 "Le module PEAR Net_LDAP doit être installé pour pouvoir utiliser la fonction "
 "de vérification du schéma."
 
-#: search.php:109
+#: search.php:133
 msgid "You must provide a name for virtual address books."
 msgstr "Vous devez donner un nom aux carnets d'adresses virtuels."
 
@@ -1533,9 +1686,8 @@ msgid "You must select a target address book."
 msgstr "Il faut d'abord sélectionner un carnet d'adresse cible."
 
 #: templates/browse/javascript.inc:22
-#, fuzzy
 msgid "You must select a target contact list."
-msgstr "Vous devez d'abord sélectionner une liste cible."
+msgstr "Vous devez sélectionner une liste de contact cible."
 
 #: edit.php:31 templates/browse/javascript.inc:16
 #: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
@@ -1546,15 +1698,25 @@ msgstr "Vous devez d'abord s
 msgid "You only have permission to view this contact."
 msgstr "Vous êtes seulement autorisé à consulter ce contact."
 
-#: lib/Views/Browse.php:357
+#: lib/Views/Browse.php:369
 msgid "Your default address book is not browseable."
 msgstr "Impossible de parcourir votre carnet d'adresses par défaut."
 
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "Votre propre contact"
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr ""
+"Votre propre contact ne peut pas être trouvé dans ce carnet d'adresses."
+
 #: templates/browse/contactrow.inc:12
 msgid "[no value]"
 msgstr "[pas de valeur]"
 
-#: lib/Turba.php:585
+#: lib/Turba.php:601
 msgid "_Browse"
 msgstr "_Lister"
 
@@ -1566,11 +1728,11 @@ msgstr "_Contacts"
 msgid "_Delete"
 msgstr "S_upprimer"
 
-#: contact.php:82
+#: contact.php:91
 msgid "_Edit"
 msgstr "Édit_er"
 
-#: lib/Turba.php:594
+#: lib/Turba.php:610
 msgid "_Import/Export"
 msgstr "_Importer/Exporter"
 
@@ -1578,15 +1740,15 @@ msgstr "_Importer/Exporter"
 msgid "_Lists"
 msgstr "_Listes"
 
-#: lib/Turba.php:582
+#: lib/Turba.php:598
 msgid "_My Address Books"
 msgstr "_Mes annuaires"
 
-#: lib/Turba.php:588
+#: lib/Turba.php:604
 msgid "_New Contact"
 msgstr "_Nouveau contact"
 
-#: lib/Turba.php:599
+#: lib/Turba.php:615
 msgid "_Print"
 msgstr "_Imprimer"
 
@@ -1594,56 +1756,65 @@ msgstr "_Imprimer"
 msgid "_Remove from this list"
 msgstr "_Retirer de la liste"
 
-#: lib/Turba.php:590
+#: lib/Turba.php:606
 msgid "_Search"
 msgstr "_Recherche"
 
-#: contact.php:79
+#: contact.php:88
 msgid "_View"
 msgstr "_Voir"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "ascending"
 msgstr "ascendant"
 
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "Tri par %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "par moi"
+
 #: vcard.php:45
 msgid "contact"
 msgstr "contact"
 
-#: data.php:208 data.php:213 templates/data/export.inc:1
+#: data.php:312 data.php:317 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "contacts.csv"
 
-#: data.php:233
+#: data.php:337
 msgid "contacts.ldif"
 msgstr "contacts.ldif"
 
-#: data.php:218
+#: data.php:322
 msgid "contacts.tsv"
 msgstr "contacts.tsv"
 
-#: data.php:228
+#: data.php:332
 msgid "contacts.vcf"
 msgstr "contacts.vcf"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "descending"
 msgstr "descendant"
 
-#: config/attributes.php.dist:386
+#: config/attributes.php.dist:433
 msgid "female"
 msgstr "Féminin"
 
-#: lib/Block/tree_menu.php:37
+#: lib/Block/tree_menu.php:38
 #, php-format
 msgid "in %s"
 msgstr "dans %s"
 
-#: config/attributes.php.dist:386
+#: config/attributes.php.dist:433
 msgid "male"
 msgstr "Masculin"
 
-#: config/prefs.php.dist:119
+#: config/prefs.php.dist:128
 msgid "no formatting"
 msgstr "Aucun formatage"
 
@@ -1659,7 +1830,7 @@ msgstr "vers une liste de contacts"
 msgid "to a different Address Book"
 msgstr "vers un autre carnet d'adresses"
 
-#: data.php:62 templates/data/import.inc:15 templates/data/export.inc:15
-#: templates/browse/column_headers.inc:13
+#: data.php:103 templates/browse/column_headers.inc:14
+#: templates/data/import.inc:15 templates/data/export.inc:15
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/ja_JP.po b/po/ja_JP.po
index 6392e07..b11752a 100644
--- a/po/ja_JP.po
+++ b/po/ja_JP.po
@@ -5,10 +5,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Turba 2.2-RC1\n"
+"Project-Id-Version: Turba 2.3-RC1\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2007-08-03 14:42+0200\n"
-"PO-Revision-Date: 2007-12-27 10:08+0900\n"
+"POT-Creation-Date: 2008-09-11 16:59+0200\n"
+"PO-Revision-Date: 2008-09-24 20:41+0900\n"
 "Last-Translator: Hiromi Kimura <hiromi at tac.tsukuba.ac.jp>\n"
 "Language-Team: i18n at lists.horde.org\n"
 "MIME-Version: 1.0\n"
@@ -24,17 +24,17 @@ msgstr "IMSP 
 msgid " Delete IMSP Address Book"
 msgstr "IMSP ƒAƒhƒŒƒX’ ‚ðíœ"
 
-#: data.php:351
+#: data.php:455
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr "\"%s\" ‚ÍŠù‚É‘¶Ý‚·‚é‚̂ŃCƒ“ƒ|[ƒg‚µ‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
-#: lib/Forms/EditContact.php:76
+#: lib/Forms/EditContact.php:83
 #, php-format
 msgid "\"%s\" updated, but saving the uploaded file failed: %s"
 msgstr "\"%s\" ‚͍XV‚³‚ê‚Ü‚µ‚½‚ªAƒtƒ@ƒCƒ‹‚Ì•Û‘¶‚ÉŽ¸”s‚µ‚Ü‚µ‚½F%s"
 
-#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
 #, php-format
 msgid "\"%s\" updated."
 msgstr "\"%s\" ‚͍XV‚³‚ê‚Ü‚µ‚½B"
@@ -49,20 +49,25 @@ msgstr "\"%s\" 
 msgid "\"%s\" was not moved because it is a list."
 msgstr "\"%s\" ‚̓ŠƒXƒg‚Ȃ̂ňړ®‚µ‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
-#: config/prefs.php.dist:118
+#: config/prefs.php.dist:127
 msgid "\"Firstname Lastname\"  (ie. John Doe)"
 msgstr "\"© –¼\",\"Firstname Lastname\""
 
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:126
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr "\"–¼, ©\",\"Lastname, Firstname\""
 
-#: lib/Forms/AddContact.php:83
+#: lib/Driver.php:607
+#, php-format
+msgid "%d. %s of %s"
+msgstr ""
+
+#: lib/Forms/AddContact.php:88
 #, php-format
 msgid "%s added."
 msgstr "%s ‚ð’ljÁ‚µ‚Ü‚µ‚½B"
 
-#: data.php:370
+#: data.php:483
 #, php-format
 msgid "%s file successfully imported."
 msgstr "%s ƒtƒ@ƒCƒ‹‚ªƒCƒ“ƒ|[ƒg‚³‚ê‚Ü‚µ‚½B"
@@ -72,13 +77,13 @@ msgstr "%s 
 msgid "%s to %s of %s"
 msgstr "%s ‚©‚ç %si%s Œ’†j"
 
-#: lib/Turba.php:531
+#: lib/Turba.php:541
 #, php-format
 msgid "%s's Address Book"
 msgstr "%s ‚̃AƒhƒŒƒX’ "
 
-#: lib/Block/minisearch.php:42
-msgid "A browser that supports iFrames is required"
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
 msgstr "IFRAME ‚ðƒTƒ|[ƒg‚·‚éƒuƒ‰ƒEƒU‚ª•K—v‚Å‚·"
 
 #: view.php:54
@@ -98,10 +103,6 @@ msgstr "
 msgid "Add address book"
 msgstr "ƒAƒhƒŒƒX’ ’ljÁ"
 
-#: templates/prefs/columnselect.inc:237
-msgid "Add column"
-msgstr "—ñ‚̒ljÁ"
-
 #: lib/Forms/EditContact.php:34
 msgid "Add file"
 msgstr "ƒtƒ@ƒCƒ‹‚̒ljÁ"
@@ -110,15 +111,19 @@ msgstr "
 msgid "Add to"
 msgstr "‚±‚±‚ɒljÁ"
 
-#: lib/Driver.php:1463
+#: lib/Driver.php:2100 lib/Driver/null.php:57
 msgid "Adding contacts is not available."
 msgstr "˜A—æ‚̒ljÁ‚Í‚Å‚«‚Ü‚¹‚ñB"
 
-#: templates/addressbooks.inc:105
+#: templates/addressbook_list.php:16
 msgid "Address Book"
 msgstr "ƒAƒhƒŒƒX’ "
 
-#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "ƒAƒhƒŒƒX’ ˆê——"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
 msgid "Address Book Listing"
 msgstr "ƒAƒhƒŒƒX’ ˆê——"
 
@@ -126,24 +131,20 @@ msgstr "
 msgid "Address Books"
 msgstr "ƒAƒhƒŒƒX’ "
 
-#: data.php:331
+#: data.php:435
 msgid "Address book successfully purged."
 msgstr "ƒAƒhƒŒƒX’ ‚̓p[ƒW‚³‚ê‚Ü‚µ‚½B"
 
-#: templates/addressbooks.inc:80
-msgid "Address book to delete "
-msgstr "íœ‚·‚éƒAƒhƒŒƒX’ "
-
 #: templates/prefs/addressbookselect.inc:167
 #: templates/prefs/addressbookselect.inc:169
 msgid "Address books that will not be displayed:"
 msgstr "•\Ž¦•s”\‚ȃAƒhƒŒƒX’ F"
 
-#: search.php:161 templates/browse/search.inc:47
+#: search.php:184 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Ú×ŒŸõ"
 
-#: config/attributes.php.dist:77
+#: config/attributes.php.dist:83
 msgid "Alias"
 msgstr "•Ê–¼"
 
@@ -151,11 +152,15 @@ msgstr "
 msgid "All"
 msgstr "‘S‚Ä"
 
-#: lib/api.php:725
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr "Šù‚É‘¶Ý‚µ‚Ü‚·"
 
-#: config/attributes.php.dist:95
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "‹L”O“ú"
+
+#: config/attributes.php.dist:102
 msgid "Anniversary"
 msgstr "‹L”O“ú"
 
@@ -168,15 +173,11 @@ msgstr "
 msgid "Are you sure that you want to delete the selected contacts?"
 msgstr "‘I‘ð‚³‚ê‚½˜A—æ‚ð–{“–‚ɍ폜‚µ‚Ü‚·‚©H"
 
-#: templates/addressbooks.inc:45
-msgid "Are you sure you want to delete the addressbook: "
-msgstr "ƒAƒhƒŒƒX’ ‚ð–{“–‚ɍ폜‚µ‚Ü‚·‚©F"
-
-#: config/attributes.php.dist:368
+#: config/attributes.php.dist:424
 msgid "Assistant"
 msgstr "•Žè"
 
-#: search.php:158 templates/browse/search.inc:46
+#: search.php:181 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "ŠÈˆÕŒŸõ"
 
@@ -185,20 +186,15 @@ msgstr "
 msgid "Bind failed: (%s) %s"
 msgstr "ƒoƒCƒ“ƒhŽ¸”s: (%s) %s"
 
-#: config/attributes.php.dist:89
+#: config/attributes.php.dist:95
 msgid "Birthday"
 msgstr "’a¶“ú"
 
-#: lib/Driver.php:524
-#, php-format
-msgid "Birthday of %s"
-msgstr "%s ‚Ì’a¶“ú"
-
-#: lib/api.php:1255
+#: config/attributes.php.dist:99
 msgid "Birthdays"
 msgstr "’a¶“ú"
 
-#: contact.php:103 templates/browse/row.inc:6
+#: contact.php:128 templates/browse/row.inc:10
 msgid "Blank name"
 msgstr "‹ó‚Ì–¼‘O"
 
@@ -206,15 +202,16 @@ msgstr "
 msgid "Both"
 msgstr "—¼•û"
 
-#: templates/menu.inc:8
+#: templates/menu.inc:8 templates/addressbook_list.php:29
+#: addressbooks/index.php:39
 msgid "Browse"
 msgstr "‰{——"
 
-#: config/attributes.php.dist:280
+#: config/attributes.php.dist:300
 msgid "Business Category"
 msgstr "E‹Æ•ª—Þ"
 
-#: data.php:60
+#: data.php:101
 msgid "CSV"
 msgstr "CSV"
 
@@ -222,44 +219,44 @@ msgstr "CSV"
 msgid "Can't add a group to itself."
 msgstr "ƒOƒ‹[ƒv‚ÍŽ©•ªŽ©g‚ɒljÁ‚Å‚«‚Ü‚¹‚ñB"
 
-#: lib/Driver/kolab.php:620
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Žæ‚èÁ‚µ"
+
+#: lib/Driver/kolab.php:624
 #, php-format
 msgid "Cannot delete all address book entries for %s"
 msgstr "ƒAƒhƒŒƒX’  %s ‚Ì‘S€–Ú‚ðíœ‚Å‚«‚Ü‚¹‚ñ"
 
-#: config/attributes.php.dist:342
+#: config/attributes.php.dist:388
 msgid "Category"
 msgstr "•ª—Þ"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 #, php-format
 msgid "Change %s sort to %s"
 msgstr "%s ‚Ì•À‚Ñ‚ð %s ‚ɕύX"
 
-#: templates/browse/column_headers.inc:7
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
+msgid "Change Permissions"
+msgstr "ƒAƒNƒZƒXŒ •ÏX"
+
+#: templates/browse/column_headers.inc:8
 msgid "Check All/None"
 msgstr "‘S‚ă`ƒFƒbƒN^‰ðœ"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check _All/None"
 msgstr "_A‘S‚ă`ƒFƒbƒN^‰ðœ"
 
-#: config/attributes.php.dist:107
+#: config/attributes.php.dist:115
 msgid "Children"
 msgstr "Žq‹Ÿ"
 
-#: templates/addressbooks.inc:60
-msgid "Choose a name"
-msgstr "–¼‘O‚ð‘I‘ð"
-
 #: lib/Forms/AddContact.php:36
 msgid "Choose an address book"
 msgstr "ƒAƒhƒŒƒX’ ‚ð‘I‘ð"
 
-#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
-msgid "Choose an address book:"
-msgstr "ƒAƒhƒŒƒX’ ‚ð‘I‘ðF"
-
 #: templates/prefs/addressbookselect.inc:163
 msgid "Choose which address books to display, and in what order:"
 msgstr "•\Ž¦‚·‚éƒAƒhƒŒƒX’ ‚ð‘I‘ð‚µA‡˜‚ðŒˆ‚ß‚Ä‚­‚¾‚³‚¢F"
@@ -268,11 +265,15 @@ msgstr "
 msgid "Choose which address books to use."
 msgstr "Žg—p‚·‚éƒAƒhƒŒƒX’ ‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B"
 
-#: templates/prefs/columnselect.inc:227
-msgid "Choose which columns to display and in what order:"
-msgstr "•\Ž¦‚·‚é—ñ‚Æ•\Ž¦‚̏‡”Ô‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢F"
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+"•À‚Ñ‚ð•ÏX‚·‚éƒAƒhƒŒƒX’ ‚ðƒNƒŠƒbƒN‚µ‚ĉº‚³‚¢B—ñ‚ðƒhƒ‰ƒbƒO‚µ‚Ä•À‚Ñ‚ð•ÏX‚Å‚«"
+"‚Ü‚·B—ñ‚ðƒ`ƒFƒbƒN‚·‚ê‚ΗLŒø‚É‚Å‚«‚Ü‚·B"
 
-#: templates/block/minisearch.inc:27
+#: templates/block/minisearch.inc:26
 msgid "Close"
 msgstr "•Â‚¶‚é"
 
@@ -284,10 +285,6 @@ msgstr "
 msgid "Column Options"
 msgstr "•\Ž¦—ñƒIƒvƒVƒ‡ƒ“"
 
-#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
-msgid "Columns that will not be displayed:"
-msgstr "•\Ž¦‚³‚ê‚È‚¢€–ځF"
-
 #: templates/data/import.inc:13 templates/data/export.inc:12
 msgid "Comma separated values"
 msgstr "ƒRƒ“ƒ}‹æØ‚èŒ`Ž®"
@@ -296,35 +293,81 @@ msgstr "
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "ƒRƒ“ƒ}‹æØ‚èŒ`Ž® (Microsoft Outlook)"
 
-#: config/sources.php.dist:228 config/sources.php.dist:901
+#: config/attributes.php.dist:522
+#, fuzzy
+msgid "Common Address Extended"
+msgstr "ZŠ"
+
+#: config/attributes.php.dist:540
+#, fuzzy
+msgid "Common City"
+msgstr "Žs"
+
+#: config/attributes.php.dist:558
+#, fuzzy
+msgid "Common Country"
+msgstr "‘"
+
+#: config/attributes.php.dist:466
+#, fuzzy
+msgid "Common Phone"
+msgstr "“d˜b”ԍ†"
+
+#: config/attributes.php.dist:534
+#, fuzzy
+msgid "Common Post Office Box"
+msgstr "Ž„‘” "
+
+#: config/attributes.php.dist:552
+#, fuzzy
+msgid "Common Postal Code"
+msgstr "—X•Ö”ԍ†"
+
+#: config/attributes.php.dist:546
+#, fuzzy
+msgid "Common State/Province"
+msgstr "B^Œ§"
+
+#: config/attributes.php.dist:528
+#, fuzzy
+msgid "Common Street"
+msgstr "”Ô’n"
+
+#: config/attributes.php.dist:491
+#, fuzzy
+msgid "Common Video Call"
+msgstr "ƒrƒfƒI’ʘb"
+
+#: config/sources.php.dist:256 config/sources.php.dist:948
 msgid "Communications"
-msgstr "’ʐMŽè’i"
+msgstr "’ʐM"
 
-#: config/attributes.php.dist:286
+#: config/attributes.php.dist:306
 msgid "Company"
 msgstr "‹Î–±æ"
 
-#: config/attributes.php.dist:215
+#: config/attributes.php.dist:235
 msgid "Company Address"
 msgstr "‹Î–±æZŠ"
 
-#: scripts/import_squirrelmail_abook.php:112 lib/api.php:394 lib/api.php:439
-#: lib/api.php:490 lib/api.php:525 lib/api.php:574 lib/api.php:620
-#: lib/api.php:661 lib/api.php:778 lib/api.php:865 lib/api.php:923
-#: lib/api.php:1012 lib/api.php:1231 lib/api.php:1289 lib/api.php:1371
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
 #, php-format
 msgid "Connection failed: %s"
-msgstr "Ú‘±Ž¸”s: %s"
+msgstr "Ú‘±‚ÉŽ¸”s‚µ‚Ü‚µ‚½: %s"
 
 #: lib/Driver/ldap.php:68
 msgid "Connection failure"
-msgstr "Ú‘±Ž¸”s"
+msgstr "Ú‘±‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
 
 #: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
 msgid "Contact Search"
 msgstr "˜A—æ‚ÌŒŸõ"
 
-#: config/sources.php.dist:833
+#: config/sources.php.dist:866
 msgid "Contacts"
 msgstr "˜A—æ"
 
@@ -332,7 +375,7 @@ msgstr "
 msgid "Contacts displayed:"
 msgstr "˜A—æ•\Ž¦F"
 
-#: lib/Views/Browse.php:336
+#: lib/Views/Browse.php:346
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "˜A—æ‚Ì‚ ‚郊ƒXƒgF%s"
@@ -341,46 +384,51 @@ msgstr "
 msgid "Copy"
 msgstr "ƒRƒs["
 
-#: templates/addressbooks.inc:69
+#: lib/Forms/CreateAddressBook.php:39
 msgid "Create"
 msgstr "ì¬"
 
-#: templates/addressbooks.inc:56
+#: lib/Forms/CreateAddressBook.php:34
 msgid "Create Address Book"
 msgstr "ƒAƒhƒŒƒX’ ì¬"
 
-#: lib/ListView.php:443
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "V‚µ‚¢ƒAƒhƒŒƒX’ ‚ðì¬"
+
+#: lib/ListView.php:448
 msgid "Create a new Contact List in:"
 msgstr "V‚µ‚¢˜A—æƒŠƒXƒg‚̍쐬æF"
 
-#: lib/Views/Contact.php:74
+#: lib/Views/Contact.php:80
 msgid "Created"
 msgstr "ì¬"
 
-#: contact.php:86
+#: contact.php:95
 msgid "De_lete"
 msgstr "_Líœ"
 
-#: templates/addressbooks.inc:94 templates/browse/actions.inc:3
-#: lib/Views/DeleteContact.php:58
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: addressbooks/index.php:42 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
 msgid "Delete"
 msgstr "íœ"
 
-#: lib/Views/DeleteContact.php:28
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
 #, php-format
 msgid "Delete %s"
 msgstr "íœ %s"
 
-#: templates/addressbooks.inc:76
-msgid "Delete Address Book"
-msgstr "ƒAƒhƒŒƒX’ ‚̍폜"
+#: lib/api.php:644
+msgid "Delete denied."
+msgstr "íœ‚Í‹‘”Û‚³‚ê‚Ü‚µ‚½B"
 
-#: lib/Driver/ldap.php:285
+#: lib/Driver/ldap.php:321
 #, php-format
 msgid "Delete failed: (%s) %s"
 msgstr "íœ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: (%s) %s"
 
-#: lib/Driver.php:1471
+#: lib/Driver.php:2108 lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
 msgstr "˜A—æ‚̍폜‚Í‚Å‚«‚Ü‚¹‚ñB"
 
@@ -388,11 +436,11 @@ msgstr "
 msgid "Deletion failed"
 msgstr "íœ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
 
-#: config/attributes.php.dist:292
+#: config/attributes.php.dist:312
 msgid "Department"
 msgstr "•”"
 
-#: templates/addressbooks.inc:138
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
 msgid "Description"
 msgstr "à–¾"
 
@@ -409,47 +457,46 @@ msgstr "
 msgid "Display Options"
 msgstr "•\Ž¦ƒIƒvƒVƒ‡ƒ“"
 
-#: lib/Object.php:348
+#: lib/Object.php:354
 msgid "Download"
 msgstr "ƒ_ƒEƒ“ƒ[ƒh"
 
-#: templates/browse/row.inc:13
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
+#: templates/browse/contactrow.inc:25
 msgid "Download vCard"
 msgstr "VCard ‚̃_ƒEƒ“ƒ[ƒh"
 
-#: templates/addressbooks.inc:123 templates/browse/row.inc:21
-#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+#: templates/addressbook_list.php:31 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/column_headers.inc:11
+#: templates/browse/actions.inc:6 templates/browse/contactrow.inc:33
+#: addressbooks/index.php:40
 msgid "Edit"
 msgstr "•ÒW"
 
-#: edit.php:91
+#: edit.php:91 templates/browse/contactrow.inc:33
 #, php-format
 msgid "Edit \"%s\""
 msgstr "\"%s\" ‚̕ҏW"
 
-#: lib/Views/EditContact.php:35
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
 #, php-format
 msgid "Edit %s"
 msgstr "%s ‚̕ҏW"
 
-#: templates/addressbooks.inc:100
-msgid "Edit Address Books"
-msgstr "ƒAƒhƒŒƒX’ ‚̕ҏW"
-
-#: config/attributes.php.dist:229
+#: config/attributes.php.dist:249
 msgid "Email"
 msgstr "ƒ[ƒ‹ƒAƒhƒŒƒX"
 
-#: config/attributes.php.dist:235
+#: config/attributes.php.dist:255
 msgid "Emails"
 msgstr "ƒ[ƒ‹ƒAƒhƒŒƒX"
 
-#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
 #, php-format
 msgid "Error adding %d contact(s) to list."
 msgstr "ƒŠƒXƒg‚ւ̘A—æ‚̒ljÁi%dj‚ªƒGƒ‰[‚É‚È‚è‚Ü‚µ‚½B"
 
-#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
 msgstr "ƒŠƒXƒg‚ւ̘A—æ‚̒ljÁi%d / %dj‚ªƒGƒ‰[‚É‚È‚è‚Ü‚µ‚½B"
@@ -474,7 +521,7 @@ msgstr "
 msgid "Error removing %d of %d requested contact(s) from list."
 msgstr "ˆê——‚©‚ç˜A—æ‚ðíœ’†i%2$d ’†‚Ì %1$dj‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚µ‚½B"
 
-#: lib/api.php:531
+#: lib/api.php:707
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr "ƒAƒhƒŒƒX’ ‚ÌŒŸõ’†‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚µ‚½: %s"
@@ -495,26 +542,26 @@ msgstr "
 msgid "Export the following address book completely."
 msgstr "ˆÈ‰º‚̃AƒhƒŒƒX’ ‚Ì‘S‚Ä‚Ì“à—e‚ðƒGƒNƒXƒ|[ƒg‚·‚éB"
 
-#: data.php:143 data.php:242 data.php:320 add.php:42 search.php:86
+#: data.php:247 data.php:346 data.php:424 add.php:42 search.php:106
 #: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
-msgstr "ƒAƒhƒŒƒX’ ‚ɐڑ±‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
+msgstr "ƒAƒhƒŒƒX’ ‚ɃAƒNƒZƒX‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
 
-#: lib/Views/Browse.php:208
+#: lib/Views/Browse.php:211
 #, php-format
 msgid "Failed to add %s to %s: %s"
 msgstr "%s ‚ð %s ‚ɒljÁ‚Å‚«‚Ü‚¹‚ñ: %s"
 
-#: lib/Views/Browse.php:342
+#: lib/Views/Browse.php:352
 msgid "Failed to browse list"
 msgstr "ƒŠƒXƒg‚̉{——‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
 
-#: lib/Views/Browse.php:369
+#: lib/Views/Browse.php:383
 msgid "Failed to browse the directory"
 msgstr "l–¼•ë‚̉{——‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
 
-#: lib/Driver/ldap.php:318
+#: lib/Driver/ldap.php:354
 #, php-format
 msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
 msgstr "–¼‘O‚̕ύX‚ÉŽ¸”s‚µ‚Ü‚µ‚½: (%s) %s; ‹Œ DN = %s, V DN = %s, ƒ‹[ƒg = %s"
@@ -524,24 +571,24 @@ msgstr "
 msgid "Failed to find object to be added: %s"
 msgstr "’ljÁ‚·‚ׂ«ƒIƒuƒWƒFƒNƒg‚ªŒ©•t‚©‚è‚Ü‚¹‚ñ: %s"
 
-#: search.php:152
+#: search.php:175
 msgid "Failed to search the address book"
 msgstr "ƒAƒhƒŒƒX’ ‚ÌŒŸõ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
 
-#: data.php:158
+#: data.php:262
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "l–¼•ë‚ðŒŸõ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
 
-#: config/sources.php.dist:532
+#: config/sources.php.dist:565
 msgid "Favourite Recipients"
-msgstr "‚¨‹C‚É“ü‚è‚Ì‘ŠŽè"
+msgstr "‚æ‚­‘—‚é‘ŠŽè"
 
-#: config/attributes.php.dist:256
+#: config/attributes.php.dist:276
 msgid "Fax"
 msgstr "FAX"
 
-#: lib/Forms/Contact.php:40
+#: lib/Forms/Contact.php:41
 msgid "Files"
 msgstr "ƒtƒ@ƒCƒ‹"
 
@@ -549,15 +596,15 @@ msgstr "
 msgid "Find"
 msgstr "ŒŸõ"
 
-#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
 msgid "Finish"
 msgstr "Š®—¹"
 
-#: config/attributes.php.dist:47
+#: config/attributes.php.dist:53
 msgid "First Name"
 msgstr "–¼(First Name)"
 
-#: config/attributes.php.dist:318
+#: config/attributes.php.dist:350
 msgid "Freebusy URL"
 msgstr "—\’èî•ñ URL"
 
@@ -565,51 +612,84 @@ msgstr "
 msgid "From"
 msgstr "From"
 
-#: config/attributes.php.dist:374
+#: config/attributes.php.dist:430
 msgid "Gender"
 msgstr "«•Ê"
 
-#: config/sources.php.dist:758
+#: config/sources.php.dist:791
 msgid "Global Address Book"
 msgstr "LˆæƒAƒhƒŒƒX’ "
 
-#: templates/browse/row.inc:39
+#: templates/browse/row.inc:61 templates/browse/contactrow.inc:44
 msgid "Group"
 msgstr "ƒOƒ‹[ƒv"
 
-#: config/attributes.php.dist:115
+#: config/attributes.php.dist:135
 msgid "Home Address"
 msgstr "Ž©‘î‚̏ZŠ"
 
-#: config/attributes.php.dist:133
+#: config/attributes.php.dist:592
+#, fuzzy
+msgid "Home Address Extended"
+msgstr "Ž©‘î‚̏ZŠ"
+
+#: config/attributes.php.dist:153
 msgid "Home City"
 msgstr "Ž©‘î‚ÌŽs"
 
-#: config/attributes.php.dist:151
+#: config/attributes.php.dist:171
 msgid "Home Country"
 msgstr "Ž©‘î‚̍‘"
 
-#: config/attributes.php.dist:241
+#: config/attributes.php.dist:460
+msgid "Home Email"
+msgstr "Ž©‘[ƒ‹ƒAƒhƒŒƒX"
+
+#: config/attributes.php.dist:476
+msgid "Home Fax"
+msgstr "Ž©‘î‚Ì FAX"
+
+#: config/attributes.php.dist:598
+msgid "Home Latitude"
+msgstr "Ž©‘î‚̈ܓx"
+
+#: config/attributes.php.dist:603
+msgid "Home Longitude"
+msgstr "Ž©‘î‚ÌŒo“x"
+
+#: config/attributes.php.dist:486
+msgid "Home Mobile Phone"
+msgstr "Ž©‘î‚ÌŒg‘Ñ“d˜b"
+
+#: config/attributes.php.dist:261
 msgid "Home Phone"
 msgstr "Ž©‘î‚Ì“d˜b”ԍ†"
 
-#: config/attributes.php.dist:127
+#: config/attributes.php.dist:147
 msgid "Home Post Office Box"
 msgstr "Ž©‘î‚ÌŽ„‘” "
 
-#: config/attributes.php.dist:145
+#: config/attributes.php.dist:165
 msgid "Home Postal Code"
 msgstr "Ž©‘î‚Ì—X•Ö”ԍ†"
 
-#: config/attributes.php.dist:139
+#: config/attributes.php.dist:159
 msgid "Home State/Province"
 msgstr "Ž©‘î‚̏B^Œ§"
 
-#: config/attributes.php.dist:121
+#: config/attributes.php.dist:141
 msgid "Home Street Address"
 msgstr "Ž©‘î‚̔Ԓn"
 
-#: config/sources.php.dist:649
+#: config/attributes.php.dist:501
+msgid "Home Video Call"
+msgstr "Ž©‘î‚̃rƒfƒI’ʘb"
+
+#: config/attributes.php.dist:586
+msgid "Home Website URL"
+msgstr "Ž©‘î‚Ì Web URL"
+
+#: config/sources.php.dist:682
 msgid "IMSP"
 msgstr "IMSP"
 
@@ -618,54 +698,54 @@ msgstr "IMSP"
 msgid "Import Address Book, Step %d"
 msgstr "ƒAƒhƒŒƒX’ ‚̃Cƒ“ƒ|[ƒgAƒXƒeƒbƒv %d"
 
-#: data.php:388
+#: data.php:501
 msgid "Import/Export Address Books"
 msgstr "ƒAƒhƒŒƒX’ ‚̃Cƒ“ƒ|[ƒg^ƒGƒNƒXƒ|[ƒg"
 
-#: config/attributes.php.dist:350
+#: config/attributes.php.dist:406
 msgid "Initials"
 msgstr "ƒCƒjƒVƒƒƒ‹"
 
-#: config/attributes.php.dist:356
+#: config/attributes.php.dist:412
 msgid "Instant Messenger"
 msgstr "ƒCƒ“ƒXƒ^ƒ“ƒgEƒƒbƒZƒ“ƒWƒƒ["
 
-#: lib/api.php:773 lib/api.php:860
+#: lib/api.php:999 lib/api.php:1132
 msgid "Invalid ID"
-msgstr "•s³‚È ID ‚Å‚·"
+msgstr "–³Œø‚È ID ‚Å‚·"
 
-#: scripts/import_squirrelmail_abook.php:105 lib/api.php:306 lib/api.php:520
-#: lib/api.php:569 lib/api.php:615 lib/api.php:656 lib/api.php:769
-#: lib/api.php:856 lib/api.php:913 lib/api.php:1354
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
 #, php-format
 msgid "Invalid address book: %s"
-msgstr "•s³‚ȃAƒhƒŒƒX’ ‚Å‚·F%s"
+msgstr "–³Œø‚ȃAƒhƒŒƒX’ ‚Å‚·F%s"
 
-#: lib/api.php:1358 lib/api.php:1432 lib/api.php:1489
+#: lib/api.php:1198
+msgid "Invalid contact unique ID"
+msgstr "–³Œø‚ȘA——p ID"
+
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
 msgid "Invalid email"
-msgstr "•s³‚ȃ[ƒ‹ƒAƒhƒŒƒX‚Å‚·"
+msgstr "–³Œø‚ȃ[ƒ‹‚Å‚·"
 
-#: lib/api.php:1366
+#: lib/api.php:1786
 msgid "Invalid entry"
-msgstr "•s³‚È“ü—Í‚Å‚·"
+msgstr "–³Œø‚È“ü—Í‚Å‚·"
 
-#: lib/Driver/ldap.php:281
+#: lib/Driver/ldap.php:317
 msgid "Invalid key specified."
-msgstr "•s³‚ȃLƒC‚ªŽw’肳‚ê‚Ü‚µ‚½B"
+msgstr "–³Œø‚ȃLƒC‚ªŽw’肳‚ê‚Ü‚µ‚½B"
 
-#: lib/api.php:1362
+#: lib/api.php:1782
 msgid "Invalid name"
-msgstr "•s³‚È–¼‘O‚Å‚·"
-
-#: lib/api.php:917
-msgid "Invalid objectId"
-msgstr "•s³‚ȃIƒuƒWƒFƒNƒgID ‚Å‚·"
+msgstr "–³Œø‚È–¼‘O‚Å‚·"
 
-#: config/attributes.php.dist:268
+#: config/attributes.php.dist:288
 msgid "Job Title"
 msgstr "Œ¨‘"
 
-#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
 #, php-format
 msgid "Key for saving must be a UID not %s!"
 msgstr "•Û‘¶‚̃LƒC‚Í UID ‚Å‚ ‚Á‚āA%s ‚Å‚È‚¢‚±‚ƁI"
@@ -676,51 +756,71 @@ msgid ""
 msgstr ""
 "LDAP ‚̃Tƒ|[ƒg‚ª•K—v‚Å‚·‚ªALDAP ƒ‚ƒWƒ…[ƒ‹‚ª–³‚¢‚©ƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
-#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
 msgid "LDIF Address Book"
 msgstr "LDIFƒAƒhƒŒƒX’ "
 
-#: config/attributes.php.dist:380
+#: config/attributes.php.dist:436
 msgid "Language"
 msgstr "Œ¾Œê"
 
-#: lib/Views/Contact.php:80
+#: lib/Views/Contact.php:91
 msgid "Last Modified"
 msgstr "ÅI•ÏX"
 
-#: config/attributes.php.dist:53
+#: config/attributes.php.dist:59
 msgid "Last Name"
 msgstr "©(Last Name)"
 
-#: config/attributes.php.dist:386
+#: config/attributes.php.dist:442
 msgid "Latitude"
 msgstr "ˆÜ“x"
 
-#: templates/browse/column_headers.inc:16
+#: templates/browse/column_headers.inc:17
 msgid "List"
 msgstr "ƒŠƒXƒg"
 
-#: config/sources.php.dist:223 config/sources.php.dist:897
+#: config/sources.php.dist:251 config/sources.php.dist:944
 msgid "Location"
 msgstr "êŠ"
 
-#: config/attributes.php.dist:391
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "ƒƒS"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr "ƒƒS‚ÌMIMEƒ^ƒCƒv"
+
+#: config/attributes.php.dist:447
 msgid "Longitude"
 msgstr "Œo“x"
 
-#: config/attributes.php.dist:362
+#: lib/api.php:616
+msgid "Malformed request."
+msgstr "•s³‚È—v‹"
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
+msgid "Manage Address Books"
+msgstr "ƒAƒhƒŒƒX’ ‚ÌŠÇ—"
+
+#: config/attributes.php.dist:418
 msgid "Manager"
 msgstr "ŠÇ—ŽÒ"
 
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "‚±‚̘A—æ‚Í‚ ‚È‚½Ž©g‚Ì‚Å‚ ‚é‚ÆŽw’è‚·‚é"
+
 #: templates/browse/search.inc:109
 msgid "Matching"
 msgstr "‚ªŽŸ‚Ɉê’v‚·‚é"
 
-#: lib/api.php:281
+#: lib/api.php:329
 msgid "Maximum Number of Contacts"
 msgstr "˜A—æ‚̍ő吔"
 
-#: config/prefs.php.dist:88
+#: config/prefs.php.dist:97
 msgid "Maximum number of pages"
 msgstr "Å‘å‚̃y[ƒW”"
 
@@ -728,19 +828,19 @@ msgstr "
 msgid "Menu List"
 msgstr "ƒƒjƒ…[ƒŠƒXƒg"
 
-#: config/attributes.php.dist:59
+#: config/attributes.php.dist:65
 msgid "Middle Names"
 msgstr "ƒ~ƒhƒ‹ƒl[ƒ€"
 
-#: lib/Driver/ldap.php:311
+#: lib/Driver/ldap.php:347
 msgid "Missing DN in LDAP source configuration."
 msgstr "LDAP ‚̐ݒè‚É DN ‚ÌŽw’肪”²‚¯‚Ä‚¢‚Ü‚·B"
 
-#: config/attributes.php.dist:251
+#: config/attributes.php.dist:271
 msgid "Mobile Phone"
 msgstr "Œg‘Ñ“d˜b"
 
-#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
 #, php-format
 msgid "Modify failed: (%s) %s"
 msgstr "•ÏXŽ¸”s: (%s) %s"
@@ -749,7 +849,7 @@ msgstr "
 msgid "More Options..."
 msgstr "‚»‚Ì‘¼‚̃IƒvƒVƒ‡ƒ“..."
 
-#: lib/api.php:1474
+#: lib/api.php:1902
 msgid "More than 1 entry found"
 msgstr "‚P‚ˆȏ゠‚è‚Ü‚·"
 
@@ -757,35 +857,30 @@ msgstr "
 msgid "Move"
 msgstr "ˆÚ“®"
 
-#: templates/prefs/columnselect.inc:248
 #: templates/prefs/addressbookselect.inc:184
 msgid "Move left"
 msgstr "¶‚Ɉړ®"
 
-#: templates/prefs/columnselect.inc:250
 #: templates/prefs/addressbookselect.inc:186
 msgid "Move right"
 msgstr "‰E‚Ɉړ®"
 
-#: data.php:63 templates/data/import.inc:16
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr "Mulberry Œ`Ž®‚̃AƒhƒŒƒX’ "
 
-#: lib/api.php:1390
+#: lib/api.php:1810
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
 msgstr "ƒAƒhƒŒƒX[%s]‚É•¡”‚Ì–¼‘O‚ª‚ ‚è‚Ü‚·‚ªA–¼‘O [%s]‚Í‘¶Ý‚µ‚Ü‚¹‚ñB"
 
-#: config/sources.php.dist:161
+#: config/sources.php.dist:167
 msgid "My Address Book"
 msgstr "Ž„‚̃AƒhƒŒƒX’ "
 
-#: addressbooks.php:174
-msgid "My Address Books"
-msgstr "Ž„‚̃AƒhƒŒƒX’ "
-
-#: templates/addressbooks.inc:130 config/attributes.php.dist:41
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
 msgid "Name"
 msgstr "–¼‘O"
 
@@ -793,13 +888,13 @@ msgstr "
 msgid "Name Format"
 msgstr "–¼‘O‚ÌŒ`Ž®"
 
-#: config/attributes.php.dist:65
+#: config/attributes.php.dist:71
 msgid "Name Prefixes"
-msgstr "ŒhÌiÚ“ªj"
+msgstr "–¼‘O‚Ì‘O‚ÌŒhÌ"
 
-#: config/attributes.php.dist:71
+#: config/attributes.php.dist:77
 msgid "Name Suffixes"
-msgstr "ŒhÌiÚ”öj"
+msgstr "–¼‘O‚ÌŒã‚ÌŒhÌ"
 
 #: templates/browse/search_vbook.inc:6
 msgid "Name:"
@@ -809,50 +904,51 @@ msgstr "
 msgid "New Contact"
 msgstr "V‹K˜A—æ"
 
-#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
-#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
 msgid "Next"
 msgstr "ŽŸ"
 
-#: config/attributes.php.dist:83
+#: config/attributes.php.dist:89
 msgid "Nickname"
 msgstr "ƒjƒbƒNƒl[ƒ€"
 
-#: lib/api.php:1477 lib/api.php:1526
+#: lib/api.php:1905 lib/api.php:1965
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "%s ‚Í %s ‚É‚ ‚è‚Ü‚¹‚ñ"
 
-#: data.php:52
+#: data.php:93
 msgid ""
 "No Address Books are currently available. Import and Export is disabled."
 msgstr "ƒAƒhƒŒƒX’ ‚ª‚ ‚è‚Ü‚¹‚ñBƒCƒ“ƒ|[ƒg‚ƃGƒNƒXƒ|[ƒg‚Í‚Å‚«‚Ü‚¹‚ñB"
 
-#: search.php:72
+#: search.php:92
 msgid "No Address Books are currently available. Searching is disabled."
 msgstr "ƒAƒhƒŒƒX’ ‚ª‚ ‚è‚Ü‚¹‚ñBŒŸõ‚Í‚Å‚«‚Ü‚¹‚ñB"
 
-#: lib/api.php:1441
-msgid "No address books found."
-msgstr "ƒAƒhƒŒƒX’ ‚ªŒ©•t‚©‚è‚Ü‚¹‚ñB"
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
+msgid "No address book specified"
+msgstr "ƒAƒhƒŒƒX’ ‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
 
-#: minisearch.php:81
+#: minisearch.php:80
 msgid "No contacts found"
 msgstr "˜A—æ‚ªŒ©•t‚©‚è‚Ü‚¹‚ñ"
 
-#: templates/browse/column_headers.inc:43
+#: templates/browse/column_headers.inc:44
 msgid "No contacts match the current filter."
 msgstr "Œ»Ý‚̃tƒBƒ‹ƒ^[‚ɂ͈ê’v‚·‚é˜A—æ‚Í‚ ‚è‚Ü‚¹‚ñB"
 
-#: lib/ListView.php:251
+#: lib/ListView.php:255
 msgid "No matching contacts"
 msgstr "ˆê’v‚·‚é˜A—æ‚ª‚ ‚è‚Ü‚¹‚ñ"
 
-#: lib/Driver/favourites.php:120
+#: lib/Driver/favourites.php:124
 msgid "No source for favourite recipients exists."
 msgstr "u‚¨‹C‚É“ü‚è‚Ì‘ŠŽèv‚̃\[ƒX‚ª‚ ‚è‚Ü‚¹‚ñB"
 
-#: lib/api.php:682 lib/api.php:949
+#: lib/api.php:893 lib/api.php:1235
 msgid "No vCard data was found."
 msgstr "vCard ƒf[ƒ^‚ªŒ©•t‚©‚è‚Ü‚¹‚ñB"
 
@@ -869,23 +965,28 @@ msgstr "
 msgid "Not found"
 msgstr "Œ©•t‚©‚è‚Ü‚¹‚ñ"
 
-#: config/attributes.php.dist:306
+#: config/attributes.php.dist:338
 msgid "Notes"
 msgstr "’‹L"
 
-#: config/prefs.php.dist:96
+#: config/prefs.php.dist:105
 msgid "Number of items per page"
 msgstr "1ƒy[ƒW‚̍€–ڐ”"
 
-#: lib/api.php:789 lib/api.php:929
+#: lib/api.php:1041 lib/api.php:1260
 msgid "Object not found"
 msgstr "ƒIƒuƒWƒFƒNƒg‚ªŒ©•t‚©‚è‚Ü‚¹‚ñ"
 
-#: config/attributes.php.dist:274
+#: lib/Driver/kolab.php:1199
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "UID %s ‚̃IƒuƒWƒFƒNƒg‚Í‘¶Ý‚µ‚Ü‚¹‚ñI"
+
+#: config/attributes.php.dist:294
 msgid "Occupation"
-msgstr "ŒhÌ"
+msgstr "E‹Æ"
 
-#: config/attributes.php.dist:298
+#: config/attributes.php.dist:318
 msgid "Office"
 msgstr "‰ïŽÐ"
 
@@ -898,23 +999,27 @@ msgstr ""
 "‚±‚̃IƒvƒVƒ‡ƒ“‰æ–Ê‚ð•Û‘¶‚·‚é‚ƁA‚»‚̃AƒhƒŒƒX’ ‚ÍŠ®‘S‚ɍ폜‚³‚ê‚Ü‚·B‚»‚ê‚ð–]"
 "‚Ü‚È‚¢‚È‚ç‚΁A\"None\" ‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B"
 
-#: lib/api.php:957
+#: lib/api.php:1243
 msgid "Only one vcard supported."
 msgstr "‚P‚Â‚Ì vcard ‚¾‚¯‚ðƒTƒ|[ƒg‚µ‚Ü‚·B"
 
-#: config/sources.php.dist:230 config/sources.php.dist:903
+#: config/sources.php.dist:258 config/sources.php.dist:950
 msgid "Organization"
 msgstr "‘gD"
 
-#: config/sources.php.dist:231 config/sources.php.dist:905
+#: config/sources.php.dist:259 config/sources.php.dist:952
 msgid "Other"
 msgstr "‚»‚Ì‘¼"
 
-#: config/attributes.php.dist:324
+#: config/attributes.php.dist:356
 msgid "PGP Public Key"
 msgstr "PGP ŒöŠJŒ®"
 
-#: config/attributes.php.dist:261
+#: config/attributes.php.dist:517
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:281
 msgid "Pager"
 msgstr "ƒ|ƒPƒxƒ‹"
 
@@ -922,20 +1027,24 @@ msgstr "
 msgid "Permanently delete this contact?"
 msgstr "‚±‚̘A—æ‚ð–{“–‚ɍ폜‚µ‚Ü‚·‚©H"
 
-#: deletefile.php:36 lib/Driver.php:676 lib/api.php:665 lib/api.php:782
-#: lib/api.php:869 lib/api.php:1159 lib/api.php:1375 lib/Driver/sql.php:481
+#: deletefile.php:36 lib/Driver.php:791 lib/api.php:870 lib/api.php:1795
+#: lib/Driver/sql.php:515
 msgid "Permission denied"
 msgstr "ƒAƒNƒZƒX‚ª‹‘”Û‚³‚ê‚Ü‚µ‚½"
 
-#: templates/addressbooks.inc:120
-msgid "Permissions"
-msgstr "ƒAƒNƒZƒXŒ "
-
-#: config/sources.php.dist:221 config/sources.php.dist:893
+#: config/sources.php.dist:248 config/sources.php.dist:940
 msgid "Personal"
 msgstr "ŒÂl"
 
-#: data.php:64 templates/data/import.inc:17
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "ŽÊ^"
+
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr "ŽÊ^‚ÌMIMEƒ^ƒCƒv"
+
+#: data.php:105 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr "Pine Œ`Ž®‚̃AƒhƒŒƒX’ "
 
@@ -943,38 +1052,43 @@ msgstr "Pine 
 msgid "Please name the new contact list:"
 msgstr "V‹K˜A—æƒŠƒXƒg‚Ì–¼‘O‚ð“ü—Í‚µ‚ĉº‚³‚¢F"
 
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:166
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
 msgid "Previous"
 msgstr "‘O"
 
-#: lib/Driver/ldap.php:162
+#: lib/Driver/ldap.php:197
 #, php-format
 msgid "Query failed: (%s) %s"
 msgstr "–â‚¢‡‚킹Ž¸”s: (%s) %s"
 
-#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
 #, php-format
 msgid "Read failed: (%s) %s"
 msgstr "“Ǎž‚ÝŽ¸”s: (%s) %s"
 
-#: lib/Driver.php:1455
+#: lib/Driver.php:2092 lib/Driver/null.php:52
 msgid "Reading contacts is not available."
 msgstr "˜A—æ‚̓ǂݏo‚µ‚Í‚Å‚«‚Ü‚¹‚ñB"
 
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"–{“–‚ɃAƒhƒŒƒX’  \"%s\" ‚ðíœ‚µ‚Ü‚·‚©H@‚±‚Ì‘€ì‚ÍŽæ‚èÁ‚¹‚Ü‚¹‚ñ‚µAƒAƒhƒŒ"
+"ƒX’ ‚Ì“à—e‚Í‘S‚ÄŽ¸‚í‚ê‚Ü‚·B"
+
 #: templates/prefs/addressbookselect.inc:175
 msgid "Remove address book"
 msgstr "ƒAƒhƒŒƒX’ ‚ðíœ"
 
-#: templates/prefs/columnselect.inc:239
-msgid "Remove column"
-msgstr "—ñ‚ðíœ"
-
 #: templates/browse/actions.inc:3
 msgid "Remove from this list"
 msgstr "ƒŠƒXƒg‚©‚çŠO‚·"
 
-#: lib/Driver.php:1493
+#: lib/Driver.php:2130
 msgid ""
 "Removing user data is not supported in the current address book storage "
 "driver."
@@ -987,10 +1101,10 @@ msgid ""
 "Replace existing address book with the imported one? <strong>Warning: This "
 "deletes all entries in your current address book.</strong>"
 msgstr ""
-"ƒCƒ“ƒ|[ƒg‚ÅŠù‘¶‚̃AƒhƒŒƒX’ ‚ð’u‚«Š·‚¦‚Ü‚·‚©H <b>ŒxF‚»‚¤‚·‚é‚ÆŒ»Ý‚̃Aƒh"
-"ƒŒƒX’ ‚Ì“à—e‚Í‘S‚ÄŽ¸‚í‚ê‚Ü‚·B</b>"
+"ƒCƒ“ƒ|[ƒg‚ÅŠù‘¶‚̃AƒhƒŒƒX’ ‚ð’u‚«Š·‚¦‚Ü‚·‚©H <strong>ŒxF‚»‚¤‚·‚é‚ÆŒ»Ý‚Ì"
+"ƒAƒhƒŒƒX’ ‚Ì“à—e‚Í‘S‚ÄŽ¸‚í‚ê‚Ü‚·B</strong>"
 
-#: lib/Driver.php:573
+#: lib/Driver.php:685
 msgid "Requested object not found."
 msgstr "—v‹‚³‚ꂽƒIƒuƒWƒFƒNƒg‚ÍŒ©•t‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
@@ -998,16 +1112,20 @@ msgstr "
 msgid "Reset to Defaults"
 msgstr "ƒfƒtƒHƒ‹ƒg‚É–ß‚·"
 
-#: config/attributes.php.dist:330
+#: config/attributes.php.dist:362
 msgid "S/MIME Public Certificate"
 msgstr "S/MIME ŒöŠJØ–¾‘"
 
+#: config/attributes.php.dist:511
+msgid "SIP"
+msgstr "SIP"
+
 #: lib/Driver/ldap.php:84
 #, php-format
 msgid "STARTTLS failed: (%s) %s"
 msgstr "STARTTLS Ž¸”s: (%s) %s"
 
-#: templates/addressbooks.inc:147 lib/Forms/EditContact.php:26
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
 msgid "Save"
 msgstr "•Û‘¶"
 
@@ -1015,42 +1133,34 @@ msgstr "
 msgid "Save search as a virtual address book?"
 msgstr "ŒŸõŒ‹‰Ê‚ð‰¼‘zƒAƒhƒŒƒX’ ‚É•Û‘¶‚µ‚Ü‚·‚©H"
 
-#: lib/Driver.php:1481
+#: lib/Driver.php:2118 lib/Driver/null.php:67
 msgid "Saving contacts is not available."
 msgstr "˜A—æ‚Ì•Û‘¶‚Í‚Å‚«‚Ü‚¹‚ñB"
 
 #: templates/browse/search.inc:111 templates/browse/search.inc:119
-#: templates/browse/header.inc:3 templates/block/minisearch.inc:26
-#: lib/Block/tree_menu.php:59 config/prefs.php.dist:107
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
 msgid "Search"
 msgstr "ŒŸõ"
 
-#: lib/api.php:1236
+#: lib/api.php:1568
 msgid "Search failed"
 msgstr "ŒŸõŽ¸”s"
 
-#: lib/api.php:1380 lib/api.php:1386 lib/api.php:1395 lib/api.php:1408
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
 #, php-format
 msgid "Search failed: %s"
 msgstr "ŒŸõŽ¸”s: %s"
 
-#: templates/block/minisearch.inc:24
+#: templates/block/minisearch.inc:23
 msgid "Search for: "
 msgstr "ŒŸõF"
 
-#: lib/Driver.php:1440
+#: lib/Driver.php:2077 lib/Driver/null.php:47
 msgid "Searching is not available."
 msgstr "ŒŸõ‚ÍŽg—p‚Å‚«‚Ü‚¹‚ñB"
 
-#: templates/addressbooks.inc:84
-msgid "Select an address book to delete"
-msgstr "íœ‚·‚éƒAƒhƒŒƒX’ ‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: templates/addressbooks.inc:109
-msgid "Select an address book to edit"
-msgstr "•ÒW‚·‚éƒAƒhƒŒƒX’ ‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: templates/browse/row.inc:30
+#: templates/browse/row.inc:52
 msgid "Select contact"
 msgstr "˜A—æ‘I‘ð"
 
@@ -1062,6 +1172,12 @@ msgstr "
 msgid "Select the address book to import to:"
 msgstr "ƒCƒ“ƒ|[ƒgæ‚̃AƒhƒŒƒX’ ‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢:"
 
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr "ŠO•”‚Ì‘•’u‚Æ“¯Šú‚ðŽæ‚éƒAƒhƒŒƒX’ ‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢F"
+
 #: templates/data/import.inc:36
 msgid "Select the charset of the source file:"
 msgstr "ƒtƒ@ƒCƒ‹‚Ì•¶ŽšƒZƒbƒg‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢:"
@@ -1078,14 +1194,13 @@ msgstr "
 msgid "Select the format of the source file:"
 msgstr "Œ³‚̃tƒ@ƒCƒ‹‚ÌŒ`Ž®‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢:"
 
-#: config/prefs.php.dist:116
+#: config/prefs.php.dist:125
 msgid "Select the format used to display names:"
 msgstr "•\Ž¦‚ÌŒ`Ž®‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢:"
 
 #: config/prefs.php.dist:25
-msgid "Select view to display by default, sort options, and paging options."
-msgstr ""
-"•À‚я‡‚âƒy[ƒWƒ“ƒOƒIƒvƒVƒ‡ƒ“‚Ȃǂ̃fƒtƒHƒ‹ƒg‚Ì•\Ž¦Œ`Ž®‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B"
+msgid "Select view to display by default and paging options."
+msgstr "•À‚я‡‚âƒy[ƒW‚̍€–ڐ”‚Ȃǂ̃fƒtƒHƒ‹ƒg‚Ì•\Ž¦Œ`Ž®‚ð‘I‘ð‚µ‚Ä‰º‚³‚¢B"
 
 #: config/prefs.php.dist:18
 msgid "Select which fields to display in the address lists."
@@ -1117,21 +1232,21 @@ msgstr "
 msgid "Show Lists"
 msgstr "ƒŠƒXƒg‚Ì•\Ž¦"
 
-#: lib/ListView.php:319 lib/ListView.php:325
+#: lib/ListView.php:323 lib/ListView.php:329
 msgid "Sort Direction"
 msgstr "•À‚я‡"
 
-#: templates/browse/column_headers.inc:31
+#: templates/browse/column_headers.inc:32
 #, php-format
 msgid "Sort by %s"
 msgstr "%s ‚Å•À‚בւ¦"
 
-#: templates/browse/column_headers.inc:26
+#: templates/browse/column_headers.inc:27
 #, php-format
 msgid "Sort by %s only"
 msgstr "%s ‚¾‚¯‚Å•À‚בւ¦"
 
-#: templates/browse/column_headers.inc:29
+#: templates/browse/column_headers.inc:30
 #, php-format
 msgid "Sort by %s, then by %s"
 msgstr "æ‚¸ %s ‚ŁAŽŸ‚É %s ‚Å•À‚בւ¦"
@@ -1140,30 +1255,30 @@ msgstr "
 msgid "Source:"
 msgstr "ƒ\[ƒXF"
 
-#: lib/api.php:274
+#: lib/api.php:322
 msgid "Sources"
 msgstr "ƒ\[ƒX"
 
-#: config/attributes.php.dist:101
+#: config/attributes.php.dist:109
 msgid "Spouse"
 msgstr "”z‹ôŽÒ"
 
-#: lib/Views/Browse.php:258 lib/Views/Browse.php:298
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr "%d ‚‚̘A—æ‚̓ŠƒXƒg‚ɒljÁ‚³‚ê‚Ü‚µ‚½B"
 
-#: lib/Views/Browse.php:212
+#: lib/Views/Browse.php:215
 #, php-format
 msgid "Successfully added %s to %s"
 msgstr "%s ‚Í %s ‚ɒljÁ‚³‚ê‚Ü‚µ‚½"
 
-#: lib/Views/Browse.php:288
+#: lib/Views/Browse.php:298
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr "˜A—æƒŠƒXƒg \"%s\" ‚ª’ljÁ‚³‚ê‚Ü‚µ‚½B"
 
-#: search.php:127
+#: search.php:150
 #, php-format
 msgid "Successfully created virtual address book \"%s\""
 msgstr "‰¼‘zƒAƒhƒŒƒX’  \"%s\" ‚ªì¬‚³‚ê‚Ü‚µ‚½"
@@ -1178,7 +1293,7 @@ msgstr "%d 
 msgid "Successfully removed %d contact(s) from list."
 msgstr "%d ‚‚ɘA—æ‚ªƒŠƒXƒg‚©‚çíœ‚³‚ê‚Ü‚µ‚½B"
 
-#: data.php:61
+#: data.php:102
 msgid "TSV"
 msgstr "TSV"
 
@@ -1194,7 +1309,7 @@ msgstr "
 msgid "Target Contact List"
 msgstr "–Ú“I‚̘A—æƒŠƒXƒg"
 
-#: data.php:322
+#: data.php:426
 #, php-format
 msgid "The %s file didn't contain any contacts."
 msgstr "ƒtƒ@ƒCƒ‹ %s ‚ɂ͘A—æ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚¹‚ñB"
@@ -1203,30 +1318,39 @@ msgstr "
 msgid "The VFS backend needs to be configured to enable attachment uploads."
 msgstr "VFS ƒoƒbƒNƒGƒ“ƒh‚Í“Y•t‚̃Aƒbƒvƒ[ƒh‚ª‹–‰Â‚³‚ê‚Ä‚¢‚邱‚Æ‚ª•K—v‚Å‚·B"
 
-#: lib/Driver.php:1411
+#: lib/Driver.php:2048
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr "ƒAƒhƒŒƒX’  \"%s\" ‚Í‘¶Ý‚µ‚Ü‚¹‚ñB"
 
-#: addressbooks.php:104
+#: addressbooks/create.php:32
 #, php-format
-msgid "The address book \"%s\" was created successfully."
+msgid "The address book \"%s\" has been created."
 msgstr "ƒAƒhƒŒƒX’  \"%s\" ‚ªì¬‚³‚ê‚Ü‚µ‚½B"
 
-#: addressbooks.php:130
+#: data.php:433
 #, php-format
-msgid "The address book \"%s\" was removed successfully."
-msgstr "ƒAƒhƒŒƒX’  \"%s\" ‚ªíœ‚³‚ê‚Ü‚µ‚½B"
+msgid "The address book could not be purged: %s"
+msgstr "ƒAƒhƒŒƒX’ ‚ðƒp[ƒW‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
 
-#: addressbooks.php:151
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "ƒAƒhƒŒƒX’ ‚É‚ ‚È‚½Ž©g‚̘A—æ‚Í‘¶Ý‚µ‚Ü‚¹‚ñB"
+
+#: addressbooks/delete.php:50
 #, php-format
-msgid "The address book \"%s\" was successfully updated."
-msgstr "ƒAƒhƒŒƒX’  \"%s\" ‚ªXV‚³‚ê‚Ü‚µ‚½B"
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "ƒAƒhƒŒƒX’  \"%s\" ‚͍폜‚³‚ê‚Ü‚µ‚½B"
 
-#: data.php:329
+#: addressbooks/edit.php:44
 #, php-format
-msgid "The address book could not be purged: %s"
-msgstr "ƒAƒhƒŒƒX’ ‚ðƒp[ƒW‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "ƒAƒhƒŒƒX’  \"%s\" ‚Í \"%s\" ‚ɕύX‚³‚ê‚Ü‚µ‚½B"
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "ƒAƒhƒŒƒX’  \"%s\" ‚Í•Û‘¶‚³‚ê‚Ü‚µ‚½B"
 
 #: vcard.php:19 contact.php:23 view.php:28
 msgid "The contact you requested does not exist."
@@ -1237,7 +1361,7 @@ msgstr "
 msgid "The file \"%s\" has been deleted."
 msgstr "ƒtƒ@ƒCƒ‹ \"%s\" ‚͍폜‚³‚ê‚Ü‚µ‚½B"
 
-#: data.php:302
+#: data.php:406
 msgid "The import can be finished despite the warnings."
 msgstr "ƒCƒ“ƒ|[ƒg‚ÍŒx‚ªo‚Ä‚àŠ®—¹‚µ‚Ü‚·B"
 
@@ -1260,12 +1384,18 @@ msgstr ""
 "ƒhƒŒƒX’ ‚Í—pˆÓ‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB‚»‚ꂪŠÔˆá‚¢‚¾‚ÆŽv‚¤‚È‚çAƒVƒXƒeƒ€ŠÇ—ŽÒ‚É‚¨–â"
 "‚¢‡‚킹‚­‚¾‚³‚¢B"
 
-#: search.php:123
+#: lib/Views/Browse.php:356
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "’†‚É‚Í %d Œ‚̘A—æ‚ª‚ ‚è‚Ü‚·‚ªA‚ ‚È‚½‚͉{——‚Å‚«‚Ü‚¹‚ñ"
+
+#: search.php:146
 #, php-format
 msgid "There was a problem creating the virtual address book: %s"
 msgstr "‰¼‘zƒAƒhƒŒƒX’ ‚̍쐬’†‚É–â‘肪‹N‚«‚Ü‚µ‚½: %s"
 
-#: lib/Forms/AddContact.php:90
+#: lib/Forms/AddContact.php:95
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
@@ -1273,16 +1403,11 @@ msgstr ""
 "˜A—æ‚̒ljÁ’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½BÚ×‚ɂ‚¢‚Ă̓VƒXƒeƒ€ŠÇ—ŽÒ‚É‚¨–â‚¢‡"
 "‚킹‚­‚¾‚³‚¢B"
 
-#: lib/Views/Browse.php:308
+#: lib/Views/Browse.php:318
 msgid "There was an error creating a new list."
 msgstr "V‹KƒŠƒXƒgì¬Žž‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B"
 
-#: addressbooks.php:96 addressbooks.php:102
-#, php-format
-msgid "There was an error creating this address book: %s"
-msgstr "ƒAƒhƒŒƒX’ ‚̍쐬’†‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚µ‚½: %s"
-
-#: lib/Views/Browse.php:218
+#: lib/Views/Browse.php:221
 #, php-format
 msgid "There was an error deleting \"%s\" from the source address book."
 msgstr "ƒAƒhƒŒƒX’ ‚©‚ç \"%s\" ‚ðíœ’†‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚µ‚½B"
@@ -1292,30 +1417,25 @@ msgstr "
 msgid "There was an error deleting this contact: %s"
 msgstr "‚±‚̘A—æ‚̍폜’†‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚µ‚½: %s"
 
-#: lib/Views/Browse.php:348
+#: lib/Views/Browse.php:362
 msgid "There was an error displaying the list"
 msgstr "ƒŠƒXƒg•\Ž¦’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½"
 
-#: data.php:356
+#: data.php:469
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "ƒf[ƒ^‚̃Cƒ“ƒ|[ƒg’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: %s"
 
-#: lib/api.php:678 lib/api.php:944
+#: lib/api.php:889 lib/api.php:1230
 msgid "There was an error importing the iCalendar data."
 msgstr "iCalendar ‚̃Cƒ“ƒ|[ƒg’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B"
 
-#: lib/api.php:227
+#: lib/api.php:258
 #, php-format
 msgid "There was an error removing an address book for %s"
 msgstr "ƒAƒhƒŒƒX’  %s ‚̍폜’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½"
 
-#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
-#, php-format
-msgid "There was an error removing this address book: %s"
-msgstr "ƒAƒhƒŒƒX’ ‚̍폜’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½F%s"
-
-#: lib/Forms/EditContact.php:86
+#: lib/Forms/EditContact.php:93
 msgid ""
 "There was an error saving the contact. Contact your system administrator for "
 "further help."
@@ -1323,12 +1443,7 @@ msgstr ""
 "˜A—æ‚Ì•Û‘¶’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½BÚ×‚ɂ‚¢‚Ă̓VƒXƒeƒ€ŠÇ—ŽÒ‚É‚¨–â‚¢‡"
 "‚킹‚­‚¾‚³‚¢B"
 
-#: addressbooks.php:149
-#, php-format
-msgid "There was an error updating this address book: %s"
-msgstr "ƒAƒhƒŒƒX’ ‚̍XV’†‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚µ‚½: %s"
-
-#: data.php:188
+#: data.php:292
 msgid "There were no addresses to export."
 msgstr "ƒGƒNƒXƒ|[ƒg‚·‚ׂ«ƒAƒhƒŒƒX’ ‚ª‚ ‚è‚Ü‚¹‚ñB"
 
@@ -1337,25 +1452,29 @@ msgstr "
 msgid "These address books will display in this order:"
 msgstr "‚±‚ê‚ç‚̃AƒhƒŒƒX’ ‚Í‚±‚̏‡˜‚Å•\Ž¦‚³‚ê‚Ü‚·F"
 
-#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
-msgid "These columns will display in this order:"
-msgstr "‚±‚ê‚ç‚Ì—ñ‚Í‚±‚̏‡˜‚Å•\Ž¦‚³‚ê‚Ü‚·F"
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "ƒAƒhƒŒƒX’ ‚ðíœ‚Å‚«‚Ü‚¹‚ñ"
 
-#: data.php:287
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "‚±‚̘A—æ‚Í‚ ‚È‚½Ž©g‚Ì‚Å‚ ‚é‚ÆŽw’肳‚ê‚Ü‚µ‚½B"
+
+#: data.php:391
 msgid "This file format is not supported."
 msgstr "‚±‚ÌŒ`Ž®‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB"
 
-#: lib/api.php:1399 lib/api.php:1412
+#: lib/api.php:1819 lib/api.php:1832
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr "‚±‚̐l•¨‚Í‚·‚łɃAƒhƒŒƒX’ ‚É %s ‚Æ‚µ‚Ä“o˜^‚³‚ê‚Ä‚¢‚Ü‚·B"
 
-#: config/prefs.php.dist:129
+#: config/prefs.php.dist:138
 msgid ""
 "This will be the default address book when adding or importing contacts."
 msgstr "˜A—æ‚ð’ljÁ‚·‚éÛƒfƒtƒHƒ‹ƒg‚ÅŽg—p‚³‚ê‚éƒAƒhƒŒƒX’ ‚Å‚·B"
 
-#: config/attributes.php.dist:221
+#: config/attributes.php.dist:241
 msgid "Time Zone"
 msgstr "ƒ^ƒCƒ€ƒ][ƒ“"
 
@@ -1363,80 +1482,132 @@ msgstr "
 msgid "Unable to find contact owner."
 msgstr "˜A—æ‚̏Š—LŽÒ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñB"
 
-#: lib/Driver.php:1333 lib/Turba.php:643
+#: lib/Driver.php:1968 lib/Turba.php:659
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "%s ‚Ì’è‹`‚ðƒ[ƒh‚Å‚«‚Ü‚¹‚ñB"
 
-#: lib/Driver/kolab.php:486
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "ƒAƒhƒŒƒX’  \"%s\"  ‚ð•Û‘¶‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
+
+#: lib/Driver/kolab.php:490
 msgid "Unable to search."
 msgstr "ŒŸõ‚Å‚«‚Ü‚¹‚ñB"
 
-#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:168
-msgid "Undo Changes"
-msgstr "•ÏX‚ðŽæ‚èÁ‚·"
-
-#: config/attributes.php.dist:340
+#: config/attributes.php.dist:391
 msgid "Unfiled"
 msgstr "–¢®—"
 
-#: lib/api.php:711 lib/api.php:814 lib/api.php:962
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr "ƒTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢ Content-TypeF%s"
 
-#: minisearch.php:76
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "\"%s\" ‚ð•\Ž¦"
+
+#: minisearch.php:72 minisearch.php:73
 msgid "View Contact"
 msgstr "˜A—æ‚ð•\Ž¦"
 
-#: config/prefs.php.dist:105
+#: config/prefs.php.dist:114
 msgid "View to display by default:"
 msgstr "ƒfƒtƒHƒ‹ƒg‚Ì•\Ž¦‰æ–Ê:"
 
-#: config/attributes.php.dist:312
+#: config/attributes.php.dist:506
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:344
 msgid "Website URL"
 msgstr "Web ‚Ì URL"
 
-#: config/attributes.php.dist:165
+#: config/attributes.php.dist:185
 msgid "Work Address"
 msgstr "‹Î–±æ‚̏ZŠ"
 
-#: config/attributes.php.dist:183
+#: config/attributes.php.dist:570
+msgid "Work Address Extended"
+msgstr "‹Î–±æ‚̏ZŠ"
+
+#: config/attributes.php.dist:203
 msgid "Work City"
 msgstr "‹Î–±æ‚ÌŽs"
 
-#: config/attributes.php.dist:201
+#: config/attributes.php.dist:221
 msgid "Work Country"
 msgstr "‹Î–±æ‚̍‘"
 
-#: config/attributes.php.dist:246
+#: config/attributes.php.dist:454
+msgid "Work Email"
+msgstr "‹Î–±æƒ[ƒ‹ƒAƒhƒŒƒX"
+
+#: config/attributes.php.dist:471
+msgid "Work Fax"
+msgstr "‹Î–±æ‚Ì FAX"
+
+#: config/attributes.php.dist:576
+msgid "Work Latitude"
+msgstr "‹Î–±æ‚̈ܓx"
+
+#: config/attributes.php.dist:581
+msgid "Work Longitude"
+msgstr "‹Î–±æ‚ÌŒo“x"
+
+#: config/attributes.php.dist:481
+msgid "Work Mobile Phone"
+msgstr "‹Î–±æ‚ÌŒg‘Ñ“d˜b"
+
+#: config/attributes.php.dist:266
 msgid "Work Phone"
 msgstr "‹Î–±æ‚Ì“d˜b”ԍ†"
 
-#: config/attributes.php.dist:177
+#: config/attributes.php.dist:197
 msgid "Work Post Office Box"
 msgstr "‹Î–±æ‚ÌŽ„‘” "
 
-#: config/attributes.php.dist:195
+#: config/attributes.php.dist:215
 msgid "Work Postal Code"
 msgstr "‹Î–±æ‚Ì—X•Ö”ԍ†"
 
-#: config/attributes.php.dist:189
+#: config/attributes.php.dist:209
 msgid "Work State/Province"
 msgstr "‹Î–±æ‚̏B^Œ§"
 
-#: config/attributes.php.dist:171
+#: config/attributes.php.dist:191
 msgid "Work Street Address"
 msgstr "‹Î–±æ‚̔Ԓn"
 
-#: data.php:251 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:271
+#: config/attributes.php.dist:496
+msgid "Work Video Call"
+msgstr "‹Î–±æ‚̃rƒfƒI’ʘb"
+
+#: config/attributes.php.dist:564
+msgid "Work Website URL"
+msgstr "‹Î–±æ‚Ì Web URL"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "‚ ‚È‚½‚Í‚±‚̃AƒhƒŒƒX’ ‚ð•ÏX‚Å‚«‚Ü‚¹‚ñB"
+
+#: data.php:355 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:281
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
 msgstr ""
 "‚ ‚È‚½‚Í \"%2$s\" ’†‚É %1$d ˆÈã‚̘A—æ‚ðì¬‚·‚邱‚Æ‚ð‹–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB"
 
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "‚ ‚È‚½‚Í‚±‚̃AƒhƒŒƒX’ ‚ðíœ‚Å‚«‚Ü‚¹‚ñB"
+
+#: lib/api.php:204
+msgid "You are not allowed to remove user data."
+msgstr "‚ ‚È‚½‚̓†[ƒUƒf[ƒ^‚ðÁ‹Ž‚Å‚«‚Ü‚¹‚ñB"
+
 #: lib/Driver/vbook.php:137
 msgid "You cannot add an entry to a virtual address book."
 msgstr "‰¼‘zƒAƒhƒŒƒX’ ‚ɍ€–ڂ̒ljÁ‚ª‚Å‚«‚Ü‚¹‚ñB"
@@ -1449,20 +1620,32 @@ msgstr "
 msgid "You cannot delete contacts from a virtual address book"
 msgstr "‰¼‘zƒAƒhƒŒƒX’ ‚©‚ç˜A—æ‚͍폜‚Å‚«‚Ü‚¹‚ñ"
 
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr "˜A—æ‚Í‚ ‚È‚½Ž©g‚Å‚ ‚é‚Æ‚ÍŽw’肳‚ê‚Ä‚¢‚Ü‚¹‚ñB"
+
 #: edit.php:66 view.php:38 lib/Views/EditContact.php:49
 #: lib/Views/DeleteContact.php:42
 msgid "You do not have permission to view this contact."
-msgstr "‚ ‚È‚½‚Í‚±‚̘A—æ‚ðŒ©‚éŒ —˜‚ª‚ ‚è‚Ü‚¹‚ñB"
+msgstr "‚ ‚È‚½‚É‚Í‚±‚̘A—æ‚ðŒ©‚éŒ ŒÀ‚ª‚ ‚è‚Ü‚¹‚ñB"
 
 #: vcard.php:37
 msgid "You do not have permission to view this object."
-msgstr "‚ ‚È‚½‚Í‚±‚̃IƒuƒWƒFƒNƒg‚ðŒ©‚éŒ —˜‚ª‚ ‚è‚Ü‚¹‚ñB"
+msgstr "‚ ‚È‚½‚É‚Í‚±‚̃IƒuƒWƒFƒNƒg‚ðŒ©‚éŒ ŒÀ‚ª‚ ‚è‚Ü‚¹‚ñB"
 
-#: addressbooks.php:59
-msgid "You do not have permissions to delete this source."
-msgstr "‚ ‚È‚½‚Í‚±‚̃\[ƒX‚ðíœ‚·‚錠—˜‚ª‚ ‚è‚Ü‚¹‚ñB"
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "‚ ‚È‚½‚É‚Í‚±‚̃AƒhƒŒƒX’ ‚ðíœ‚·‚錠ŒÀ‚ª‚ ‚è‚Ü‚¹‚ñB"
 
-#: lib/Driver/ldap.php:705
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"‚ ‚È‚½‚É‚Í‚ ‚È‚½‚̘A—æ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚éƒAƒhƒŒƒX’ ‚ðŒ©‚é[•ª‚ÈŒ ŒÀ‚ª‚ ‚è‚Ü‚¹"
+"‚ñB"
+
+#: lib/Driver/ldap.php:741
 msgid ""
 "You must have the Net_LDAP PEAR library installed to use the schema check "
 "function."
@@ -1470,7 +1653,7 @@ msgstr ""
 "ƒXƒL[ƒ}ŒŸ¸ŠÖ”‚ðŽg—p‚·‚邽‚ß‚É‚Í Net_LDAP PEAR ƒ‰ƒCƒuƒ‰ƒŠ‚ªƒCƒ“ƒXƒg[ƒ‹‚³‚ê"
 "‚Ä‚¢‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB"
 
-#: search.php:110
+#: search.php:133
 msgid "You must provide a name for virtual address books."
 msgstr "‰¼‘zƒAƒhƒŒƒX’ ‚Ì–¼‘O‚ðŽw’肵‚ĉº‚³‚¢B"
 
@@ -1491,11 +1674,24 @@ msgstr "
 msgid "You only have permission to view this contact."
 msgstr "‚ ‚È‚½‚É‚Í‚±‚̘A—æ‚ðŒ©‚é‚¾‚¯‚ÌŒ —˜‚µ‚©‚ ‚è‚Ü‚¹‚ñB"
 
-#: lib/Views/Browse.php:355
+#: lib/Views/Browse.php:369
 msgid "Your default address book is not browseable."
 msgstr "‚ ‚È‚½‚̃fƒtƒHƒ‹ƒg‚̃AƒhƒŒƒX’ ‚͉{——‚ª•s‰Â”\‚Å‚·B"
 
-#: lib/Turba.php:585
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "‚ ‚È‚½Ž©g‚̘A—æ"
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr "ƒAƒhƒŒƒX’ ‚É‚ ‚È‚½Ž©g‚̘A—æ‚ª‚ ‚è‚Ü‚¹‚ñB"
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[’l‚È‚µ]"
+
+#: lib/Turba.php:601
 msgid "_Browse"
 msgstr "_B‰{——"
 
@@ -1507,11 +1703,11 @@ msgstr "_C
 msgid "_Delete"
 msgstr "_Díœ"
 
-#: contact.php:82
+#: contact.php:91
 msgid "_Edit"
 msgstr "_E•ÒW"
 
-#: lib/Turba.php:594
+#: lib/Turba.php:610
 msgid "_Import/Export"
 msgstr "_IƒCƒ“/ƒAƒEƒg"
 
@@ -1519,15 +1715,15 @@ msgstr "_I
 msgid "_Lists"
 msgstr "_LƒŠƒXƒg"
 
-#: lib/Turba.php:582
+#: lib/Turba.php:598
 msgid "_My Address Books"
 msgstr "_MŽ„‚̃AƒhƒŒƒX’ "
 
-#: lib/Turba.php:588
+#: lib/Turba.php:604
 msgid "_New Contact"
 msgstr "_NV‹K˜A—æ"
 
-#: lib/Turba.php:599
+#: lib/Turba.php:615
 msgid "_Print"
 msgstr "_Pˆóü"
 
@@ -1535,56 +1731,65 @@ msgstr "_P
 msgid "_Remove from this list"
 msgstr "_RƒŠƒXƒg‚©‚çíœ"
 
-#: lib/Turba.php:590
+#: lib/Turba.php:606
 msgid "_Search"
 msgstr "_SŒŸõ"
 
-#: contact.php:79
+#: contact.php:88
 msgid "_View"
 msgstr "_V•\Ž¦"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "ascending"
 msgstr "¸‡"
 
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr ""
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr ""
+
 #: vcard.php:45
 msgid "contact"
 msgstr "contact"
 
-#: data.php:208 data.php:213 templates/data/export.inc:1
+#: data.php:312 data.php:317 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "contacts.csv"
 
-#: data.php:233
+#: data.php:337
 msgid "contacts.ldif"
 msgstr "contacts.ldif"
 
-#: data.php:218
+#: data.php:322
 msgid "contacts.tsv"
 msgstr "contacts.tsv"
 
-#: data.php:228
+#: data.php:332
 msgid "contacts.vcf"
 msgstr "contacts.vcf"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "descending"
 msgstr "~‡"
 
-#: config/attributes.php.dist:377
+#: config/attributes.php.dist:433
 msgid "female"
 msgstr "—«"
 
 #: lib/Block/tree_menu.php:38
 #, php-format
 msgid "in %s"
-msgstr "in %s"
+msgstr ""
 
-#: config/attributes.php.dist:377
+#: config/attributes.php.dist:433
 msgid "male"
 msgstr "’j«"
 
-#: config/prefs.php.dist:119
+#: config/prefs.php.dist:128
 msgid "no formatting"
 msgstr "‚»‚Ì‚Ü‚Ü•\Ž¦"
 
@@ -1600,7 +1805,7 @@ msgstr "
 msgid "to a different Address Book"
 msgstr "‘I‘ð‚³‚ê‚½ƒAƒhƒŒƒX’ ‚Ö"
 
-#: data.php:62 templates/browse/column_headers.inc:13
+#: data.php:103 templates/browse/column_headers.inc:14
 #: templates/data/import.inc:15 templates/data/export.inc:15
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index c177265..6238c56 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -1,14 +1,14 @@
 # Turba Dutch translation.
 # Copyright (C) 2001 Jan Kuipers.
-# Jan Kuipers <jrkuipers at lauwerscollege.nl>, 2001-2007.
-# Updated Han Spruyt 2005. 
+# Jan Kuipers <jrkuipers at lauwerscollege.nl>, 2001-2008.
+# Updated Han Spruyt 2005.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Turba H3 (2.2-cvs)\n"
+"Project-Id-Version: Turba H3 (2.2.2-cvs)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2007-11-21 19:43+0100\n"
-"PO-Revision-Date: 2007-11-22 00:16+0100\n"
+"POT-Creation-Date: 2008-08-08 23:32+0200\n"
+"PO-Revision-Date: 2008-09-18 18:10+0200\n"
 "Last-Translator: Jan Kuipers <jrkuipers at lauwerscollege.nl>\n"
 "Language-Team: Dutch <i18n at lists.horde.org>\n"
 "MIME-Version: 1.0\n"
@@ -24,7 +24,7 @@ msgstr "Voeg een IMSP adresboek toe"
 msgid " Delete IMSP Address Book"
 msgstr "Verwijder IMSP adresboek"
 
-#: data.php:351
+#: data.php:382
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr "%s bestaat al en is daarom niet geïmporteerd."
@@ -50,20 +50,25 @@ msgstr "\"%s\" werd niet gekopieerd, omdat het een adreslijst is."
 msgid "\"%s\" was not moved because it is a list."
 msgstr "\"%s\" werd niet verplaatst, omdat het een adreslijst is."
 
-#: config/prefs.php.dist:118
+#: config/prefs.php.dist:127
 msgid "\"Firstname Lastname\"  (ie. John Doe)"
 msgstr "\"Voornaam Achternaam\" (b.v. John Doe)"
 
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:126
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr "\"Achternaam, Voornaam\" (b.v. Doe, John)"
 
+#: lib/Driver.php:588
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s van %s"
+
 #: lib/Forms/AddContact.php:83
 #, php-format
 msgid "%s added."
 msgstr "%s toegevoegd."
 
-#: data.php:370
+#: data.php:410
 #, php-format
 msgid "%s file successfully imported."
 msgstr "%s bestand met succes geimporteerd."
@@ -73,13 +78,13 @@ msgstr "%s bestand met succes geimporteerd."
 msgid "%s to %s of %s"
 msgstr "%s tot %s van %s"
 
-#: lib/Turba.php:531
+#: lib/Turba.php:541
 #, php-format
 msgid "%s's Address Book"
 msgstr "%s's adresboek"
 
-#: lib/Block/minisearch.php:42
-msgid "A browser that supports iFrames is required"
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
 msgstr "Een browser met iFrame ondersteuning is vereist"
 
 #: view.php:54
@@ -97,11 +102,7 @@ msgstr "Contactpersoon toevoegen"
 
 #: templates/prefs/addressbookselect.inc:173
 msgid "Add address book"
-msgstr "Toevoegen adresboek"
-
-#: templates/prefs/columnselect.inc:237
-msgid "Add column"
-msgstr "Kolom toevoegen"
+msgstr "Adresboek toevoegen"
 
 #: lib/Forms/EditContact.php:34
 msgid "Add file"
@@ -111,15 +112,19 @@ msgstr "Bestand toevoegen"
 msgid "Add to"
 msgstr "Toevoegen aan"
 
-#: lib/Driver.php:1463
+#: lib/Driver.php:1973 lib/Driver/null.php:57
 msgid "Adding contacts is not available."
 msgstr "Toevoegen van adressen is niet beschikbaar."
 
-#: templates/addressbooks.inc:105
+#: templates/addressbook_list.php:16
 msgid "Address Book"
 msgstr "Adresboek"
 
-#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Adresboeklijst"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
 msgid "Address Book Listing"
 msgstr "Adresboek lijst"
 
@@ -127,24 +132,20 @@ msgstr "Adresboek lijst"
 msgid "Address Books"
 msgstr "Adresboeken"
 
-#: data.php:331
+#: data.php:362
 msgid "Address book successfully purged."
 msgstr "Adresboek met succes geleegd."
 
-#: templates/addressbooks.inc:80
-msgid "Address book to delete "
-msgstr "Adresboek om te verwijderen "
-
 #: templates/prefs/addressbookselect.inc:167
 #: templates/prefs/addressbookselect.inc:169
 msgid "Address books that will not be displayed:"
 msgstr "Deze adresboeken worden niet weergeven:"
 
-#: search.php:161 templates/browse/search.inc:47
+#: search.php:199 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Uitgebreid zoeken"
 
-#: config/attributes.php.dist:77
+#: config/attributes.php.dist:83
 msgid "Alias"
 msgstr "Alias"
 
@@ -152,11 +153,15 @@ msgstr "Alias"
 msgid "All"
 msgstr "Alle"
 
-#: lib/api.php:725
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr "Bestaat al"
 
-#: config/attributes.php.dist:95
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Feestdagen"
+
+#: config/attributes.php.dist:102
 msgid "Anniversary"
 msgstr "Feestdag"
 
@@ -169,15 +174,11 @@ msgstr "Weet u zeker dat u %s wilt verwijderen?"
 msgid "Are you sure that you want to delete the selected contacts?"
 msgstr "Weet u zeker dat u de geselecteerde adressen wilt verwijderen?"
 
-#: templates/addressbooks.inc:45
-msgid "Are you sure you want to delete the addressbook: "
-msgstr "Weet u zeker dat u het adresboek wilt verwijderen?"
-
-#: config/attributes.php.dist:368
+#: config/attributes.php.dist:400
 msgid "Assistant"
 msgstr "Assistent"
 
-#: search.php:158 templates/browse/search.inc:46
+#: search.php:196 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "Eenvoudig zoeken"
 
@@ -186,20 +187,15 @@ msgstr "Eenvoudig zoeken"
 msgid "Bind failed: (%s) %s"
 msgstr "Verbinding mislukt: (%s) %s"
 
-#: config/attributes.php.dist:89
+#: config/attributes.php.dist:95
 msgid "Birthday"
 msgstr "Verjaardag"
 
-#: lib/Driver.php:524
-#, php-format
-msgid "Birthday of %s"
-msgstr "Verjaardag van %s"
-
-#: lib/api.php:1255
+#: config/attributes.php.dist:99
 msgid "Birthdays"
 msgstr "Verjaardagen"
 
-#: contact.php:103 templates/browse/row.inc:6
+#: contact.php:128 templates/browse/row.inc:6
 msgid "Blank name"
 msgstr "Blanco naam"
 
@@ -207,15 +203,16 @@ msgstr "Blanco naam"
 msgid "Both"
 msgstr "Beide"
 
-#: templates/menu.inc:8
+#: templates/addressbook_list.php:29 templates/menu.inc:8
+#: addressbooks/index.php:39
 msgid "Browse"
 msgstr "Bladeren"
 
-#: config/attributes.php.dist:280
+#: config/attributes.php.dist:288
 msgid "Business Category"
 msgstr "Zakelijke categorie"
 
-#: data.php:60
+#: data.php:101
 msgid "CSV"
 msgstr "CSV"
 
@@ -223,44 +220,44 @@ msgstr "CSV"
 msgid "Can't add a group to itself."
 msgstr "Kan een groep niet aan zichzelf toevoegen."
 
-#: lib/Driver/kolab.php:620
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Afbreken"
+
+#: lib/Driver/kolab.php:624
 #, php-format
 msgid "Cannot delete all address book entries for %s"
 msgstr "Kan niet alle adresboekvermeldingen van %s verwijderen"
 
-#: config/attributes.php.dist:342
+#: config/attributes.php.dist:364
 msgid "Category"
 msgstr "Categorie"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 #, php-format
 msgid "Change %s sort to %s"
 msgstr "Wijzig %s sorteervolgorde in %s"
 
-#: templates/browse/column_headers.inc:7
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
+msgid "Change Permissions"
+msgstr "Rechten wijzigen"
+
+#: templates/browse/column_headers.inc:8
 msgid "Check All/None"
 msgstr "Controleer Alles/Geen"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check _All/None"
 msgstr "Controleer _Alles/Geen"
 
-#: config/attributes.php.dist:107
+#: config/attributes.php.dist:115
 msgid "Children"
 msgstr "Children"
 
-#: templates/addressbooks.inc:60
-msgid "Choose a name"
-msgstr "Kies een naam"
-
 #: lib/Forms/AddContact.php:36
 msgid "Choose an address book"
 msgstr "Kies een adresboek"
 
-#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
-msgid "Choose an address book:"
-msgstr "Kies een adresboek:"
-
 #: templates/prefs/addressbookselect.inc:163
 msgid "Choose which address books to display, and in what order:"
 msgstr "Selecteer de weer te geven adresboeken en zet ze in volgorde."
@@ -269,11 +266,15 @@ msgstr "Selecteer de weer te geven adresboeken en zet ze in volgorde."
 msgid "Choose which address books to use."
 msgstr "Selecteer de te gebruiken adresboeken"
 
-#: templates/prefs/columnselect.inc:227
-msgid "Choose which columns to display and in what order:"
-msgstr "Selecteer de weer te geven kolommen en zet ze in volgorde."
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+"Klik een adresboek om de kolommen te sorteren. Sleep de kolommen om te "
+"herschikken. Vink een kolom aan om deze aan te zetten."
 
-#: templates/block/minisearch.inc:27
+#: templates/block/minisearch.inc:26
 msgid "Close"
 msgstr "Sluiten"
 
@@ -285,10 +286,6 @@ msgstr "Zoeken afsluiten"
 msgid "Column Options"
 msgstr "Kolomopties"
 
-#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
-msgid "Columns that will not be displayed:"
-msgstr "Niet weer te  geven kolommen:"
-
 #: templates/data/import.inc:13 templates/data/export.inc:12
 msgid "Comma separated values"
 msgstr "Komma gescheiden waarden"
@@ -297,22 +294,59 @@ msgstr "Komma gescheiden waarden"
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "Komma gescheiden waarden (Microsoft Outlook)"
 
-#: config/sources.php.dist:228 config/sources.php.dist:901
+#: config/attributes.php.dist:498
+msgid "Common Address Extended"
+msgstr "Adres uitgebreid (algemeen)"
+
+#: config/attributes.php.dist:516
+msgid "Common City"
+msgstr "Woonplaats (algemeen)"
+
+#: config/attributes.php.dist:534
+msgid "Common Country"
+msgstr "Land (algemeen)"
+
+#: config/attributes.php.dist:442
+msgid "Common Phone"
+msgstr "Tel.nr. (algemeen)"
+
+#: config/attributes.php.dist:510
+msgid "Common Post Office Box"
+msgstr "Postbus (algemeen)"
+
+#: config/attributes.php.dist:528
+msgid "Common Postal Code"
+msgstr "Postcode (algemeen)"
+
+#: config/attributes.php.dist:522
+msgid "Common State/Province"
+msgstr "Staat of provincie (algemeen)"
+
+#: config/attributes.php.dist:504
+msgid "Common Street"
+msgstr "Straat (algemeen)"
+
+#: config/attributes.php.dist:467
+msgid "Common Video Call"
+msgstr "Videogesprek (algemeen)"
+
+#: config/sources.php.dist:243 config/sources.php.dist:923
 msgid "Communications"
-msgstr "Communicaties"
+msgstr "Communicatie"
 
-#: config/attributes.php.dist:286
+#: config/attributes.php.dist:294
 msgid "Company"
 msgstr "Bedrijf"
 
-#: config/attributes.php.dist:215
+#: config/attributes.php.dist:223
 msgid "Company Address"
 msgstr "Bedrijfsadres"
 
-#: scripts/import_squirrelmail_abook.php:112 lib/api.php:394 lib/api.php:439
-#: lib/api.php:490 lib/api.php:525 lib/api.php:574 lib/api.php:620
-#: lib/api.php:661 lib/api.php:778 lib/api.php:865 lib/api.php:923
-#: lib/api.php:1012 lib/api.php:1231 lib/api.php:1289 lib/api.php:1371
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1067 lib/api.php:1138
+#: lib/api.php:1205 lib/api.php:1325 lib/api.php:1558 lib/api.php:1635
+#: lib/api.php:1786
 #, php-format
 msgid "Connection failed: %s"
 msgstr "Verbinding mislukt: %s"
@@ -325,15 +359,15 @@ msgstr "Verbinding mislukt"
 msgid "Contact Search"
 msgstr "Adressen zoeken"
 
-#: config/sources.php.dist:833
+#: config/sources.php.dist:852
 msgid "Contacts"
-msgstr "Contactpersonen"
+msgstr "Adressen"
 
 #: templates/list/numPager.inc:3
 msgid "Contacts displayed:"
 msgstr "Weergegeven adressen:"
 
-#: lib/Views/Browse.php:336
+#: lib/Views/Browse.php:339
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "Adressen in adreslijst: %s"
@@ -342,46 +376,51 @@ msgstr "Adressen in adreslijst: %s"
 msgid "Copy"
 msgstr "Kopiëren"
 
-#: templates/addressbooks.inc:69
+#: lib/Forms/CreateAddressBook.php:39
 msgid "Create"
 msgstr "Maken"
 
-#: templates/addressbooks.inc:56
+#: lib/Forms/CreateAddressBook.php:34
 msgid "Create Address Book"
 msgstr "Adresboek maken"
 
-#: lib/ListView.php:443
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Een nieuw adresboek maken"
+
+#: lib/ListView.php:448
 msgid "Create a new Contact List in:"
 msgstr "Maak een nieuwe adreslijst in:"
 
-#: lib/Views/Contact.php:74
+#: lib/Views/Contact.php:80
 msgid "Created"
 msgstr "Gemaakt"
 
-#: contact.php:86
+#: contact.php:95
 msgid "De_lete"
 msgstr "Verwi_jderen"
 
-#: lib/Views/DeleteContact.php:58 templates/addressbooks.inc:94
-#: templates/browse/actions.inc:3
+#: lib/Forms/DeleteAddressBook.php:45 lib/Views/DeleteContact.php:58
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: addressbooks/index.php:42
 msgid "Delete"
 msgstr "Verwijderen"
 
-#: lib/Views/DeleteContact.php:28
+#: lib/Forms/DeleteAddressBook.php:40 lib/Views/DeleteContact.php:28
 #, php-format
 msgid "Delete %s"
 msgstr "Verwijder %s"
 
-#: templates/addressbooks.inc:76
-msgid "Delete Address Book"
-msgstr "Adresboek verwijderen"
+#: lib/api.php:644
+msgid "Delete denied."
+msgstr "Verwijderen geweigerd."
 
-#: lib/Driver/ldap.php:285
+#: lib/Driver/ldap.php:321
 #, php-format
 msgid "Delete failed: (%s) %s"
 msgstr "Verwijderen mislukt: (%s) %s"
 
-#: lib/Driver.php:1471
+#: lib/Driver.php:1981 lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
 msgstr "Verwijderen van adressen is niet beschikbaar."
 
@@ -389,11 +428,11 @@ msgstr "Verwijderen van adressen is niet beschikbaar."
 msgid "Deletion failed"
 msgstr "Verwijderen mislukt"
 
-#: config/attributes.php.dist:292
+#: config/attributes.php.dist:300
 msgid "Department"
 msgstr "Afdeling"
 
-#: templates/addressbooks.inc:138
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
 msgid "Description"
 msgstr "Beschrijving"
 
@@ -414,43 +453,42 @@ msgstr "Weergaveopties"
 msgid "Download"
 msgstr "Downloaden"
 
-#: templates/browse/row.inc:13
+#: templates/browse/row.inc:23 templates/browse/row.inc:24
+#: templates/browse/contactrow.inc:25
 msgid "Download vCard"
 msgstr "Download vCard"
 
-#: templates/addressbooks.inc:123 templates/browse/row.inc:21
-#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+#: templates/addressbook_list.php:31 templates/browse/row.inc:36
+#: templates/browse/row.inc:37 templates/browse/column_headers.inc:11
+#: templates/browse/actions.inc:6 templates/browse/contactrow.inc:33
+#: addressbooks/index.php:40
 msgid "Edit"
 msgstr "Bewerken"
 
-#: edit.php:91
+#: edit.php:91 templates/browse/contactrow.inc:33
 #, php-format
 msgid "Edit \"%s\""
 msgstr "\"%s\" bewerken"
 
-#: lib/Views/EditContact.php:35
+#: lib/Forms/EditAddressBook.php:40 lib/Views/EditContact.php:35
 #, php-format
 msgid "Edit %s"
 msgstr "%s bewerken"
 
-#: templates/addressbooks.inc:100
-msgid "Edit Address Books"
-msgstr "Adresboeken bewerken"
-
-#: config/attributes.php.dist:229
+#: config/attributes.php.dist:237
 msgid "Email"
 msgstr "E-mail"
 
-#: config/attributes.php.dist:235
+#: config/attributes.php.dist:243
 msgid "Emails"
 msgstr "E-mails"
 
-#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
 #, php-format
 msgid "Error adding %d contact(s) to list."
 msgstr "Fout bij toevoegen van %d adressen aan adreslijst."
 
-#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
 msgstr ""
@@ -478,7 +516,7 @@ msgstr ""
 "Een fout bij het verwijderen van %d van %d gevraagde adres(sen) uit "
 "adreslijst."
 
-#: lib/api.php:531
+#: lib/api.php:707
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr "Een fout bij het doorzoeken van het adresboek: %s"
@@ -499,26 +537,26 @@ msgstr "Alleen de geselecteerde adressen exporteren."
 msgid "Export the following address book completely."
 msgstr "Het volgende adresboek volledig exporteren."
 
-#: add.php:42 search.php:86 data.php:143 data.php:242 data.php:320
+#: add.php:42 search.php:121 data.php:174 data.php:273 data.php:351
 #: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
 msgstr "Toegang tot adresboek mislukt: %s"
 
-#: lib/Views/Browse.php:208
+#: lib/Views/Browse.php:211
 #, php-format
 msgid "Failed to add %s to %s: %s"
 msgstr "Toevoegen van %s aan %s mislukt: %s"
 
-#: lib/Views/Browse.php:342
+#: lib/Views/Browse.php:345
 msgid "Failed to browse list"
 msgstr "Bladeren in lijst mislukt"
 
-#: lib/Views/Browse.php:369
+#: lib/Views/Browse.php:376
 msgid "Failed to browse the directory"
 msgstr "Bladeren in directory mislukt"
 
-#: lib/Driver/ldap.php:318
+#: lib/Driver/ldap.php:354
 #, php-format
 msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
 msgstr ""
@@ -529,24 +567,24 @@ msgstr ""
 msgid "Failed to find object to be added: %s"
 msgstr "Vinden van toe te voegen object mislukt: %s"
 
-#: search.php:152
+#: search.php:190
 msgid "Failed to search the address book"
 msgstr "Doorzoeken van het adresboek mislukt"
 
-#: data.php:158
+#: data.php:189
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "Doorzoeken van directory %s mislukt."
 
-#: config/sources.php.dist:532
+#: config/sources.php.dist:551
 msgid "Favourite Recipients"
 msgstr "Favoriete ontvangers"
 
-#: config/attributes.php.dist:256
+#: config/attributes.php.dist:264
 msgid "Fax"
 msgstr "Fax"
 
-#: lib/Forms/Contact.php:40
+#: lib/Forms/Contact.php:41
 msgid "Files"
 msgstr "Bestanden"
 
@@ -554,15 +592,15 @@ msgstr "Bestanden"
 msgid "Find"
 msgstr "Vinden"
 
-#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
 msgid "Finish"
 msgstr "Afsluiten"
 
-#: config/attributes.php.dist:47
+#: config/attributes.php.dist:53
 msgid "First Name"
 msgstr "Voornaam"
 
-#: config/attributes.php.dist:318
+#: config/attributes.php.dist:326
 msgid "Freebusy URL"
 msgstr "Freebusy URL"
 
@@ -570,51 +608,83 @@ msgstr "Freebusy URL"
 msgid "From"
 msgstr "Van"
 
-#: config/attributes.php.dist:374
+#: config/attributes.php.dist:406
 msgid "Gender"
 msgstr "Geslacht"
 
-#: config/sources.php.dist:758
+#: config/sources.php.dist:777
 msgid "Global Address Book"
 msgstr "Globale adresboek"
 
-#: templates/browse/row.inc:39
+#: templates/browse/row.inc:57 templates/browse/contactrow.inc:44
 msgid "Group"
 msgstr "Groep"
 
-#: config/attributes.php.dist:115
+#: config/attributes.php.dist:123
 msgid "Home Address"
 msgstr "Adres (privé)"
 
-#: config/attributes.php.dist:133
+#: config/attributes.php.dist:568
+msgid "Home Address Extended"
+msgstr "Adres uitgebreid (privé)"
+
+#: config/attributes.php.dist:141
 msgid "Home City"
 msgstr "Woonplaats (privé)"
 
-#: config/attributes.php.dist:151
+#: config/attributes.php.dist:159
 msgid "Home Country"
 msgstr "Land (privé)"
 
-#: config/attributes.php.dist:241
+#: config/attributes.php.dist:436
+msgid "Home Email"
+msgstr "E-mail (privé)"
+
+#: config/attributes.php.dist:452
+msgid "Home Fax"
+msgstr "Fax (privé)"
+
+#: config/attributes.php.dist:574
+msgid "Home Latitude"
+msgstr "Breedtegraad (privé)"
+
+#: config/attributes.php.dist:579
+msgid "Home Longitude"
+msgstr "Lengtegraad (privé)"
+
+#: config/attributes.php.dist:462
+msgid "Home Mobile Phone"
+msgstr "Mobiele telefoon (privé)"
+
+#: config/attributes.php.dist:249
 msgid "Home Phone"
 msgstr "Tel.nr. (privé)"
 
-#: config/attributes.php.dist:127
+#: config/attributes.php.dist:135
 msgid "Home Post Office Box"
 msgstr "Postbus (privé)"
 
-#: config/attributes.php.dist:145
+#: config/attributes.php.dist:153
 msgid "Home Postal Code"
 msgstr "Postcode (privé)"
 
-#: config/attributes.php.dist:139
+#: config/attributes.php.dist:147
 msgid "Home State/Province"
 msgstr "Staat of provincie (privé)"
 
-#: config/attributes.php.dist:121
+#: config/attributes.php.dist:129
 msgid "Home Street Address"
-msgstr "Thuisadres"
+msgstr "Straat (privé)"
+
+#: config/attributes.php.dist:477
+msgid "Home Video Call"
+msgstr "Videogesprek (privé)"
 
-#: config/sources.php.dist:649
+#: config/attributes.php.dist:562
+msgid "Home Website URL"
+msgstr "Website URL (privé)"
+
+#: config/sources.php.dist:668
 msgid "IMSP"
 msgstr "IMSP"
 
@@ -623,54 +693,54 @@ msgstr "IMSP"
 msgid "Import Address Book, Step %d"
 msgstr "Adresboek importeren, stap %d"
 
-#: data.php:388
+#: data.php:428
 msgid "Import/Export Address Books"
 msgstr "Adresboeken importeren/exporteren"
 
-#: config/attributes.php.dist:350
+#: config/attributes.php.dist:382
 msgid "Initials"
 msgstr "Initialen"
 
-#: config/attributes.php.dist:356
+#: config/attributes.php.dist:388
 msgid "Instant Messenger"
 msgstr "Instant Messenger"
 
-#: lib/api.php:773 lib/api.php:860
+#: lib/api.php:999 lib/api.php:1133
 msgid "Invalid ID"
 msgstr "Ongeldig ID"
 
-#: scripts/import_squirrelmail_abook.php:105 lib/api.php:306 lib/api.php:520
-#: lib/api.php:569 lib/api.php:615 lib/api.php:656 lib/api.php:769
-#: lib/api.php:856 lib/api.php:913 lib/api.php:1354
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1129 lib/api.php:1195 lib/api.php:1769
 #, php-format
 msgid "Invalid address book: %s"
 msgstr "Ongeldig adresboek: %s"
 
-#: lib/api.php:1358 lib/api.php:1432 lib/api.php:1489
+#: lib/api.php:1199
+msgid "Invalid contact unique ID"
+msgstr "Ongeldig adres uniek ID"
+
+#: lib/api.php:1773 lib/api.php:1859 lib/api.php:1920
 msgid "Invalid email"
 msgstr "Ongeldige e-mail"
 
-#: lib/api.php:1366
+#: lib/api.php:1781
 msgid "Invalid entry"
 msgstr "Ongeldige invoer"
 
-#: lib/Driver/ldap.php:281
+#: lib/Driver/ldap.php:317
 msgid "Invalid key specified."
 msgstr "Ongeldige sleutel opgegeven."
 
-#: lib/api.php:1362
+#: lib/api.php:1777
 msgid "Invalid name"
 msgstr "Ongeldige naam"
 
-#: lib/api.php:917
-msgid "Invalid objectId"
-msgstr "Ongeldig objectId"
-
-#: config/attributes.php.dist:268
+#: config/attributes.php.dist:276
 msgid "Job Title"
 msgstr "Beroepstitel"
 
-#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
 #, php-format
 msgid "Key for saving must be a UID not %s!"
 msgstr "Sleutel voor opslaan dient een UID te zijn, geen %s!"
@@ -682,51 +752,63 @@ msgstr ""
 "LDAP ondersteuning is vereist, maar de LDAP module is niet beschikbaar of "
 "niet geladen."
 
-#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
 msgid "LDIF Address Book"
 msgstr "LDIF Adresboek"
 
-#: config/attributes.php.dist:380
+#: config/attributes.php.dist:412
 msgid "Language"
 msgstr "Taal"
 
-#: lib/Views/Contact.php:80
+#: lib/Views/Contact.php:91
 msgid "Last Modified"
 msgstr "Laatst gewijzigd"
 
-#: config/attributes.php.dist:53
+#: config/attributes.php.dist:59
 msgid "Last Name"
 msgstr "Achternaam"
 
-#: config/attributes.php.dist:386
+#: config/attributes.php.dist:418
 msgid "Latitude"
 msgstr "Breedtegraad"
 
-#: templates/browse/column_headers.inc:16
+#: templates/browse/column_headers.inc:17
 msgid "List"
 msgstr "Adreslijst"
 
-#: config/sources.php.dist:223 config/sources.php.dist:897
+#: config/sources.php.dist:238 config/sources.php.dist:919
 msgid "Location"
 msgstr "Locatie"
 
-#: config/attributes.php.dist:391
+#: config/attributes.php.dist:423
 msgid "Longitude"
 msgstr "Lengtegraad"
 
-#: config/attributes.php.dist:362
+#: lib/api.php:616
+msgid "Malformed request."
+msgstr "Onjuist verzoek."
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
+msgid "Manage Address Books"
+msgstr "Adresboeken beheren"
+
+#: config/attributes.php.dist:394
 msgid "Manager"
 msgstr "Manager"
 
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Markeer dit als uw eigen adres"
+
 #: templates/browse/search.inc:109
 msgid "Matching"
 msgstr "overeenkomend met"
 
-#: lib/api.php:281
+#: lib/api.php:329
 msgid "Maximum Number of Contacts"
 msgstr "Maximum aantal adressen"
 
-#: config/prefs.php.dist:88
+#: config/prefs.php.dist:97
 msgid "Maximum number of pages"
 msgstr "Maximum aantal pagina's."
 
@@ -734,19 +816,19 @@ msgstr "Maximum aantal pagina's."
 msgid "Menu List"
 msgstr "Menulijst"
 
-#: config/attributes.php.dist:59
+#: config/attributes.php.dist:65
 msgid "Middle Names"
 msgstr "Middelnamen"
 
-#: lib/Driver/ldap.php:311
+#: lib/Driver/ldap.php:347
 msgid "Missing DN in LDAP source configuration."
 msgstr "Ontbrekende DN in de LDAP bronconfiguratie."
 
-#: config/attributes.php.dist:251
+#: config/attributes.php.dist:259
 msgid "Mobile Phone"
 msgstr "Mobiele telefoon"
 
-#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
 #, php-format
 msgid "Modify failed: (%s) %s"
 msgstr "Wijzigen mislukt: (%s) %s"
@@ -755,7 +837,7 @@ msgstr "Wijzigen mislukt: (%s) %s"
 msgid "More Options..."
 msgstr "Meer opties..."
 
-#: lib/api.php:1474
+#: lib/api.php:1897
 msgid "More than 1 entry found"
 msgstr "Meer dan 1 invoer gevonden"
 
@@ -763,36 +845,31 @@ msgstr "Meer dan 1 invoer gevonden"
 msgid "Move"
 msgstr "Verplaatsen"
 
-#: templates/prefs/columnselect.inc:248
 #: templates/prefs/addressbookselect.inc:184
 msgid "Move left"
 msgstr "Naar links"
 
-#: templates/prefs/columnselect.inc:250
 #: templates/prefs/addressbookselect.inc:186
 msgid "Move right"
 msgstr "Naar rechts"
 
-#: data.php:63 templates/data/import.inc:16
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr "Mulberry adresboek"
 
-#: lib/api.php:1390
+#: lib/api.php:1805
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
 msgstr ""
 "Meerdere personen met adres [%s], maar geen met naam [%s] die al bestaat"
 
-#: config/sources.php.dist:161
+#: config/sources.php.dist:162
 msgid "My Address Book"
 msgstr "Mijn adresboek"
 
-#: addressbooks.php:174
-msgid "My Address Books"
-msgstr "Mijn adresboeken"
-
-#: templates/addressbooks.inc:130 config/attributes.php.dist:41
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
 msgid "Name"
 msgstr "Naam"
 
@@ -800,19 +877,19 @@ msgstr "Naam"
 msgid "Name Format"
 msgstr "Naamformaat"
 
-#: config/attributes.php.dist:65
+#: config/attributes.php.dist:71
 msgid "Name Prefixes"
-msgstr "Naamvoorvoegsels"
+msgstr "Voorvoegsels"
 
-#: config/attributes.php.dist:71
+#: config/attributes.php.dist:77
 msgid "Name Suffixes"
-msgstr "Naamachtervoegsels"
+msgstr "Achtervoegsels"
 
 #: templates/browse/search_vbook.inc:6
 msgid "Name:"
 msgstr "Naam:"
 
-#: add.php:70 lib/Block/tree_menu.php:28
+#: add.php:70 lib/Block/tree_menu.php:27
 msgid "New Contact"
 msgstr "Nieuw adres"
 
@@ -821,48 +898,49 @@ msgstr "Nieuw adres"
 msgid "Next"
 msgstr "Volgende"
 
-#: config/attributes.php.dist:83
+#: config/attributes.php.dist:89
 msgid "Nickname"
 msgstr "Bijnaam"
 
-#: lib/api.php:1477 lib/api.php:1526
+#: lib/api.php:1900 lib/api.php:1960
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "Geen %s invoer gevonden voor %s"
 
-#: data.php:52
+#: data.php:93
 msgid ""
 "No Address Books are currently available. Import and Export is disabled."
 msgstr ""
 "Er zijn momenteel geen adresboeken beschikbaar. Importeren en exporteren is "
 "uitgeschakeld."
 
-#: search.php:72
+#: search.php:107
 msgid "No Address Books are currently available. Searching is disabled."
 msgstr ""
 "Er zijn momenteel geen adresboeken beschikbaar. Zoeken is uitgeschakeld."
 
-#: lib/api.php:1441
-msgid "No address books found."
-msgstr "Geen adresboeken gevonden."
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1124 lib/api.php:1190
+msgid "No address book specified"
+msgstr "Geen adresboek opgegeven"
 
-#: minisearch.php:81
+#: minisearch.php:80
 msgid "No contacts found"
 msgstr "Geen adressen gevonden"
 
-#: templates/browse/column_headers.inc:43
+#: templates/browse/column_headers.inc:44
 msgid "No contacts match the current filter."
 msgstr "Geen adressen die overeen komen met de huidige criteria."
 
-#: lib/ListView.php:251
+#: lib/ListView.php:255
 msgid "No matching contacts"
 msgstr "Geen overeenkomende adressen"
 
-#: lib/Driver/favourites.php:120
+#: lib/Driver/favourites.php:124
 msgid "No source for favourite recipients exists."
 msgstr "Er bestaat geen bron voor favoriete ontvangers."
 
-#: lib/api.php:682 lib/api.php:949
+#: lib/api.php:893 lib/api.php:1236
 msgid "No vCard data was found."
 msgstr "Geen vCard data gevonden."
 
@@ -879,23 +957,28 @@ msgstr "Niet gevonden"
 msgid "Not found"
 msgstr "Niet gevonden"
 
-#: config/attributes.php.dist:306
+#: config/attributes.php.dist:314
 msgid "Notes"
 msgstr "Notities"
 
-#: config/prefs.php.dist:96
+#: config/prefs.php.dist:105
 msgid "Number of items per page"
 msgstr "Aantal onderdelen per pagina"
 
-#: lib/api.php:789 lib/api.php:929
+#: lib/api.php:1042 lib/api.php:1261
 msgid "Object not found"
 msgstr "Object niet gevonden."
 
-#: config/attributes.php.dist:274
+#: lib/Driver/kolab.php:1184
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Object met UID %s bestaat niet!"
+
+#: config/attributes.php.dist:282
 msgid "Occupation"
 msgstr "Beroep"
 
-#: config/attributes.php.dist:298
+#: config/attributes.php.dist:306
 msgid "Office"
 msgstr "Kantoor"
 
@@ -909,23 +992,27 @@ msgstr ""
 "verwijderd. Wanneer dit niet is wat u wilt, dient u uw selectie te wijzigen "
 "in \"Geen\"."
 
-#: lib/api.php:957
+#: lib/api.php:1244
 msgid "Only one vcard supported."
 msgstr "Slechts één vcard ondersteund."
 
-#: config/sources.php.dist:230 config/sources.php.dist:903
+#: config/sources.php.dist:245 config/sources.php.dist:925
 msgid "Organization"
 msgstr "Organisatie"
 
-#: config/sources.php.dist:231 config/sources.php.dist:905
+#: config/sources.php.dist:246 config/sources.php.dist:927
 msgid "Other"
 msgstr "Andere"
 
-#: config/attributes.php.dist:324
+#: config/attributes.php.dist:332
 msgid "PGP Public Key"
 msgstr "Openbare PGP sleutel"
 
-#: config/attributes.php.dist:261
+#: config/attributes.php.dist:493
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:269
 msgid "Pager"
 msgstr "Pager"
 
@@ -933,20 +1020,16 @@ msgstr "Pager"
 msgid "Permanently delete this contact?"
 msgstr "Dit adres definitief verwijderen?"
 
-#: deletefile.php:36 lib/api.php:665 lib/api.php:782 lib/api.php:869
-#: lib/api.php:1159 lib/api.php:1375 lib/Driver.php:676 lib/Driver/sql.php:481
+#: deletefile.php:36 lib/api.php:870 lib/api.php:1790 lib/Driver.php:771
+#: lib/Driver/sql.php:486
 msgid "Permission denied"
 msgstr "Toegang geweigerd"
 
-#: templates/addressbooks.inc:120
-msgid "Permissions"
-msgstr "Rechten"
-
-#: config/sources.php.dist:221 config/sources.php.dist:893
+#: config/sources.php.dist:235 config/sources.php.dist:915
 msgid "Personal"
 msgstr "Persoonlijk"
 
-#: data.php:64 templates/data/import.inc:17
+#: data.php:105 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr "Pine adresboek"
 
@@ -955,37 +1038,42 @@ msgid "Please name the new contact list:"
 msgstr "Naam voor de nieuwe adreslijst:"
 
 #: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:166
+#: lib/Forms/EditContact.php:167
 msgid "Previous"
 msgstr "Vorige"
 
-#: lib/Driver/ldap.php:162
+#: lib/Driver/ldap.php:197
 #, php-format
 msgid "Query failed: (%s) %s"
 msgstr "Query mislukt: (%s) %s"
 
-#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
 #, php-format
 msgid "Read failed: (%s) %s"
 msgstr "Lezen mislukt: (%s) %s"
 
-#: lib/Driver.php:1455
+#: lib/Driver.php:1965 lib/Driver/null.php:52
 msgid "Reading contacts is not available."
 msgstr "Lezen van adressen is niet beschikbaar."
 
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Het adresboek \"%s\" echt verwijderen? Dit kan niet ongedaan worden gemaakt "
+"en alle adressen in dit adresboek zullen definitief worden verwijderd."
+
 #: templates/prefs/addressbookselect.inc:175
 msgid "Remove address book"
 msgstr "Adresboek verwijderen"
 
-#: templates/prefs/columnselect.inc:239
-msgid "Remove column"
-msgstr "Kolom verwijderen"
-
 #: templates/browse/actions.inc:3
 msgid "Remove from this list"
 msgstr "Uit deze lijst verwijderen."
 
-#: lib/Driver.php:1493
+#: lib/Driver.php:2003
 msgid ""
 "Removing user data is not supported in the current address book storage "
 "driver."
@@ -1002,7 +1090,7 @@ msgstr ""
 "<strong>Waarschuwing: Dit verwijdert alle invoer uit uw huidige adresboek.</"
 "strong>"
 
-#: lib/Driver.php:573
+#: lib/Driver.php:665
 msgid "Requested object not found."
 msgstr "Aangevraagd object niet gevonden."
 
@@ -1010,16 +1098,20 @@ msgstr "Aangevraagd object niet gevonden."
 msgid "Reset to Defaults"
 msgstr "Herstel standaardinstellingen"
 
-#: config/attributes.php.dist:330
+#: config/attributes.php.dist:338
 msgid "S/MIME Public Certificate"
 msgstr "Openbaar S/MIME certificaat"
 
+#: config/attributes.php.dist:487
+msgid "SIP"
+msgstr "SIP"
+
 #: lib/Driver/ldap.php:84
 #, php-format
 msgid "STARTTLS failed: (%s) %s"
 msgstr "STARTTLS mislukt: (%s) %s"
 
-#: lib/Forms/EditContact.php:26 templates/addressbooks.inc:147
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
 msgid "Save"
 msgstr "Opslaan"
 
@@ -1027,42 +1119,34 @@ msgstr "Opslaan"
 msgid "Save search as a virtual address book?"
 msgstr "Zoekopdracht bewaren als virtueel adresboek?"
 
-#: lib/Driver.php:1481
+#: lib/Driver.php:1991 lib/Driver/null.php:67
 msgid "Saving contacts is not available."
 msgstr "Opslaan van adressen is niet beschikbaar."
 
-#: lib/Block/tree_menu.php:59 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:58 templates/block/minisearch.inc:25
 #: templates/browse/header.inc:3 templates/browse/search.inc:111
-#: templates/browse/search.inc:119 config/prefs.php.dist:107
+#: templates/browse/search.inc:119 config/prefs.php.dist:116
 msgid "Search"
 msgstr "Zoeken"
 
-#: lib/api.php:1236
+#: lib/api.php:1563
 msgid "Search failed"
 msgstr "Zoeken mislukt"
 
-#: lib/api.php:1380 lib/api.php:1386 lib/api.php:1395 lib/api.php:1408
+#: lib/api.php:1795 lib/api.php:1801 lib/api.php:1810 lib/api.php:1823
 #, php-format
 msgid "Search failed: %s"
 msgstr "Zoeken mislukt: %s"
 
-#: templates/block/minisearch.inc:24
+#: templates/block/minisearch.inc:23
 msgid "Search for: "
 msgstr "Zoeken naar: "
 
-#: lib/Driver.php:1440
+#: lib/Driver.php:1950 lib/Driver/null.php:47
 msgid "Searching is not available."
 msgstr "Zoeken is niet beschikbaar."
 
-#: templates/addressbooks.inc:84
-msgid "Select an address book to delete"
-msgstr "Selecteer een adresboek om te verwijderen"
-
-#: templates/addressbooks.inc:109
-msgid "Select an address book to edit"
-msgstr "Selecteer een adresbeok om te bewerken"
-
-#: templates/browse/row.inc:30
+#: templates/browse/row.inc:48
 msgid "Select contact"
 msgstr "Selecteer adressen"
 
@@ -1074,6 +1158,14 @@ msgstr "Selecteer het adresboek om vanuit te exporteren:"
 msgid "Select the address book to import to:"
 msgstr "Selecteer de agenda om naar te importeren:"
 
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Selecteer de adresboeken welke gebruikt moeten worden voor synchronisatie "
+"met externe apparaten:"
+
 #: templates/data/import.inc:36
 msgid "Select the charset of the source file:"
 msgstr "Selecteer de tekenset van het bronbestand:"
@@ -1090,13 +1182,13 @@ msgstr "Selecteer het importbestand:"
 msgid "Select the format of the source file:"
 msgstr "Selecteer het formaat van het bronbestand:"
 
-#: config/prefs.php.dist:116
+#: config/prefs.php.dist:125
 msgid "Select the format used to display names:"
 msgstr "Selecteer het formaat voor het weergeven van namen:"
 
 #: config/prefs.php.dist:25
-msgid "Select view to display by default, sort options, and paging options."
-msgstr "Selecteer de standaardweergave, sorteer- en paginaopties."
+msgid "Select view to display by default and paging options."
+msgstr "Selecteer de standaardweergave en paging opties."
 
 #: config/prefs.php.dist:18
 msgid "Select which fields to display in the address lists."
@@ -1128,21 +1220,21 @@ msgstr "Adressen weergeven"
 msgid "Show Lists"
 msgstr "Lijsten weergeven"
 
-#: lib/ListView.php:319 lib/ListView.php:325
+#: lib/ListView.php:323 lib/ListView.php:329
 msgid "Sort Direction"
 msgstr "Sorteervolgorde"
 
-#: templates/browse/column_headers.inc:31
+#: templates/browse/column_headers.inc:32
 #, php-format
 msgid "Sort by %s"
 msgstr "Sorteren op %s"
 
-#: templates/browse/column_headers.inc:26
+#: templates/browse/column_headers.inc:27
 #, php-format
 msgid "Sort by %s only"
 msgstr "Alleen sorteren op %s"
 
-#: templates/browse/column_headers.inc:29
+#: templates/browse/column_headers.inc:30
 #, php-format
 msgid "Sort by %s, then by %s"
 msgstr "Sorteren op %s, daarna op %s"
@@ -1151,30 +1243,30 @@ msgstr "Sorteren op %s, daarna op %s"
 msgid "Source:"
 msgstr "Bron:"
 
-#: lib/api.php:274
+#: lib/api.php:322
 msgid "Sources"
 msgstr "Bronnen"
 
-#: config/attributes.php.dist:101
+#: config/attributes.php.dist:109
 msgid "Spouse"
 msgstr "Echtgenoot"
 
-#: lib/Views/Browse.php:258 lib/Views/Browse.php:298
+#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr "%d adressen met succes toegevoegd aan adreslijst."
 
-#: lib/Views/Browse.php:212
+#: lib/Views/Browse.php:215
 #, php-format
 msgid "Successfully added %s to %s"
 msgstr "%s met succes toegevoegd aan %s"
 
-#: lib/Views/Browse.php:288
+#: lib/Views/Browse.php:291
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr "Adreslijst \"%s\" met success aangemaakt."
 
-#: search.php:127
+#: search.php:165
 #, php-format
 msgid "Successfully created virtual address book \"%s\""
 msgstr "Virtueel adresboek \"%s\" met success aangemaakt"
@@ -1189,7 +1281,7 @@ msgstr "%d adres(sen) met succes verwijderd."
 msgid "Successfully removed %d contact(s) from list."
 msgstr "%d adres(sen) met succes uit adreslijst verwijderd."
 
-#: data.php:61
+#: data.php:102
 msgid "TSV"
 msgstr "TSV"
 
@@ -1205,7 +1297,7 @@ msgstr "Doeladresboek"
 msgid "Target Contact List"
 msgstr "Doeladreslijst"
 
-#: data.php:322
+#: data.php:353
 #, php-format
 msgid "The %s file didn't contain any contacts."
 msgstr "Het %s bestand bevatte geen adressen."
@@ -1216,30 +1308,39 @@ msgstr ""
 "De VFS backend heeft een configuratie nodig om uploaden van bijlagen te "
 "gebruiken."
 
-#: lib/Driver.php:1411
+#: lib/Driver.php:1921
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr "Het adresboek \"%s\" bestaat niet."
 
-#: addressbooks.php:104
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Het adresboek \"%s\" is aangemaakt."
+
+#: data.php:360
 #, php-format
-msgid "The address book \"%s\" was created successfully."
-msgstr "Het adresboek \"%s\" is met succes aangemaakt."
+msgid "The address book could not be purged: %s"
+msgstr "Het adresboek kon niet worden geleegd: %s"
 
-#: addressbooks.php:130
+#: lib/api.php:1062
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Het adresboek met uw eigen adres bestaat niet meer."
+
+#: addressbooks/delete.php:50
 #, php-format
-msgid "The address book \"%s\" was removed successfully."
-msgstr "Het adresboek \"%s\" is met succes verwijderd."
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Het adresboek \"%s\" is verwijderd."
 
-#: addressbooks.php:151
+#: addressbooks/edit.php:44
 #, php-format
-msgid "The address book \"%s\" was successfully updated."
-msgstr "Het adresboek \"%s\" is met succes bijgewerkt."
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "Het adresboek \"%s\" is hernoemd naar \"%s\"."
 
-#: data.php:329
+#: addressbooks/edit.php:46
 #, php-format
-msgid "The address book could not be purged: %s"
-msgstr "Het adresboek kon niet worden geleegd: %s"
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Het adresboek \"%s\" is opgeslagen."
 
 #: vcard.php:19 contact.php:23 view.php:28
 msgid "The contact you requested does not exist."
@@ -1250,7 +1351,7 @@ msgstr "Het gevraagde adres bestaat niet."
 msgid "The file \"%s\" has been deleted."
 msgstr "Het bestand \"%s\" is verwijderd."
 
-#: data.php:302
+#: data.php:333
 msgid "The import can be finished despite the warnings."
 msgstr "Ondanks waarschuwingen kan de import doorgaan"
 
@@ -1273,7 +1374,14 @@ msgstr ""
 "zijn geconfigureerd voor het toevoegen van nieuwe invoer. Wanneer u denkt "
 "dat dit een fout betreft, neem dan contact op met de systeembeheerder."
 
-#: search.php:123
+#: lib/Views/Browse.php:349
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "Er is %d adres in deze lijst dat niet zichtbaar is voor u"
+msgstr[1] "Er zijn %d adressen in deze lijst die niet zichtbaar zijn voor u"
+
+#: search.php:161
 #, php-format
 msgid "There was a problem creating the virtual address book: %s"
 msgstr "Een probleem bij het maken van het virtuele adresboek: %s"
@@ -1286,16 +1394,11 @@ msgstr ""
 "Er heeft zich een fout voorgedaan bij het toevoegen van het nieuwe adres. "
 "Neem contact op met uw systeembeheerder voor verdere hulp."
 
-#: lib/Views/Browse.php:308
+#: lib/Views/Browse.php:311
 msgid "There was an error creating a new list."
 msgstr "Een fout bij het maken van een nieuwe lijst."
 
-#: addressbooks.php:96 addressbooks.php:102
-#, php-format
-msgid "There was an error creating this address book: %s"
-msgstr "Een fout bij het maken van dit adresboek: %s"
-
-#: lib/Views/Browse.php:218
+#: lib/Views/Browse.php:221
 #, php-format
 msgid "There was an error deleting \"%s\" from the source address book."
 msgstr "Een fout bij het verwijderen van \"%s\" uit het bronadresboek."
@@ -1305,29 +1408,24 @@ msgstr "Een fout bij het verwijderen van \"%s\" uit het bronadresboek."
 msgid "There was an error deleting this contact: %s"
 msgstr "Een fout bij het verwijderen van dit adres: %s"
 
-#: lib/Views/Browse.php:348
+#: lib/Views/Browse.php:355
 msgid "There was an error displaying the list"
 msgstr "Fout bij het weergeven van de lijst"
 
-#: data.php:356
+#: data.php:396
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "Een fout bij het importeren van de data: %s"
 
-#: lib/api.php:678 lib/api.php:944
+#: lib/api.php:889 lib/api.php:1231
 msgid "There was an error importing the iCalendar data."
 msgstr "Een fout bij het importeren van de iCalendardata."
 
-#: lib/api.php:227
+#: lib/api.php:258
 #, php-format
 msgid "There was an error removing an address book for %s"
 msgstr "Een fout bij het verwijderen van een adresboek: %s"
 
-#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
-#, php-format
-msgid "There was an error removing this address book: %s"
-msgstr "Een fout bij het verwijderen van dit adrsboek: %s"
-
 #: lib/Forms/EditContact.php:86
 msgid ""
 "There was an error saving the contact. Contact your system administrator for "
@@ -1336,12 +1434,7 @@ msgstr ""
 "Er heeft zich een fout voorgedaan bij het toevoegen van het adres. Neem "
 "contact op met uw systeembeheerder voor verdere hulp."
 
-#: addressbooks.php:149
-#, php-format
-msgid "There was an error updating this address book: %s"
-msgstr "Een fout bij het bijwerken van dit adresboek: %s"
-
-#: data.php:188
+#: data.php:219
 msgid "There were no addresses to export."
 msgstr "Er waren geen adressen om te exporteren."
 
@@ -1350,25 +1443,29 @@ msgstr "Er waren geen adressen om te exporteren."
 msgid "These address books will display in this order:"
 msgstr "Deze adresboeken worden in deze volgorde weergegeven"
 
-#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
-msgid "These columns will display in this order:"
-msgstr "Deze kolommen worden in deze volgorde weergegeven"
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Dit adresboek kan niet worden verwijderd"
 
-#: data.php:287
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Dit adres is als uw eigen gemarkeerd."
+
+#: data.php:318
 msgid "This file format is not supported."
 msgstr "Dit bestandsformaat wordt niet ondersteund."
 
-#: lib/api.php:1399 lib/api.php:1412
+#: lib/api.php:1814 lib/api.php:1827
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr "Deze persoon heeft reeds een %s invoer in het adresboek"
 
-#: config/prefs.php.dist:129
+#: config/prefs.php.dist:138
 msgid ""
 "This will be the default address book when adding or importing contacts."
 msgstr "Dit wordt het standaard adresboek voor het toevoegen van adressen."
 
-#: config/attributes.php.dist:221
+#: config/attributes.php.dist:229
 msgid "Time Zone"
 msgstr "Tijdzone"
 
@@ -1376,78 +1473,131 @@ msgstr "Tijdzone"
 msgid "Unable to find contact owner."
 msgstr "Niet in staat om de eigenaar van het adres te vinden."
 
-#: lib/Driver.php:1333 lib/Turba.php:643
+#: lib/Driver.php:1843 lib/Turba.php:657
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "Niet in staat om de definitie van %s te laden."
 
-#: lib/Driver/kolab.php:486
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Niet in staat adresboek \"%s\" op te slaan: %s"
+
+#: lib/Driver/kolab.php:490
 msgid "Unable to search."
 msgstr "Niet in staat te zoeken."
 
-#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:168
-msgid "Undo Changes"
-msgstr "Herstel wijzigingen"
-
-#: config/attributes.php.dist:340
+#: config/attributes.php.dist:367
 msgid "Unfiled"
 msgstr "Onbenoemd"
 
-#: lib/api.php:711 lib/api.php:814 lib/api.php:962
+#: lib/api.php:927 lib/api.php:1039 lib/api.php:1249
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr "Niet ondersteund Content-Type: %s"
 
-#: minisearch.php:76
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "\"%s\" bekijken"
+
+#: minisearch.php:72 minisearch.php:73
 msgid "View Contact"
 msgstr "Adres weergeven"
 
-#: config/prefs.php.dist:105
+#: config/prefs.php.dist:114
 msgid "View to display by default:"
 msgstr "Standaardweergave:"
 
-#: config/attributes.php.dist:312
+#: config/attributes.php.dist:482
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:320
 msgid "Website URL"
 msgstr "Website URL"
 
-#: config/attributes.php.dist:165
+#: config/attributes.php.dist:173
 msgid "Work Address"
-msgstr "Werkadres"
+msgstr "Adres (werk)"
+
+#: config/attributes.php.dist:546
+msgid "Work Address Extended"
+msgstr "Adres uitgebreid (werk)"
 
-#: config/attributes.php.dist:183
+#: config/attributes.php.dist:191
 msgid "Work City"
 msgstr "Woonplaats (werk)"
 
-#: config/attributes.php.dist:201
+#: config/attributes.php.dist:209
 msgid "Work Country"
 msgstr "Land (werk)"
 
-#: config/attributes.php.dist:246
+#: config/attributes.php.dist:430
+msgid "Work Email"
+msgstr "E-mail (werk)"
+
+#: config/attributes.php.dist:447
+msgid "Work Fax"
+msgstr "Fax (werk)"
+
+#: config/attributes.php.dist:552
+msgid "Work Latitude"
+msgstr "Breedtegraad (werk)"
+
+#: config/attributes.php.dist:557
+msgid "Work Longitude"
+msgstr "Lengtegraad (werk)"
+
+#: config/attributes.php.dist:457
+msgid "Work Mobile Phone"
+msgstr "Mobiele telefoon (werk)"
+
+#: config/attributes.php.dist:254
 msgid "Work Phone"
 msgstr "Tel.nr. (werk)"
 
-#: config/attributes.php.dist:177
+#: config/attributes.php.dist:185
 msgid "Work Post Office Box"
 msgstr "Postbus (werk)"
 
-#: config/attributes.php.dist:195
+#: config/attributes.php.dist:203
 msgid "Work Postal Code"
-msgstr "Tel.nr. (werk)"
+msgstr "Postcode (werk)"
 
-#: config/attributes.php.dist:189
+#: config/attributes.php.dist:197
 msgid "Work State/Province"
 msgstr "Staat of provincie (werk)"
 
-#: config/attributes.php.dist:171
+#: config/attributes.php.dist:179
 msgid "Work Street Address"
-msgstr "Werkadres"
+msgstr "Straat (werk)"
+
+#: config/attributes.php.dist:472
+msgid "Work Video Call"
+msgstr "Videogesprek (werk)"
+
+#: config/attributes.php.dist:540
+msgid "Work Website URL"
+msgstr "Website URL (werk)"
 
-#: add.php:48 data.php:251 lib/Views/Browse.php:159 lib/Views/Browse.php:271
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Het is u niet toegestaan om dit adresboek te wijzigen."
+
+#: add.php:48 data.php:282 lib/Views/Browse.php:159 lib/Views/Browse.php:274
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
-msgstr "U mag niet meer dan %d adressen aanleggen in \"%s\"."
+msgstr ""
+"Het is u niet toegestaan om meer dan %d adressen aan te maken in \"%s\"."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Het is u niet toegestaan om dit adresboek te verwijderen."
+
+#: lib/api.php:204
+msgid "You are not allowed to remove user data."
+msgstr "Het is u niet toegestaan om gebruikersgegevens te verwijderen."
 
 #: lib/Driver/vbook.php:137
 msgid "You cannot add an entry to a virtual address book."
@@ -1461,6 +1611,10 @@ msgstr "U kunt geen nieuwe adressen aan uw virtuele doeladresboek toevoegen"
 msgid "You cannot delete contacts from a virtual address book"
 msgstr "U kunt geen adressen uit uw virtuele adresboek verwijderen"
 
+#: lib/api.php:1057
+msgid "You didn't mark a contact as your own yet."
+msgstr "U heeft nog geen adres als uw eigen gemarkeerd."
+
 #: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
 #: lib/Views/EditContact.php:49
 msgid "You do not have permission to view this contact."
@@ -1470,11 +1624,19 @@ msgstr "U heeft geen recht om dit adres te bekijken."
 msgid "You do not have permission to view this object."
 msgstr "U heeft geen recht om dit object te bekijken."
 
-#: addressbooks.php:59
-msgid "You do not have permissions to delete this source."
-msgstr "U heeft geen rechten om deze bron te verwijderen."
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "U heeft geen rechten om dit adresboek te verwijderen."
 
-#: lib/Driver/ldap.php:705
+#: lib/api.php:1071
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"U heeft geen voldoende rechten om het adresboek, dat uw eigen adres bevat, "
+"te lezen."
+
+#: lib/Driver/ldap.php:741
 msgid ""
 "You must have the Net_LDAP PEAR library installed to use the schema check "
 "function."
@@ -1482,7 +1644,7 @@ msgstr ""
 "U dient een Net_LDAP PEAR bibliotheek geinstalleerd te hebben om de schema "
 "check functie te kunnen gebruiken."
 
-#: search.php:110
+#: search.php:148
 msgid "You must provide a name for virtual address books."
 msgstr "U dient een naam voor het virtuele adresboek op te geven."
 
@@ -1503,11 +1665,24 @@ msgstr "U dient tenminste eerst 
 msgid "You only have permission to view this contact."
 msgstr "U heeft alleen recht om dit adres te bekijken."
 
-#: lib/Views/Browse.php:355
+#: lib/Views/Browse.php:362
 msgid "Your default address book is not browseable."
 msgstr "U kunt niet bladeren in uw standaard adresboek."
 
-#: lib/Turba.php:585
+#: contact.php:101 contact.php:102 templates/browse/row.inc:10
+#: templates/browse/row.inc:11
+msgid "Your own contact"
+msgstr "Uw eigen adres"
+
+#: lib/api.php:1076
+msgid "Your own contact cannot be found in the address book."
+msgstr "Uw eigen adres kan niet worden gevonden in het adresboek."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[geen waarde]"
+
+#: lib/Turba.php:599
 msgid "_Browse"
 msgstr "_Bladeren"
 
@@ -1519,11 +1694,11 @@ msgstr "_Adressen"
 msgid "_Delete"
 msgstr "Ver_wijderen"
 
-#: contact.php:82
+#: contact.php:91
 msgid "_Edit"
 msgstr "_Bewerken"
 
-#: lib/Turba.php:594
+#: lib/Turba.php:608
 msgid "_Import/Export"
 msgstr "_Import/Export"
 
@@ -1531,15 +1706,15 @@ msgstr "_Import/Export"
 msgid "_Lists"
 msgstr "_Adreslijsten"
 
-#: lib/Turba.php:582
+#: lib/Turba.php:596
 msgid "_My Address Books"
 msgstr "_Mijn adresboeken"
 
-#: lib/Turba.php:588
+#: lib/Turba.php:602
 msgid "_New Contact"
 msgstr "_Nieuw adres"
 
-#: lib/Turba.php:599
+#: lib/Turba.php:613
 msgid "_Print"
 msgstr "A_fdrukken"
 
@@ -1547,56 +1722,65 @@ msgstr "A_fdrukken"
 msgid "_Remove from this list"
 msgstr "_Uit deze lijst verwijderen."
 
-#: lib/Turba.php:590
+#: lib/Turba.php:604
 msgid "_Search"
 msgstr "_Zoeken"
 
-#: contact.php:79
+#: contact.php:88
 msgid "_View"
 msgstr "_Bekijken"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "ascending"
 msgstr "toenemend"
 
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "door %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "door mij"
+
 #: vcard.php:45
 msgid "contact"
 msgstr "adres"
 
-#: data.php:208 data.php:213 templates/data/export.inc:1
+#: data.php:239 data.php:244 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "contacts.csv"
 
-#: data.php:233
+#: data.php:264
 msgid "contacts.ldif"
 msgstr "contacts.ldif"
 
-#: data.php:218
+#: data.php:249
 msgid "contacts.tsv"
 msgstr "contacts.tsv"
 
-#: data.php:228
+#: data.php:259
 msgid "contacts.vcf"
 msgstr "contacts.vcf"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "descending"
 msgstr "afnemend"
 
-#: config/attributes.php.dist:377
+#: config/attributes.php.dist:409
 msgid "female"
 msgstr "vrouw"
 
-#: lib/Block/tree_menu.php:38
+#: lib/Block/tree_menu.php:37
 #, php-format
 msgid "in %s"
 msgstr "in %s"
 
-#: config/attributes.php.dist:377
+#: config/attributes.php.dist:409
 msgid "male"
 msgstr "man"
 
-#: config/prefs.php.dist:119
+#: config/prefs.php.dist:128
 msgid "no formatting"
 msgstr "geen opmaak"
 
@@ -1612,7 +1796,7 @@ msgstr "Aan een adreslijst"
 msgid "to a different Address Book"
 msgstr "Naar ander adresboek:"
 
-#: data.php:62 templates/data/import.inc:15 templates/data/export.inc:15
-#: templates/browse/column_headers.inc:13
+#: data.php:103 templates/data/import.inc:15 templates/data/export.inc:15
+#: templates/browse/column_headers.inc:14
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 951b844..9271c25 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,538 +1,820 @@
-# translation of turba.po to Brazilian Portuguese
+# translation of pt_BR.po to Português brasileiro
 # This file is distributed under the same license as the Turba package.
 # Copyright (C) YEAR Horde Project.
-# Fabio Gomes <flgoms at uol.com.br>, 2005.
 #
+# Fabio Gomes <flgoms at uol.com.br>, 2005.
+# Luis Felipe Marzagao <duli at fedoraproject.org>, 2008.
 msgid ""
 msgstr ""
 "Project-Id-Version: pt_BR\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2005-02-10 02:08+0100\n"
-"PO-Revision-Date: 2005-03-16 17:11-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-09-25 12:32+0200\n"
+"PO-Revision-Date: 2008-10-12 22:27-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.3.1\n"
+"X-Generator: KBabel 1.11.4\n"
 "Plural-Forms:  nplurals=2; plural=(n > 1);\n"
 
-#: config/prefs.php.dist:111
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Adicionar Contatos  IMSP"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " Apagar Contatos IMSP"
+
+#: data.php:455
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" já existe e não foi importado."
+
+#: lib/Forms/EditContact.php:83
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" atualizado, mas a gravação do arquivo enviado falhou: %s"
+
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" atualizado."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" não foi copiado porque é uma lista."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" não foi movido porque é uma lista."
+
+#: config/prefs.php.dist:127
 msgid "\"Firstname Lastname\"  (ie. John Doe)"
-msgstr "\"Nome Sobrenome\"  (ex. João Ninguém)"
+msgstr "\"Nome Sobrenome\"  (ex. João Silva)"
 
-#: config/prefs.php.dist:110
+#: config/prefs.php.dist:126
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
-msgstr "\"Sobrenome, Nome\" (ex. Ninguém, João)"
+msgstr "\"Sobrenome, Nome\" (ex. Silva, João)"
 
-#: add.php:96
+#: lib/Driver.php:619
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s de %s"
+
+#: lib/Forms/AddContact.php:88
 #, php-format
 msgid "%s added."
 msgstr "%s adicionado."
 
-#: data.php:267
+#: data.php:483
 #, php-format
-msgid "%s file successfully imported"
-msgstr "Arquivo %s importado com sucesso"
+msgid "%s file successfully imported."
+msgstr "Arquivo %s importado com sucesso."
 
-#: templates/browse/footer.inc:5
+#: templates/list/numPager.inc:6
 #, php-format
 msgid "%s to %s of %s"
 msgstr "%s a %s de %s"
 
-#: browse.php:146
-#, php-format
-msgid "'%s' was not copied because it is a list."
-msgstr "'%s' não foi copiado porque é uma lista."
-
-#: browse.php:144
+#: lib/Turba.php:541
 #, php-format
-msgid "'%s' was not moved because it is a list."
-msgstr "'%s' não foi movido porque é uma lista."
-
-#: lib/Block/minisearch.php:45
-msgid "A browser that supports iFrames is required"
-msgstr "É obrigatório um navegador que suporte iFrames"
+msgid "%s's Address Book"
+msgstr "Contatos de %s"
 
-#: config/prefs.php.dist:132
-msgid "Above search form"
-msgstr "Formulário de pesquisa acima"
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr "É necessário um navegador que suporte iFrames"
 
-#: view.php:51
+#: view.php:54
 #, php-format
 msgid "Access denied to %s"
 msgstr "Acesso negado a %s"
 
-#: templates/browse/search.inc:65
-msgid "Ad_vanced Search"
-msgstr "Pesquisa A_vançada"
-
-#: add.php:61 lib/Block/tree_menu.php:27
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
 msgid "Add"
 msgstr "Adicionar"
 
-#: templates/prefs/columnselect.inc:237
-msgid "Add column"
-msgstr "Adicionar coluna"
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Adicionar Contato"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Adicionar contatos"
 
-#: edit.php:123
+#: lib/Forms/EditContact.php:34
 msgid "Add file"
 msgstr "Adicionar arquivo"
 
-#: templates/browse/actions.inc:23
+#: templates/browse/actions.inc:30
 msgid "Add to"
 msgstr "Adicionar em"
 
-#: browse.php:30 config/prefs.php.dist:99
-msgid "Address Book Listing"
-msgstr "Listagem de Catálogos de Endereços"
+#: lib/Driver.php:2113 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Adicionar contatos não está disponível."
 
-#: add.php:95
-msgid "Address book entry"
-msgstr "Registro do catálogo de endereços"
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr "Contatos"
 
-#: lib/Driver.php:525
-msgid "Address book is read-only."
-msgstr "O catálogo de endereços é somente-leitura."
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Lista de Contatos"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Listagem de Contatos"
 
-#: data.php:247
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Contatos"
+
+#: data.php:435
 msgid "Address book successfully purged."
-msgstr "O catálogo de endereços foi limpo com sucesso."
+msgstr "Contatos apagados com sucesso."
 
-#: search.php:94 templates/browse/search.inc:65
-#: templates/browse/search.inc:113
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Contatos que não serão exibidos:"
+
+#: search.php:184 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Pesquisa Avançada"
 
-#: config/attributes.php.dist:64
+#: config/attributes.php.dist:83
 msgid "Alias"
 msgstr "Apelido"
 
-#: templates/browse/footerAlpha.inc:6 templates/browse/footerAlpha.inc:9
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
 msgid "All"
 msgstr "Todos"
 
-#: lib/api.php:459
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr "Já Existe"
 
-#: templates/browse/javascript.inc:89
-#, php-format
-msgid "Are you sure that you want to delete %s?"
-msgstr "Você tem certeza que quer excluir %s?"
-
-#: templates/browse/javascript.inc:63
-msgid "Are you sure that you want to delete the selected entries?"
-msgstr "Você tem certeza que quer excluir os registros selecionados?"
-
-#: config/prefs.php.dist:70
-msgid "Ascending"
-msgstr "Ascendente"
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Celebrações"
 
-#: templates/prefs/columnselect.inc:233
-msgid "Available Columns:"
-msgstr "Colunas Disponíveis:"
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Celebração"
 
-#: templates/browse/actions.inc:45
+#: templates/browse/javascript.inc:85
 #, php-format
-msgid "Ba_ck to %s"
-msgstr "_Retornar para %s"
+msgid "Are you sure that you want to delete %s?"
+msgstr "Deseja realmente excluir %s?"
 
-#: templates/browse/actions.inc:45
-#, php-format
-msgid "Back to %s"
-msgstr "Retornar para %s"
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Deseja realmente excluir os contatos selecionados?"
 
-#: templates/browse/search.inc:116
-msgid "Basi_c Search"
-msgstr "Pesquisa _Simples"
+#: config/attributes.php.dist:424
+msgid "Assistant"
+msgstr "Assistente"
 
-#: search.php:91 templates/browse/search.inc:62
-#: templates/browse/search.inc:116
+#: search.php:181 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "Pesquisa Simples"
 
-#: config/prefs.php.dist:131
-msgid "Below search form"
-msgstr "Formulário de pesquisa abaixo"
-
-#: lib/Driver/ldap.php:85 lib/Driver/ldap.php:88
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
 #, php-format
 msgid "Bind failed: (%s) %s"
-msgstr "A conexão falhou: (%s) %s"
+msgstr "Conexão falhou: (%s) %s"
 
-#: config/attributes.php.dist:178
+#: config/attributes.php.dist:95
 msgid "Birthday"
-msgstr "Aniversário"
+msgstr "Dia de Nascimento"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Aniversários"
+
+#: contact.php:128 templates/browse/row.inc:10
+msgid "Blank name"
+msgstr "Nome em branco"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Ambos"
 
-#: config/attributes.php.dist:173
+#: templates/menu.inc:8 templates/addressbook_list.php:29
+#: addressbooks/index.php:39
+msgid "Browse"
+msgstr "Navegar"
+
+#: config/attributes.php.dist:300
 msgid "Business Category"
 msgstr "Categoria de Negócios"
 
-#: data.php:28
+#: data.php:101
 msgid "CSV"
 msgstr "CSV"
 
-#: templates/browse/actions.inc:49
-msgid "C_lear Search"
-msgstr "_Limpar Pesquisa"
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Impossível adicionar um grupo a ele mesmo."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Impossível apagar todas as entradas de contatos para %s"
+
+#: config/attributes.php.dist:388
+msgid "Category"
+msgstr "Categoria"
+
+#: templates/browse/column_headers.inc:25
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Mudar %s ordenar para %s"
+
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
+msgid "Change Permissions"
+msgstr "Alterar Permissões"
 
-#: templates/browse/column_headers.inc:6
+#: templates/browse/column_headers.inc:8
+msgid "Check All/None"
+msgstr "Marcar Todos/Nenhum"
+
+#: templates/browse/column_headers.inc:8
 msgid "Check _All/None"
-msgstr "Marcar Todas/Nenhuma"
+msgstr "Marc_ar Todos/Nenhum"
 
-#: config/prefs.php.dist:29
-msgid ""
-"Choose a default directory for your personal addressbook, contact lists, and "
-"searches."
-msgstr ""
-"Escolha um diretório padrão para o seu catálogo de endereços pessoal, lista "
-"de contatos e pesquisas."
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Subordinadas"
 
-#: add.php:53
+#: lib/Forms/AddContact.php:36
 msgid "Choose an address book"
-msgstr "Escolha um catálogo de endereços"
+msgstr "Escolha os contatos"
 
-#: templates/prefs/columnselect.inc:228
-msgid "Choose the order of the columns to display in the address list."
-msgstr "Escolha a ordem das colunas para exibir na listagem de endereços."
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Escolha quais contatos a exibir, e em que ordem:"
 
-#: templates/browse/actions.inc:49
-msgid "Clear Search"
-msgstr "Limpar Pesquisa"
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Escolha quais contatos para usar."
 
-#: config/prefs.php.dist:10
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+"Clique nos contatos para ordenar as colunas deles. Arraste as colunas para "
+"reordená-las. Marque uma coluna para habilitá-la."
+
+#: templates/block/minisearch.inc:26
+msgid "Close"
+msgstr "Fechar"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Fechar Pesquisa"
+
+#: config/prefs.php.dist:17
 msgid "Column Options"
 msgstr "Opções de Coluna"
 
-#: templates/data/import.inc:18 templates/data/export.inc:16
+#: templates/data/import.inc:13 templates/data/export.inc:12
 msgid "Comma separated values"
 msgstr "Valores separados por vírgula"
 
-#: templates/data/export.inc:17
+#: templates/data/export.inc:13
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "Valores separados por vírgulas (Microsoft Outlook)"
 
-#: config/attributes.php.dist:76
+#: config/attributes.php.dist:522
+msgid "Common Address Extended"
+msgstr "Endereço Comum Estendido"
+
+#: config/attributes.php.dist:540
+msgid "Common City"
+msgstr "Cidade Comum"
+
+#: config/attributes.php.dist:558
+msgid "Common Country"
+msgstr "País Comum"
+
+#: config/attributes.php.dist:466
+msgid "Common Phone"
+msgstr "Telefone Comum"
+
+#: config/attributes.php.dist:534
+msgid "Common Post Office Box"
+msgstr "Caixa Postal Comum"
+
+#: config/attributes.php.dist:552
+msgid "Common Postal Code"
+msgstr "CEP Comum"
+
+#: config/attributes.php.dist:546
+msgid "Common State/Province"
+msgstr "Estado (Comum)"
+
+#: config/attributes.php.dist:528
+msgid "Common Street"
+msgstr "Endereço Comum"
+
+#: config/attributes.php.dist:491
+msgid "Common Video Call"
+msgstr "Video Conferência Comum"
+
+#: config/sources.php.dist:256 config/sources.php.dist:948
+msgid "Communications"
+msgstr "Comunicações"
+
+#: config/attributes.php.dist:306
 msgid "Company"
 msgstr "Empresa"
 
-#: config/attributes.php.dist:144
+#: config/attributes.php.dist:235
 msgid "Company Address"
-msgstr "Endereço da Empresa"
+msgstr "Endereço (Comercial)"
 
-#: lib/api.php:274 lib/api.php:448 lib/api.php:516 lib/api.php:604
-#: lib/api.php:650 lib/api.php:722 lib/api.php:910 lib/api.php:1004
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
 #, php-format
 msgid "Connection failed: %s"
 msgstr "A conexão falhou: %s"
 
-#: lib/Driver/ldap.php:66
+#: lib/Driver/ldap.php:68
 msgid "Connection failure"
 msgstr "Falha de conexão"
 
-#: browse.php:85
-msgid "Contact removed from list."
-msgstr "Contato removido da lista."
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Procurar Contato"
+
+#: config/sources.php.dist:866
+msgid "Contacts"
+msgstr "Contatos"
 
-#: browse.php:282
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Contatos exibidos:"
+
+#: lib/Views/Browse.php:346
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "Contatos na lista: %s"
 
-#: browse.php:304
-#, php-format
-msgid "Contents of %s"
-msgstr "Conteúdo de %s"
-
-#: templates/browse/actions.inc:13
+#: templates/browse/actions.inc:18
 msgid "Copy"
 msgstr "Copiar"
 
-#: lib/ObjectView.php:134
-msgid "Created"
-msgstr "Criado"
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Criar"
 
-#: config/prefs.php.dist:16
-msgid "Default Display"
-msgstr "Exibição Padrão"
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Criar Contatos"
 
-#: config/prefs.php.dist:121
-msgid ""
-"Default directory for your personal addressbook, contact lists, and searches."
-msgstr ""
-"Diretório padrão para o seu catálogo de endereços pessoal, lista de contatos "
-"e pesquisas."
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Criar novos Contatos"
+
+#: lib/ListView.php:448
+msgid "Create a new Contact List in:"
+msgstr "Criar uma nova Lista de Contatos em:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "Criado"
 
-#: config/prefs.php.dist:72
-msgid "Default sorting direction:"
-msgstr "Direção de ordenação padrão:"
+#: contact.php:95
+msgid "De_lete"
+msgstr "Exc_luir"
 
-#: templates/browse/actions.inc:3 lib/AbstractObject.php:312
-#: lib/Renderer.php:48
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: addressbooks/index.php:42 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
 msgid "Delete"
 msgstr "Excluir"
 
-#: config/prefs.php.dist:35
-msgid "Delete Confirmation"
-msgstr "Confirmação de Exclusão"
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "Excluir %s"
 
-#: config/prefs.php.dist:36
-msgid "Delete button behaviour"
-msgstr "Comportamento do botão de exclusão"
+#: lib/api.php:644
+msgid "Delete denied."
+msgstr "Exclusão negada."
 
-#: lib/Driver/ldap.php:283
+#: lib/Driver/ldap.php:321
 #, php-format
 msgid "Delete failed: (%s) %s"
 msgstr "A exclusão falhou: (%s) %s"
 
-#: delete.php:46
+#: lib/Driver.php:2121 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Exclusão de contatos não está disponível."
+
+#: delete.php:40
 msgid "Deletion failed"
 msgstr "A exclusão falhou"
 
-#: config/attributes.php.dist:213
+#: config/attributes.php.dist:312
 msgid "Department"
 msgstr "Departamento"
 
-#: config/prefs.php.dist:71
-msgid "Descending"
-msgstr "Descendente"
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr "Descrição"
 
-#: templates/browse/search.inc:132
+#: templates/browse/search.inc:125
 msgid "Directory"
 msgstr "Diretório"
 
-#: config/prefs.php.dist:9 config/prefs.php.dist:15 config/prefs.php.dist:21
-#: config/prefs.php.dist:27
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Exibir"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
 msgid "Display Options"
 msgstr "Opções de Exibição"
 
-#: config/prefs.php.dist:149
-msgid "Do you want to confirm deleting entries?"
-msgstr "Você deseja confirmar a exclusão de registros?"
-
-#: lib/AbstractObject.php:281
+#: lib/Object.php:354
 msgid "Download"
 msgstr "Baixar"
 
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
 #: templates/browse/contactrow.inc:25
 msgid "Download vCard"
 msgstr "Baixar vCard"
 
-#: templates/browse/column_headers.inc:9 templates/browse/actions.inc:4
-#: templates/browse/contactrow.inc:33 lib/Renderer.php:46
+#: templates/addressbook_list.php:31 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/column_headers.inc:11
+#: templates/browse/actions.inc:6 templates/browse/contactrow.inc:33
+#: addressbooks/index.php:40
 msgid "Edit"
 msgstr "Editar"
 
-#: templates/browse/contactrow.inc:33
+#: edit.php:91 templates/browse/contactrow.inc:33
 #, php-format
-msgid "Edit '%s'"
-msgstr "Editar '%s'"
+msgid "Edit \"%s\""
+msgstr "Editar \"%s\""
 
-#: edit.php:73 edit.php:149
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
 #, php-format
-msgid "Edit entry for %s"
-msgstr "Editar registro de %s"
+msgid "Edit %s"
+msgstr "Editar %s"
 
-#: config/attributes.php.dist:58
+#: config/attributes.php.dist:249
 msgid "Email"
 msgstr "E-mail"
 
-#: edit.php:142
+#: config/attributes.php.dist:255
+msgid "Emails"
+msgstr "E-mails"
+
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Erro ao adicionar contato(s) %d à lista."
+
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
 #, php-format
-msgid "Entry for %s updated, but saving the uploaded file failed: %s"
-msgstr "O registro de %s foi atualizado, mas falhou ao ser enviado: %s"
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Erro ao adiconar %d de %d contato(s) requisitado(s) à lista."
 
-#: edit.php:144 edit.php:147
+#: lib/Views/Browse.php:134
 #, php-format
-msgid "Entry for %s updated."
-msgstr "Registro de %s foi atualizado."
+msgid "Error deleting %d contact(s)."
+msgstr "Erro ao apagar o(s) contato(s) %d."
 
-#: templates/browse/actions.inc:7 templates/data/export.inc:46
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Erro ao apagar %d de %d contato(s) requisitado(s)."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Erro ao remover %d contato(s) da lista."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Erro ao remover %d de %d contato(s) requisitado(s) da lista."
+
+#: lib/api.php:707
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Erro ao procurar nos contatos: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
 msgid "Export"
 msgstr "Exportar"
 
-#: templates/data/export.inc:7
+#: templates/data/export.inc:6
 msgid "Export Address Book"
-msgstr "Exportar Catálogo de Endereços"
+msgstr "Exportar Contatos"
 
-#: templates/data/export.inc:26
+#: templates/data/export.inc:22
 msgid "Export only the selected contacts."
 msgstr "Exportar somente os contatos selecionados."
 
-#: templates/data/export.inc:32
+#: templates/data/export.inc:28
 msgid "Export the following address book completely."
-msgstr "Exportar os seguintes catálogos de endereços completamente."
+msgstr "Exportar os seguintes contatos completamente."
 
-#: data.php:110 data.php:239 browse.php:62 browse.php:120 browse.php:135
-#: add.php:72 search.php:51
+#: data.php:247 data.php:346 data.php:424 add.php:42 search.php:106
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
-msgstr "Falha ao acessar o catálogo de endereços: %s"
+msgstr "Falha ao acessar os contatos: %s"
 
-#: browse.php:154
+#: lib/Views/Browse.php:211
 #, php-format
 msgid "Failed to add %s to %s: %s"
 msgstr "Falha ao adicionar %s em %s: %s"
 
-#: browse.php:287
+#: lib/Views/Browse.php:352
 msgid "Failed to browse list"
 msgstr "Falha ao exibir a listagem"
 
-#: browse.php:318
+#: lib/Views/Browse.php:383
 msgid "Failed to browse the directory"
 msgstr "Falha ao exibir o diretório"
 
-#: lib/Driver/ldap.php:321
+#: lib/Driver/ldap.php:354
 #, php-format
 msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
 msgstr ""
 "Falha ao alterar o nome: (%s) %s; Antigo DN = %s, Novo DN = %s, Raiz = %s"
 
-#: browse.php:140
+#: lib/Views/Browse.php:186
 #, php-format
 msgid "Failed to find object to be added: %s"
 msgstr "Falhou em encontrar o objeto a ser adicionado: %s"
 
-#: data.php:124 search.php:85
+#: search.php:175
+msgid "Failed to search the address book"
+msgstr "Falha ao procurar nos contatos"
+
+#: data.php:262
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "Falhou em pesquisar no diretório: %s"
 
-#: config/attributes.php.dist:167
+#: config/sources.php.dist:565
+msgid "Favourite Recipients"
+msgstr "Destinatários Favoritos"
+
+#: config/attributes.php.dist:276
 msgid "Fax"
 msgstr "Fax"
 
-#: edit.php:119 display.php:100
+#: lib/Forms/Contact.php:41
 msgid "Files"
 msgstr "Arquivos"
 
-#: templates/browse/search.inc:72
+#: templates/browse/search.inc:104
 msgid "Find"
-msgstr "Encontrar"
+msgstr "Procurar"
 
-#: edit.php:92 edit.php:182
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
 msgid "Finish"
 msgstr "Finalizar"
 
-#: config/attributes.php.dist:48
+#: config/attributes.php.dist:53
 msgid "First Name"
 msgstr "Primeiro Nome"
 
-#: config/attributes.php.dist:202
+#: config/attributes.php.dist:350
 msgid "Freebusy URL"
 msgstr "URL Livre/Ocupado"
 
-#: templates/browse/search.inc:85
+#: templates/browse/search.inc:98
 msgid "From"
 msgstr "De"
 
-#: config/sources.php.dist:549
+#: config/attributes.php.dist:430
+msgid "Gender"
+msgstr "Gênero"
+
+#: config/sources.php.dist:791
 msgid "Global Address Book"
-msgstr "Catálogo de Endereços Global"
+msgstr "Contatos Globais"
 
-#: templates/browse/contactrow.inc:54
+#: templates/browse/row.inc:61 templates/browse/contactrow.inc:44
 msgid "Group"
 msgstr "Grupo"
 
-#: config/attributes.php.dist:82
+#: config/attributes.php.dist:135
 msgid "Home Address"
-msgstr "Endereço Residencial"
+msgstr "Endereço (Residencial)"
 
-#: config/attributes.php.dist:93
+#: config/attributes.php.dist:592
+msgid "Home Address Extended"
+msgstr "Endereço Estendido (Residencial)"
+
+#: config/attributes.php.dist:153
 msgid "Home City"
-msgstr "Cidade de Residência"
+msgstr "Cidade (Residencial)"
 
-#: config/attributes.php.dist:108
+#: config/attributes.php.dist:171
 msgid "Home Country"
-msgstr "País de Residência"
+msgstr "País (Residencial)"
+
+#: config/attributes.php.dist:460
+msgid "Home Email"
+msgstr "E-mail (Residencial)"
+
+#: config/attributes.php.dist:476
+msgid "Home Fax"
+msgstr "Fax (Residencial)"
+
+#: config/attributes.php.dist:598
+msgid "Home Latitude"
+msgstr "Latitude (Residencial)"
+
+#: config/attributes.php.dist:603
+msgid "Home Longitude"
+msgstr "Longitude (Residencial)"
+
+#: config/attributes.php.dist:486
+msgid "Home Mobile Phone"
+msgstr "Telefone Celular (Residencial)"
 
-#: config/attributes.php.dist:150
+#: config/attributes.php.dist:261
 msgid "Home Phone"
-msgstr "Fone Residencial"
+msgstr "Telefone (Residencial)"
 
-#: config/attributes.php.dist:103
+#: config/attributes.php.dist:147
+msgid "Home Post Office Box"
+msgstr "Caixa Postal (Residencial)"
+
+#: config/attributes.php.dist:165
 msgid "Home Postal Code"
-msgstr "CEP Residencial"
+msgstr "CEP (Residencial)"
 
-#: config/attributes.php.dist:98
+#: config/attributes.php.dist:159
 msgid "Home State/Province"
-msgstr "Estado de Residência"
+msgstr "Estado (Residencial)"
 
-#: config/attributes.php.dist:88
+#: config/attributes.php.dist:141
 msgid "Home Street Address"
-msgstr "Endereço Residencial"
+msgstr "Endereço (Residencial)"
+
+#: config/attributes.php.dist:501
+msgid "Home Video Call"
+msgstr "Video Conferência (Residencial)"
+
+#: config/attributes.php.dist:586
+msgid "Home Website URL"
+msgstr "URL do Website (Residencial)"
 
-#: config/sources.php.dist:482
+#: config/sources.php.dist:682
 msgid "IMSP"
 msgstr "IMSP"
 
-#: templates/data/import.inc:9
+#: templates/data/import.inc:7
 #, php-format
 msgid "Import Address Book, Step %d"
-msgstr "Importar Catálogo de Endereços, Passo %d"
+msgstr "Importar Contatos, Passo %d"
 
-#: data.php:285
+#: data.php:501
 msgid "Import/Export Address Books"
-msgstr "Importar/Exportar Catálogo de Endereços"
+msgstr "Importar/Exportar Contatos"
 
-#: lib/api.php:442 lib/api.php:688
-msgid "Invalid Content-Type"
-msgstr "Content-Type Inválido"
+#: config/attributes.php.dist:406
+msgid "Initials"
+msgstr "Iniciais"
 
-#: lib/api.php:503 lib/api.php:591
+#: config/attributes.php.dist:412
+msgid "Instant Messenger"
+msgstr "Mensageiro Instantâneo"
+
+#: lib/api.php:999 lib/api.php:1132
 msgid "Invalid ID"
 msgstr "ID Inválido"
 
-#: lib/api.php:196 lib/api.php:400 lib/api.php:499 lib/api.php:587
-#: lib/api.php:640 lib/api.php:981
-msgid "Invalid address book"
-msgstr "Catálogo de endereços inválido"
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Contatos inválidos: %s"
 
-#: lib/api.php:985 lib/api.php:1059 lib/api.php:1112
+#: lib/api.php:1198
+msgid "Invalid contact unique ID"
+msgstr "Contato inválido ID único"
+
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
 msgid "Invalid email"
 msgstr "E-mail inválido"
 
-#: lib/api.php:993
+#: lib/api.php:1786
 msgid "Invalid entry"
 msgstr "Registro inválido"
 
-#: lib/Driver/ldap.php:279
+#: lib/Driver/ldap.php:317
 msgid "Invalid key specified."
 msgstr "Chave especificada inválida."
 
-#: lib/api.php:989
+#: lib/api.php:1782
 msgid "Invalid name"
 msgstr "Nome inválido"
 
-#: lib/api.php:644
-msgid "Invalid objectId"
-msgstr "ObjectId inválido"
+#: config/attributes.php.dist:288
+msgid "Job Title"
+msgstr "Cargo"
+
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Chave para gravar deve ser um UID não %s!"
 
-#: lib/Driver/ldap.php:38
+#: lib/Driver/ldap.php:64
 msgid ""
 "LDAP support is required but the LDAP module is not available or not loaded."
 msgstr ""
 "É obrigatório suporte a LDAP mas o módulo LDAP não está disponível ou não "
 "foi carregado."
 
-#: lib/ObjectView.php:139
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "Contatos LDIF"
+
+#: config/attributes.php.dist:436
+msgid "Language"
+msgstr "Idioma"
+
+#: lib/Views/Contact.php:91
 msgid "Last Modified"
 msgstr "Última Modificação"
 
-#: config/attributes.php.dist:53
+#: config/attributes.php.dist:59
 msgid "Last Name"
 msgstr "Sobrenome"
 
-#: templates/browse/column_headers.inc:15
+#: config/attributes.php.dist:442
+msgid "Latitude"
+msgstr "Latitude"
+
+#: templates/browse/column_headers.inc:17
 msgid "List"
 msgstr "Lista"
 
-#: templates/browse/search.inc:79
+#: config/sources.php.dist:251 config/sources.php.dist:944
+msgid "Location"
+msgstr "Endereços"
+
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "Logo"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr "Tipo MIME de Logo"
+
+#: config/attributes.php.dist:447
+msgid "Longitude"
+msgstr "Longitude"
+
+#: lib/api.php:616
+msgid "Malformed request."
+msgstr "Pedido mal formado."
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
+msgid "Manage Address Books"
+msgstr "Gerenciar Contatos"
+
+#: config/attributes.php.dist:418
+msgid "Manager"
+msgstr "Gerenciador"
+
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Marcar este como seu próprio contato"
+
+#: templates/browse/search.inc:109
 msgid "Matching"
-msgstr "Comparando"
+msgstr "Equivalente a"
 
-#: config/prefs.php.dist:81
+#: lib/api.php:329
+msgid "Maximum Number of Contacts"
+msgstr "Número Máximo de Contados"
+
+#: config/prefs.php.dist:97
 msgid "Maximum number of pages"
 msgstr "Número máximo de páginas"
 
@@ -540,397 +822,581 @@ msgstr "N
 msgid "Menu List"
 msgstr "Lista de Menu"
 
-#: lib/Block/minisearch.php:3
-msgid "Mini Search"
-msgstr "Mini Pesquisa"
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Nomes do Meio"
 
-#: lib/Driver/ldap.php:315
+#: lib/Driver/ldap.php:347
 msgid "Missing DN in LDAP source configuration."
 msgstr "DN faltando na fonte de configuração de LDAP."
 
-#: config/attributes.php.dist:162
+#: config/attributes.php.dist:271
 msgid "Mobile Phone"
 msgstr "Telefone Celular"
 
-#: lib/Driver/ldap.php:344 lib/Driver/ldap.php:361
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
 #, php-format
 msgid "Modify failed: (%s) %s"
 msgstr "A alteração falhou: (%s) %s"
 
-#: lib/api.php:1098
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Mais Opções..."
+
+#: lib/api.php:1902
 msgid "More than 1 entry found"
 msgstr "Mais de 1 registro encontrado"
 
-#: templates/browse/actions.inc:12
+#: templates/browse/actions.inc:16
 msgid "Move"
 msgstr "Mover"
 
-#: templates/prefs/columnselect.inc:247
+#: templates/prefs/addressbookselect.inc:184
 msgid "Move left"
 msgstr "Mover à esquerda"
 
-#: templates/prefs/columnselect.inc:249
+#: templates/prefs/addressbookselect.inc:186
 msgid "Move right"
 msgstr "Mover à direita"
 
-#: data.php:31 templates/data/import.inc:21
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
-msgstr "Catálogo de Endereços Mulberry"
+msgstr "Contatos Mulberry"
 
-#: lib/api.php:1018
+#: lib/api.php:1810
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
 msgstr ""
 "Múltiplas pessoas com o endereço [%s], mas nenhuma com nome [%s] já existe"
 
-#: config/sources.php.dist:182 config/sources.php.dist:313
-msgid "My Addressbook"
-msgstr "Meu Catálogo de Endereços"
+#: config/sources.php.dist:167
+msgid "My Address Book"
+msgstr "Meus Contatos"
 
-#: config/attributes.php.dist:42
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
 msgid "Name"
 msgstr "Nome"
 
-#: config/prefs.php.dist:22
+#: config/prefs.php.dist:31
 msgid "Name Format"
 msgstr "Formato do Nome"
 
-#: config/sources.php.dist:83
-msgid "Netcenter Member Directory"
-msgstr "Diretório de Membros Netcenter"
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Prefixos de Nome"
 
-#: add.php:45 add.php:112 lib/Block/minisearch.php:27
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Sufixos de Nome"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nome:"
+
+#: add.php:70 lib/Block/tree_menu.php:28
 msgid "New Contact"
 msgstr "Novo Contato"
 
-#: templates/browse/actions.inc:27
-msgid "New List"
-msgstr "Nova Lista"
-
-#: edit.php:83 edit.php:90 edit.php:197 templates/data/import.inc:50
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
 msgid "Next"
 msgstr "Próxima"
 
-#: config/attributes.php.dist:218
+#: config/attributes.php.dist:89
 msgid "Nickname"
 msgstr "Apelido"
 
-#: lib/api.php:1100 lib/api.php:1149
+#: lib/api.php:1905 lib/api.php:1965
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "Nenhum registro %s foi encontrado para %s"
 
-#: lib/api.php:1068
-msgid "No address books found."
-msgstr "Nenhum catálogo de endereços encontrado."
+#: data.php:93
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "Nenhum Contato está disponível. Importar e Exportar estão desativados."
+
+#: search.php:92
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Nenhum Contato está disponível. A busca está desativada."
+
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
+msgid "No address book specified"
+msgstr "Nenhum contato especificado"
 
-#: minisearch.php:87
+#: minisearch.php:80
 msgid "No contacts found"
 msgstr "Nenhum contato encontrado"
 
-#: lib/api.php:422 lib/api.php:675
+#: templates/browse/column_headers.inc:44
+msgid "No contacts match the current filter."
+msgstr "Nenhum contato corresponde ao filtro atual."
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "Nenhum contato encontrado"
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr "Sem fonte para destinatários favoritos."
+
+#: lib/api.php:893 lib/api.php:1235
 msgid "No vCard data was found."
 msgstr "Nenhum dado vCard foi encontrado."
 
-#: templates/browse/footer.inc:7
+#: templates/list/numPager.inc:8
 msgid "None"
 msgstr "Nenhuma"
 
-#: config/attributes.php.dist:184
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "Não Encontrado"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Não encontrado"
+
+#: config/attributes.php.dist:338
 msgid "Notes"
 msgstr "Anotações"
 
-#: config/prefs.php.dist:89
+#: config/prefs.php.dist:105
 msgid "Number of items per page"
-msgstr "Número de ítens por página"
+msgstr "Número de itens por página"
 
-#: lib/api.php:522 lib/api.php:656
+#: lib/api.php:1041 lib/api.php:1260
 msgid "Object not found"
 msgstr "Objeto não encontrado"
 
-#: config/attributes.php.dist:223
+#: lib/Driver/kolab.php:1199
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Objeto com UID %s não existe!"
+
+#: config/attributes.php.dist:294
+msgid "Occupation"
+msgstr "Profissão"
+
+#: config/attributes.php.dist:318
 msgid "Office"
 msgstr "Escritório"
 
-#: lib/api.php:683
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Ao gravar esta página de opções, os contatos serão permanentemente "
+"removidos. Se isso não for o que você deseja, então você deve mudar sua "
+"seleção para \"Nenhum\"."
+
+#: lib/api.php:1243
 msgid "Only one vcard supported."
 msgstr "Somente um vcard é suportado."
 
-#: config/prefs.php.dist:34
-msgid "Other Options"
-msgstr "Outras Opções"
+#: config/sources.php.dist:258 config/sources.php.dist:950
+msgid "Organization"
+msgstr "Profissional"
 
-#: config/attributes.php.dist:190
+#: config/sources.php.dist:259 config/sources.php.dist:952
+msgid "Other"
+msgstr "Outro"
+
+#: config/attributes.php.dist:356
 msgid "PGP Public Key"
 msgstr "Chave Pública PGP"
 
-#: lib/api.php:406 lib/api.php:509 lib/api.php:597 lib/api.php:838
-#: lib/api.php:999
-msgid "Permission Denied"
-msgstr "Permissão Negada"
+#: config/attributes.php.dist:517
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:281
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Excluir este evento permanentemente?"
 
-#: lib/Driver.php:483
+#: deletefile.php:36 lib/Driver.php:804 lib/api.php:870 lib/api.php:1795
+#: lib/Driver/sql.php:515
 msgid "Permission denied"
 msgstr "Permissão negada"
 
-#: data.php:32 templates/data/import.inc:22
-msgid "Pine Address Book"
-msgstr "Catálogo de Endereços do Pine"
+#: config/sources.php.dist:248 config/sources.php.dist:940
+msgid "Personal"
+msgstr "Pessoal"
 
-#: templates/browse/javascript.inc:30
-msgid "Please enter the name of the new list:"
-msgstr "Por favor forneça um nome para a nova lista:"
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "Foto"
 
-#: templates/prefs/columnselect.inc:221
-msgid "Please select a directory:"
-msgstr "Por favor selecione um diretório:"
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr "Tipo MIME de Foto"
 
-#: edit.php:86 edit.php:89 edit.php:189
+#: data.php:105 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Contatos Pine"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Por favor nomeie a nova lista de contatos:"
+
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
 msgid "Previous"
 msgstr "Anterior"
 
-#: config/sources.php.dist:394
-msgid "Private Address Book"
-msgstr "Catálogo de Endereços Privado"
-
-#: lib/Driver/ldap.php:155
+#: lib/Driver/ldap.php:197
 #, php-format
 msgid "Query failed: (%s) %s"
 msgstr "A consulta falhou: (%s) %s"
 
-#: templates/block/minisearch.inc:43
-msgid "Quick Search"
-msgstr "Pesquisa Rápida"
-
-#: lib/Driver/ldap.php:199 lib/Driver/ldap.php:207 lib/Driver/ldap.php:441
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
 #, php-format
 msgid "Read failed: (%s) %s"
 msgstr "A leitura falhou: (%s) %s"
 
-#: templates/browse/footer.inc:2
-msgid "Records displayed:"
-msgstr "Registros exibidos:"
+#: lib/Driver.php:2105 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "Leitura de contatos não está disponível."
 
-#: templates/prefs/columnselect.inc:239
-msgid "Remove column"
-msgstr "Remover coluna"
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Realmente apagar os contatos \"%s\"? Isso não pode ser desfeito e todos os "
+"contatos deste catálogo serão permanentemente removidos."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Remover contatos"
 
 #: templates/browse/actions.inc:3
 msgid "Remove from this list"
 msgstr "Remover desta lista"
 
-#: templates/data/import.inc:26
+#: lib/Driver.php:2143
 msgid ""
-"Replace existing address book with the imported one? <b>Warning: This "
-"deletes all entries in your current address book.</b>"
+"Removing user data is not supported in the current address book storage "
+"driver."
 msgstr ""
-"Substituir o catálogo de endereços pelo importado? <b>Atenção: Isto excluirá "
-"todos os registros do seu catálogo de endereços atual.</b>"
+"Remoção de dados do usuário não é suportada no driver atual de armazenamento "
+"de contatos."
 
-#: lib/Driver.php:373
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Substituir o catálogo de contatos existente pelo importado? <strong>Aviso: "
+"Isso apagará todos as entradas no seu catálogo de endereços atual.</strong>"
+
+#: lib/Driver.php:698
 msgid "Requested object not found."
 msgstr "O objeto solicitado não foi encontrado."
 
-#: add.php:46 templates/browse/search.inc:126
+#: templates/browse/search.inc:120
 msgid "Reset to Defaults"
 msgstr "Retornar para os padrões"
 
-#: config/attributes.php.dist:196
+#: config/attributes.php.dist:362
 msgid "S/MIME Public Certificate"
 msgstr "Certificado Público S/MIME"
 
-#: lib/Driver/ldap.php:77
+#: config/attributes.php.dist:511
+msgid "SIP"
+msgstr "SIP"
+
+#: lib/Driver/ldap.php:84
 #, php-format
 msgid "STARTTLS failed: (%s) %s"
 msgstr "O STARTTLS falhou: (%s) %s"
 
-#: edit.php:94 add.php:46
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
 msgid "Save"
-msgstr "Salvar"
+msgstr "Gravar"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Gravar procura como contatos virtuais?"
+
+#: lib/Driver.php:2131 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Gravação de contatos não está disponível."
 
-#: templates/browse/search.inc:98 templates/browse/search.inc:125
-#: templates/block/minisearch.inc:48 lib/Block/tree_menu.php:49
-#: config/prefs.php.dist:100
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
 msgid "Search"
 msgstr "Pesquisar"
 
-#: browse.php:267 minisearch.php:66
-msgid "Search Results"
-msgstr "Resultados da Pesquisa"
-
-#: lib/api.php:915
+#: lib/api.php:1568
 msgid "Search failed"
 msgstr "A pesquisa falhou"
 
-#: lib/api.php:1008 lib/api.php:1014 lib/api.php:1023 lib/api.php:1036
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
 #, php-format
 msgid "Search failed: %s"
 msgstr "A pesquisa falhou: %s"
 
-#: config/prefs.php.dist:28
-msgid "Searching Options"
-msgstr "Opções de Pesquisa"
-
-#: templates/block/minisearch.inc:49
-msgid "Searching..."
-msgstr "Pesquisando..."
+#: templates/block/minisearch.inc:23
+msgid "Search for: "
+msgstr "Procurar por: "
 
-#: templates/browse/select.inc:9
-msgid "Select Address Book"
-msgstr "Selecione o Catálogo de Endereços"
+#: lib/Driver.php:2090 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Pesquisa não está disponível."
 
-#: templates/browse/actions.inc:25
-msgid "Select List"
-msgstr "Lista de Seleção"
+#: templates/browse/row.inc:52
+msgid "Select contact"
+msgstr "Selecionar contato"
 
-#: templates/data/export.inc:37
+#: templates/data/export.inc:33
 msgid "Select the address book to export from:"
-msgstr "Selecione o catálogo de endereços para exportar:"
+msgstr "Selecione os contatos de onde exportar:"
 
-#: templates/data/import.inc:31
+#: templates/data/import.inc:27
 msgid "Select the address book to import to:"
-msgstr "Selecione o catálogo de endereços para importar:"
+msgstr "Selecione os contatos para onde importar:"
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Selecione os contatos que serão usados para sincronização com dispositivos "
+"externos:"
 
-#: templates/data/import.inc:40
+#: templates/data/import.inc:36
 msgid "Select the charset of the source file:"
 msgstr "Selecione o conjunto de caracteres do arquivo de origem:"
 
-#: templates/data/export.inc:14
+#: templates/data/export.inc:10
 msgid "Select the export format:"
 msgstr "Selecione o formato para exportar:"
 
-#: templates/data/import.inc:48
+#: templates/data/import.inc:44
 msgid "Select the file to import:"
 msgstr "Selecione o arquivo para importar:"
 
-#: templates/data/import.inc:16
+#: templates/data/import.inc:11
 msgid "Select the format of the source file:"
 msgstr "Selecione o formato do arquivo de origem:"
 
-#: config/prefs.php.dist:109
+#: config/prefs.php.dist:125
 msgid "Select the format used to display names:"
 msgstr "Selecione o formato utilizado para exibir os nomes:"
 
-#: config/prefs.php.dist:17
-msgid "Select view to display by default."
-msgstr "Selecione a visualização para exibir por padrão."
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr "Selecione visão para exibir por padrão e opções de paginação."
 
-#: config/prefs.php.dist:11
+#: config/prefs.php.dist:18
 msgid "Select which fields to display in the address lists."
 msgstr "Selecione quais campos exibir nas listas de endereços."
 
-#: config/prefs.php.dist:23
+#: config/prefs.php.dist:32
 msgid "Select which format to display names."
 msgstr "Selecione em qual formato exibir nomes."
 
-#: templates/prefs/columnselect.inc:243
-msgid "Selected Columns:"
-msgstr "Colunas Selecionadas:"
-
-#: add.php:59
+#: lib/Forms/AddContact.php:42
 #, php-format
-msgid "Selected address book '%s'."
-msgstr "Catálogo de endereços selecionado '%s'."
-
-#: config/sources.php.dist:247
-msgid "Shared Directory"
-msgstr "Diretório Compartilhado"
+msgid "Selected address book \"%s\"."
+msgstr "Contatos selecionados \"%s\"."
 
-#: templates/browse/actions.inc:43
-msgid "Sho_w All"
-msgstr "Exibir Tod_as"
-
-#: templates/browse/select.inc:11
-msgid "Show"
-msgstr "Exibir"
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Exibir %s"
 
-#: templates/browse/actions.inc:43
-msgid "Show All"
-msgstr "Exibir Todas"
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Exibir Ambos"
 
-#: templates/browse/actions.inc:42
+#: templates/browse/actions.inc:50
 msgid "Show Contacts"
 msgstr "Exibir Contatos"
 
-#: templates/browse/actions.inc:41
+#: templates/browse/actions.inc:49
 msgid "Show Lists"
 msgstr "Exibir Listas"
 
-#: templates/browse/actions.inc:42
-msgid "Show _Contacts"
-msgstr "Exibir _Contatos"
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "Direção de Ordenação"
 
-#: templates/browse/actions.inc:41
-msgid "Show _Lists"
-msgstr "Exibir Lis_tas"
+#: templates/browse/column_headers.inc:32
+#, php-format
+msgid "Sort by %s"
+msgstr "Ordenar por %s"
+
+#: templates/browse/column_headers.inc:27
+#, php-format
+msgid "Sort by %s only"
+msgstr "Ordenar por %s apenas"
 
-#: templates/browse/column_headers.inc:19
 #: templates/browse/column_headers.inc:30
-msgid "Sort Direction"
-msgstr "Direção de Ordenação"
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Ordenar por %s, e então por %s"
 
-#: lib/api.php:159
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Fonte:"
+
+#: lib/api.php:322
 msgid "Sources"
 msgstr "Fontes"
 
-#: config/prefs.php.dist:130
-msgid "Specify where you want advanced search results to appear."
-msgstr ""
-"Especifique onde você quer que os resultados da pesquisa avançada apareçam."
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Esposa"
 
-#: browse.php:156
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d contato(s) adicionado(s) com sucesso à lista."
+
+#: lib/Views/Browse.php:215
 #, php-format
 msgid "Successfully added %s to %s"
 msgstr "%s adicionado com sucesso à %s"
 
-#: data.php:29
+#: lib/Views/Browse.php:298
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Lista de contatos \"%s\" criada com sucesso."
+
+#: search.php:150
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Contatos virtuais \"%s\" criados com sucesso"
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d contato(s) apagado(s) com sucesso."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d contato(s) apagado(s) com sucesso da lista."
+
+#: data.php:102
 msgid "TSV"
 msgstr "TSV"
 
-#: templates/data/import.inc:19 templates/data/export.inc:18
+#: templates/data/import.inc:14 templates/data/export.inc:14
 msgid "Tab separated values"
 msgstr "Valores separados por tabulações"
 
-#: view.php:15
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Contatos de Destino"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Lista de Contatos Destinatária"
+
+#: data.php:426
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "O arquivo %s não continha nenhum contato."
+
+#: view.php:17
 msgid "The VFS backend needs to be configured to enable attachment uploads."
 msgstr ""
 "O backend VFS necessita ser configurado para habilitar o envio de anexos."
 
-#: data.php:245
+#: lib/Driver.php:2061
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Os contatos \"%s\" não existem."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Os contatos \"%s\" foram criados."
+
+#: data.php:433
 #, php-format
 msgid "The address book could not be purged: %s"
-msgstr "O catálogo de endereços não pôde ser limpo: %s"
+msgstr "Os contatos não puderam ser apagados: %s"
+
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Os contatos com seu próprio contato não existe mais."
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Os contatos \"%s\" foram apagados."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "O contatos \"%s\" foram renomeados para \"%s\"."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "O contatoss \"%s\" foram gravados."
 
-#: edit.php:45 vcard.php:22 display.php:23 view.php:26
+#: vcard.php:19 contact.php:23 view.php:28
 msgid "The contact you requested does not exist."
 msgstr "O contato que você solicitou não existe."
 
-#: edit.php:111
+#: deletefile.php:46
 #, php-format
-msgid "The file \"%s\" has successfully been deleted."
-msgstr "O arquivo \"%s\" foi excluído com sucesso."
+msgid "The file \"%s\" has been deleted."
+msgstr "O arquivo \"%s\" foi apagado."
 
-#: data.php:226
+#: data.php:406
 msgid "The import can be finished despite the warnings."
 msgstr "A importação pode ser finalizada independente dos avisos."
 
-#: browse.php:58
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "O contato requisitado não foi encontrado."
+
+#: lib/Views/Browse.php:80
 msgid "There are no browseable address books."
-msgstr "Não existem catálogos de endereços visualizáveis."
+msgstr "Não existem contatos visíveis."
 
-#: add.php:38
+#: add.php:32
 msgid ""
 "There are no writeable address books. None of the available address books "
 "are configured to allow you to add new entries to them. If you believe this "
 "is an error, please contact your system administrator."
 msgstr ""
-"Não existem catálogos de endereços com permissões de gravação. Nenhum dos "
-"catálogos de endereços estão configurados para permitir você adicionar novos "
-"registros. Se você acredita que isto é um erro, por favor entre em contato "
-"com o administrador do sistema."
+"Não existem contatos com permissões de gravação. Nenhum dos contatos está "
+"configurado para permitir que você adicione novos registros. Se você "
+"acredita que isto é um erro, por favor entre em contato com o administrador "
+"do sistema."
+
+#: lib/Views/Browse.php:356
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "Há %d contato nesta lista que não pode ser visto por você"
+msgstr[1] "Há %d contatos nesta lista que não podem ser vistos por você"
+
+#: search.php:146
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Houve um problema na criação do catálogo de endereços virtual: %s"
 
-#: add.php:108
+#: lib/Forms/AddContact.php:95
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
@@ -938,207 +1404,408 @@ msgstr ""
 "Houve um erro ao adicionar o novo contato. Entre em contato com o "
 "administrador do sistema para maiores detalhes."
 
-#: browse.php:212
+#: lib/Views/Browse.php:318
 msgid "There was an error creating a new list."
 msgstr "Houve um erro ao criar uma nova lista."
 
-#: browse.php:163
+#: lib/Views/Browse.php:221
 #, php-format
-msgid "There was an error deleting %s from the source address book."
-msgstr "Houve um erro ao excluir %s do catálogo de endereços de origem."
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Houve um erro ao apagar \"%s\" dos contatos de origem."
 
-#: delete.php:45
+#: delete.php:39
 #, php-format
 msgid "There was an error deleting this contact: %s"
 msgstr "Houve um erro ao excluir este contato: %s"
 
-#: browse.php:93
-msgid "There was an error deleting this object."
-msgstr "Houve um erro ao excluir este objeto."
+#: lib/Views/Browse.php:362
+msgid "There was an error displaying the list"
+msgstr "Houve um erro ao exibir a lista"
 
-#: browse.php:297
-msgid "There was an error displaying the select List"
-msgstr "Houve um erro ao exibir a lista selecionada"
-
-#: data.php:260
+#: data.php:469
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "Houve um erro ao importar os dados: %s"
 
-#: lib/api.php:418 lib/api.php:670
+#: lib/api.php:889 lib/api.php:1230
 msgid "There was an error importing the iCalendar data."
 msgstr "Houve um erro ao importar os dados do iCalendar."
 
-#: browse.php:83
-msgid "There was an error removing this object."
-msgstr "Houve um erro ao remover este objeto."
-
-#: edit.php:153
+#: lib/api.php:258
 #, php-format
-msgid "There was an error updating this entry: %s"
-msgstr "Houve um erro ao atualizar este registro: %s"
+msgid "There was an error removing an address book for %s"
+msgstr "Houve um erro ao remover os contatos para %s"
+
+#: lib/Forms/EditContact.php:93
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Houve um erro ao gravar o contato. Entre em contato com o seu administrador "
+"para mais ajuda."
 
-#: data.php:151
+#: data.php:292
 msgid "There were no addresses to export."
 msgstr "Não existiam endereços para exportar."
 
-#: lib/Driver.php:433 lib/Driver.php:474
-msgid "This address book is read-only"
-msgstr "Este catálogo de endereços é somente-leitura"
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Estes contatos serão exibidos na seguinte ordem:"
 
-#: data.php:211
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Estes contatos não podem ser apagados"
+
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Este contato foi marcado como seu próprio."
+
+#: data.php:391
 msgid "This file format is not supported."
 msgstr "Este formato de arquivo não é suportado."
 
-#: lib/api.php:1027 lib/api.php:1040
+#: lib/api.php:1819 lib/api.php:1832
 #, php-format
 msgid "This person already has a %s entry in the address book"
-msgstr "Esta pessoa já tem um registro %s no catálogo de endereços"
+msgstr "Esta pessoa já tem um registro %s nos contatos"
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Estes serão os contatos padrão ao adicionar ou importar registros."
+
+#: config/attributes.php.dist:241
+msgid "Time Zone"
+msgstr "Fuso Horário"
 
-#: config/attributes.php.dist:70
-msgid "Title"
-msgstr "Título"
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Não é possível achar proprietário do contato."
 
-#: lib/Driver.php:854
+#: lib/Driver.php:1981 lib/Turba.php:659
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "Impossível carregar a definição de %s."
 
-#: edit.php:83 edit.php:86 edit.php:89 edit.php:94 edit.php:191
-msgid "Undo Changes"
-msgstr "Desfazer Alterações"
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Não foi possível garavar os contatos \"%s\": %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "Não é possível procurar."
 
-#: lib/api.php:551
-msgid "Unsupported Content-Type."
-msgstr "Content-Type não suportado."
+#: config/attributes.php.dist:391
+msgid "Unfiled"
+msgstr "Normal"
 
-#: config/sources.php.dist:146
-msgid "Verisign Directory"
-msgstr "Diretório Verisign"
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Tipo de Conteúdo não suportado: %s"
 
 #: templates/browse/contactrow.inc:27
 #, php-format
-msgid "View '%s'"
-msgstr "Visualizar '%s'"
+msgid "View \"%s\""
+msgstr "Ver \"%s\""
 
-#: minisearch.php:82
+#: minisearch.php:72 minisearch.php:73
 msgid "View Contact"
 msgstr "Visualizar Contato"
 
-#: config/prefs.php.dist:98
+#: config/prefs.php.dist:114
 msgid "View to display by default:"
 msgstr "Visualização para exibir por padrão:"
 
-#: config/attributes.php.dist:208
+#: config/attributes.php.dist:506
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:344
 msgid "Website URL"
 msgstr "URL do Website"
 
-#: config/attributes.php.dist:113
+#: config/attributes.php.dist:185
 msgid "Work Address"
-msgstr "Endereço Comercial"
+msgstr "Endereço (Comercial)"
 
-#: config/attributes.php.dist:124
+#: config/attributes.php.dist:570
+msgid "Work Address Extended"
+msgstr "Endereço Estendido (comercial)"
+
+#: config/attributes.php.dist:203
 msgid "Work City"
-msgstr "Cidade de Trabalho"
+msgstr "Cidade (Comercial)"
 
-#: config/attributes.php.dist:139
+#: config/attributes.php.dist:221
 msgid "Work Country"
-msgstr "País de Trabalho"
+msgstr "País (Comercial)"
+
+#: config/attributes.php.dist:454
+msgid "Work Email"
+msgstr "E-mail (Comercial)"
+
+#: config/attributes.php.dist:471
+msgid "Work Fax"
+msgstr "Fax (Comercial)"
+
+#: config/attributes.php.dist:576
+msgid "Work Latitude"
+msgstr "Latitude (Comercial)"
+
+#: config/attributes.php.dist:581
+msgid "Work Longitude"
+msgstr "Longitude (Comercial)"
 
-#: config/attributes.php.dist:156
+#: config/attributes.php.dist:481
+msgid "Work Mobile Phone"
+msgstr "Celular (Comercial)"
+
+#: config/attributes.php.dist:266
 msgid "Work Phone"
-msgstr "Fone Comercial"
+msgstr "Telefone (Comercial)"
+
+#: config/attributes.php.dist:197
+msgid "Work Post Office Box"
+msgstr "Caixa Postal (Comercial)"
 
-#: config/attributes.php.dist:134
+#: config/attributes.php.dist:215
 msgid "Work Postal Code"
-msgstr "CEP Comercial"
+msgstr "CEP (Comercial)"
 
-#: config/attributes.php.dist:129
+#: config/attributes.php.dist:209
 msgid "Work State/Province"
-msgstr "Estado de Trabalho"
+msgstr "Estado (Comercial)"
 
-#: config/attributes.php.dist:119
+#: config/attributes.php.dist:191
 msgid "Work Street Address"
-msgstr "Endereço Comercial"
+msgstr "Endereço (Comercial)"
+
+#: config/attributes.php.dist:496
+msgid "Work Video Call"
+msgstr "Vídeo Conferência (Comercial)"
+
+#: config/attributes.php.dist:564
+msgid "Work Website URL"
+msgstr "URL do Website (Comercial)"
 
-#: templates/browse/javascript.inc:30
-msgid "You are creating a distribution list."
-msgstr "Você está criando uma lista de distribuição."
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Você não tem permissão para alterar esses contatos."
 
-#: edit.php:64 display.php:58 view.php:36
+#: data.php:355 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:281
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Você não tem permissão para criar mais do que %d contatos em \"%s\"."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Você não tem permissão para apagar esses contatos."
+
+#: lib/api.php:204
+msgid "You are not allowed to remove user data."
+msgstr "Você não tem permissão para remover dados do usuário."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Você não pode adicionar uma entrada em contatos virtuais."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Você não pode adicionar novos registros em contatos virtuais"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Você não pode apagar registros de contatos virtuais"
+
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr "Você ainda não marcou um contato como o seu próprio."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
 msgid "You do not have permission to view this contact."
-msgstr "Você não tem permissão para visualizar este contato."
+msgstr "Você não tem permissão para ver este contato."
 
-#: vcard.php:40
+#: vcard.php:37
 msgid "You do not have permission to view this object."
-msgstr "Você não tem permissão para visualizar este objeto."
+msgstr "Você não tem permissão para ver este objeto."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Você não tem permissão para apagar estes contatos."
 
-#: templates/browse/javascript.inc:51
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"Você não tem permissões suficientes para ler os contatos que contêm o seu "
+"próprio contato."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"You deve ter a biblioteca Net_LDAP PEAR instalada para usar a função de "
+"esquema de checagem."
+
+#: search.php:133
+msgid "You must provide a name for virtual address books."
+msgstr "Você deve fornecer um nome para os contatos virtuais."
+
+#: templates/browse/javascript.inc:54
 msgid "You must select a target address book."
-msgstr "Você deve selecionar um catálogo de endereços."
+msgstr "Você deve selecionar os contatos de destino."
 
-#: templates/browse/javascript.inc:23
-msgid "You must select a target list."
-msgstr "Você deve selecionar uma lista."
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Você deve selecionar uma lista de contatos destinatária."
 
-#: edit.php:30
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
 msgid "You must select at least one contact first."
 msgstr "Você deve selecionar pelo menos um contato primeiro."
 
-#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:45
-#: templates/browse/javascript.inc:68
-msgid "You must select at least one entry first."
-msgstr "Você deve selecionar pelo menos um registro."
-
-#: edit.php:68
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
 msgid "You only have permission to view this contact."
-msgstr "Você somente tem permissão de visualizar este contato."
+msgstr "Você somente tem permissão de ver este contato."
+
+#: lib/Views/Browse.php:369
+msgid "Your default address book is not browseable."
+msgstr "Não é possível navegar nos seus contatos padrão"
+
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "Seu próprio contato"
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr "Seu próprio contato não foi encontrado nos contatos."
 
 #: templates/browse/contactrow.inc:12
 msgid "[no value]"
 msgstr "[sem valor]"
 
-#: lib/Turba.php:281
-msgid "_Add"
-msgstr "_Incluir"
-
-#: lib/Turba.php:280
+#: lib/Turba.php:601
 msgid "_Browse"
 msgstr "_Exibir"
 
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Contatos"
+
 #: templates/browse/actions.inc:3
 msgid "_Delete"
 msgstr "Exc_luir"
 
-#: lib/Turba.php:286
+#: contact.php:91
+msgid "_Edit"
+msgstr "_Editar"
+
+#: lib/Turba.php:610
 msgid "_Import/Export"
 msgstr "Importar/E_xportar"
 
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Listas"
+
+#: lib/Turba.php:598
+msgid "_My Address Books"
+msgstr "_Meus Contatos"
+
+#: lib/Turba.php:604
+msgid "_New Contact"
+msgstr "_Novo Contato"
+
+#: lib/Turba.php:615
+msgid "_Print"
+msgstr "Im_primir"
+
 #: templates/browse/actions.inc:3
 msgid "_Remove from this list"
 msgstr "_Remover desta lista"
 
-#: lib/Turba.php:282
+#: lib/Turba.php:606
 msgid "_Search"
-msgstr "_Pesquisar"
+msgstr "Pe_squisar"
 
-#: vcard.php:46
-msgid "contact.vcf"
-msgstr "contatos.vcf"
+#: contact.php:88
+msgid "_View"
+msgstr "_Ver"
+
+#: templates/browse/column_headers.inc:25
+msgid "ascending"
+msgstr "ascendente"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "por %s"
 
-#: data.php:172 data.php:177 templates/data/export.inc:1
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "por mim"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "contato"
+
+#: data.php:312 data.php:317 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "contatos.csv"
 
-#: data.php:182
+#: data.php:337
+msgid "contacts.ldif"
+msgstr "contatos.ldif"
+
+#: data.php:322
 msgid "contacts.tsv"
 msgstr "contatos.tsv"
 
-#: templates/browse/actions.inc:15
-msgid "to Selected Address Book"
-msgstr "para o Catálogo de Endereços Selecionado"
+#: data.php:332
+msgid "contacts.vcf"
+msgstr "contatos.vcf"
+
+#: templates/browse/column_headers.inc:25
+msgid "descending"
+msgstr "descendente"
+
+#: config/attributes.php.dist:433
+msgid "female"
+msgstr "feminino"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "em %s"
+
+#: config/attributes.php.dist:433
+msgid "male"
+msgstr "masculino"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "sem formatação"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "nenhum"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "para uma Lista de Contatos"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "para contatos diferentes"
 
-#: data.php:30 templates/browse/column_headers.inc:12
-#: templates/data/import.inc:20 templates/data/export.inc:20
+#: data.php:103 templates/browse/column_headers.inc:14
+#: templates/data/import.inc:15 templates/data/export.inc:15
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index d25773d..e8ce1d0 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Turba 2.0\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2008-05-12 11:43+0200\n"
-"PO-Revision-Date: 2008-03-19 12:00+0100\n"
+"POT-Creation-Date: 2008-09-11 16:59+0200\n"
+"PO-Revision-Date: 2008-09-17 12:51+0100\n"
 "Last-Translator: Ivan Noris <vix at vazka.sk>\n"
 "Language-Team: Slovak <vix at vazka.sk>\n"
 "MIME-Version: 1.0\n"
@@ -24,18 +24,18 @@ msgstr " Prida
 msgid " Delete IMSP Address Book"
 msgstr " Vymaza» adresár IMSP"
 
-#: data.php:350
+#: data.php:455
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr "\"%s\" u¾ existuje a preto nebol importovaný."
 
-#: lib/Forms/EditContact.php:76
+#: lib/Forms/EditContact.php:83
 #, php-format
 msgid "\"%s\" updated, but saving the uploaded file failed: %s"
 msgstr ""
 "\"%s\" aktualizovaný, ale nastala chyba pri ukladaní poslaného súboru: %s"
 
-#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
 #, php-format
 msgid "\"%s\" updated."
 msgstr "\"%s\" aktualizované."
@@ -58,34 +58,34 @@ msgstr "\"Meno, Priezvisko\" (napr. John Doe)"
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr "\"Priezvisko, Meno\" (napr. Doe, John)"
 
-#: lib/Forms/AddContact.php:83
+#: lib/Driver.php:607
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s má %s"
+
+#: lib/Forms/AddContact.php:88
 #, php-format
 msgid "%s added."
 msgstr "%s bol(a) pridaný(á)."
 
-#: data.php:369
+#: data.php:483
 #, php-format
 msgid "%s file successfully imported."
 msgstr "Súbor %s bol úspe¹ne importovaný."
 
-#: lib/Driver.php:555
-#, php-format
-msgid "%s of %s"
-msgstr "%s z %s"
-
 #: templates/list/numPager.inc:6
 #, php-format
 msgid "%s to %s of %s"
 msgstr "%s a¾ %s z %s"
 
-#: lib/Turba.php:560
+#: lib/Turba.php:541
 #, php-format
 msgid "%s's Address Book"
 msgstr "Adresár pou¾ívateµa %s"
 
-#: lib/Block/minisearch.php:42
-msgid "A browser that supports iFrames is required"
-msgstr "Prehliadaè musí podporova» iFrames"
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr "Vy¾adovaný je prehliadaè podporujúci funkciu iFrames"
 
 #: view.php:54
 #, php-format
@@ -112,11 +112,11 @@ msgstr "Prida
 msgid "Add to"
 msgstr "Prida» do"
 
-#: lib/Driver.php:1876 lib/Driver/null.php:57
+#: lib/Driver.php:2100 lib/Driver/null.php:57
 msgid "Adding contacts is not available."
 msgstr "Pridávanie kontaktov nie je k dispozícii."
 
-#: templates/addressbook_list.php:16 templates/addressbooks.inc:105
+#: templates/addressbook_list.php:16
 msgid "Address Book"
 msgstr "Adresár"
 
@@ -132,20 +132,16 @@ msgstr "Zobrazi
 msgid "Address Books"
 msgstr "Adresáre"
 
-#: data.php:330
+#: data.php:435
 msgid "Address book successfully purged."
 msgstr "Adresár bol úspe¹ne vymazaný."
 
-#: templates/addressbooks.inc:80
-msgid "Address book to delete "
-msgstr "Adresár, ktorý má by» zmazaný "
-
 #: templates/prefs/addressbookselect.inc:167
 #: templates/prefs/addressbookselect.inc:169
 msgid "Address books that will not be displayed:"
 msgstr "Adresáre, ktoré nebudú zobrazené:"
 
-#: search.php:199 templates/browse/search.inc:47
+#: search.php:184 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Roz¹írené vyhµadávanie"
 
@@ -157,7 +153,7 @@ msgstr "Prez
 msgid "All"
 msgstr "V¹etky"
 
-#: lib/api.php:810
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr "U¾ existuje"
 
@@ -178,15 +174,11 @@ msgstr "Naozaj chcete vymaza
 msgid "Are you sure that you want to delete the selected contacts?"
 msgstr "Naozaj chcete vymaza» vybrané adresy?"
 
-#: templates/addressbooks.inc:45
-msgid "Are you sure you want to delete the addressbook: "
-msgstr "Naozaj chcete vymaza» adresár: "
-
-#: config/attributes.php.dist:378
+#: config/attributes.php.dist:424
 msgid "Assistant"
 msgstr "Asistent/ka"
 
-#: search.php:196 templates/browse/search.inc:46
+#: search.php:181 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "Základné hµadanie"
 
@@ -203,7 +195,7 @@ msgstr "Narodeniny"
 msgid "Birthdays"
 msgstr "Narodeniny"
 
-#: contact.php:106 templates/browse/row.inc:6
+#: contact.php:128 templates/browse/row.inc:10
 msgid "Blank name"
 msgstr "Prázdne meno"
 
@@ -211,16 +203,16 @@ msgstr "Pr
 msgid "Both"
 msgstr "Obe"
 
-#: addressbooks/index.php:39 templates/menu.inc:8
-#: templates/addressbook_list.php:29
+#: templates/menu.inc:8 templates/addressbook_list.php:29
+#: addressbooks/index.php:39
 msgid "Browse"
 msgstr "Prezera»"
 
-#: config/attributes.php.dist:288
+#: config/attributes.php.dist:300
 msgid "Business Category"
 msgstr "Obchodné zameranie"
 
-#: data.php:60
+#: data.php:101
 msgid "CSV"
 msgstr "CSV (hodnoty oddelené èiarkou)"
 
@@ -237,24 +229,24 @@ msgstr "Zru
 msgid "Cannot delete all address book entries for %s"
 msgstr "Nemo¾né vymaza» v¹etky záznamy v adresári pre %s"
 
-#: config/attributes.php.dist:350
+#: config/attributes.php.dist:388
 msgid "Category"
 msgstr "Kategória"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 #, php-format
 msgid "Change %s sort to %s"
 msgstr "Zmeni» %s zoraïovanie podµa %s"
 
-#: addressbooks/index.php:41 templates/addressbook_list.php:33
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
 msgid "Change Permissions"
 msgstr "Zmeni» prístupové práva"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check All/None"
 msgstr "Vybra» v¹etky/¾iadne"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check _All/None"
 msgstr "Vybra» _v¹etky/¾iadne"
 
@@ -262,10 +254,6 @@ msgstr "Vybra
 msgid "Children"
 msgstr "Deti"
 
-#: templates/addressbooks.inc:60
-msgid "Choose a name"
-msgstr "Zvoµte názov"
-
 #: lib/Forms/AddContact.php:36
 msgid "Choose an address book"
 msgstr "Vyberte si adresár"
@@ -278,11 +266,15 @@ msgstr "Vyberte, ktor
 msgid "Choose which address books to use."
 msgstr "Vyberte adresár, ktorý chcete pou¾i»."
 
-#: templates/prefs/columnselect.inc:43
-msgid "Click an address book to sort its columns:"
-msgstr "Kliknite na adresár na zoradenie jeho prieèinkov:"
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+"Kliknite na adresár na zoradenie jeho ståpcov. Presunte ståpce na zmenu ich "
+"poradia. Kliknite na ståpec na jeho zapnutie."
 
-#: templates/block/minisearch.inc:27
+#: templates/block/minisearch.inc:26
 msgid "Close"
 msgstr "Zavrie»"
 
@@ -302,58 +294,59 @@ msgstr "Hodnoty oddelen
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "Hodnoty oddelené èiarkou (Microsoft Outlook)"
 
-#: config/attributes.php.dist:476
+#: config/attributes.php.dist:522
 msgid "Common Address Extended"
 msgstr "Roz¹írená adresa (v¹eobecné)"
 
-#: config/attributes.php.dist:494
+#: config/attributes.php.dist:540
 msgid "Common City"
 msgstr "Mesto (v¹eobecné)"
 
-#: config/attributes.php.dist:512
+#: config/attributes.php.dist:558
 msgid "Common Country"
 msgstr "©tát (v¹eobecné)"
 
-#: config/attributes.php.dist:420
+#: config/attributes.php.dist:466
 msgid "Common Phone"
 msgstr "Telefón (v¹eobecné)"
 
-#: config/attributes.php.dist:488
+#: config/attributes.php.dist:534
 msgid "Common Post Office Box"
 msgstr "P.O.Box (v¹eobecné)"
 
-#: config/attributes.php.dist:506
+#: config/attributes.php.dist:552
 msgid "Common Postal Code"
 msgstr "Smerovacie èíslo (v¹eobecné)"
 
-#: config/attributes.php.dist:500
+#: config/attributes.php.dist:546
 msgid "Common State/Province"
 msgstr "©tát/provincia (v¹eobecné)"
 
-#: config/attributes.php.dist:482
+#: config/attributes.php.dist:528
 msgid "Common Street"
 msgstr "Ulica (v¹eobecné)"
 
-#: config/attributes.php.dist:445
+#: config/attributes.php.dist:491
 msgid "Common Video Call"
 msgstr "Videohovor (v¹eobecné)"
 
-#: config/sources.php.dist:243 config/sources.php.dist:922
+#: config/sources.php.dist:256 config/sources.php.dist:948
 msgid "Communications"
 msgstr "Komunikácia"
 
-#: config/attributes.php.dist:294
+#: config/attributes.php.dist:306
 msgid "Company"
 msgstr "Spoloènos»"
 
-#: config/attributes.php.dist:223
+#: config/attributes.php.dist:235
 msgid "Company Address"
 msgstr "Adresa spoloènosti"
 
-#: scripts/import_squirrelmail_abook.php:112 lib/api.php:433 lib/api.php:478
-#: lib/api.php:529 lib/api.php:572 lib/api.php:627 lib/api.php:686
-#: lib/api.php:736 lib/api.php:872 lib/api.php:964 lib/api.php:1030
-#: lib/api.php:1136 lib/api.php:1369 lib/api.php:1446 lib/api.php:1595
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
 #, php-format
 msgid "Connection failed: %s"
 msgstr "Pokus o spojenie zlyhal: %s"
@@ -366,7 +359,7 @@ msgstr "Nastala chyba pri pokuse o spojenie"
 msgid "Contact Search"
 msgstr "Hµada» kontakt"
 
-#: config/sources.php.dist:851
+#: config/sources.php.dist:866
 msgid "Contacts"
 msgstr "Kontakty"
 
@@ -374,7 +367,7 @@ msgstr "Kontakty"
 msgid "Contacts displayed:"
 msgstr "Zobrazené kontakty:"
 
-#: lib/Views/Browse.php:339
+#: lib/Views/Browse.php:346
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "Kontakty v zozname: %s"
@@ -383,11 +376,11 @@ msgstr "Kontakty v zozname: %s"
 msgid "Copy"
 msgstr "Kopírova»"
 
-#: templates/addressbooks.inc:69 lib/Forms/CreateAddressBook.php:39
+#: lib/Forms/CreateAddressBook.php:39
 msgid "Create"
 msgstr "Vytvori»"
 
-#: templates/addressbooks.inc:56 lib/Forms/CreateAddressBook.php:34
+#: lib/Forms/CreateAddressBook.php:34
 msgid "Create Address Book"
 msgstr "Vytvori» adresár"
 
@@ -395,7 +388,7 @@ msgstr "Vytvori
 msgid "Create a new Address Book"
 msgstr "Vytvori» nový adresár"
 
-#: lib/ListView.php:447
+#: lib/ListView.php:448
 msgid "Create a new Contact List in:"
 msgstr "Vytvori» nový zoznam kontaktov v:"
 
@@ -403,13 +396,13 @@ msgstr "Vytvori
 msgid "Created"
 msgstr "Vytvorené"
 
-#: contact.php:89
+#: contact.php:95
 msgid "De_lete"
 msgstr "Vy_maza»"
 
-#: addressbooks/index.php:42 templates/addressbook_list.php:35
-#: templates/addressbooks.inc:94 templates/browse/actions.inc:3
-#: lib/Views/DeleteContact.php:58 lib/Forms/DeleteAddressBook.php:45
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: addressbooks/index.php:42 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
 msgid "Delete"
 msgstr "Vymaza»"
 
@@ -418,16 +411,16 @@ msgstr "Vymaza
 msgid "Delete %s"
 msgstr "Vymaza» %s"
 
-#: templates/addressbooks.inc:76
-msgid "Delete Address Book"
-msgstr "Vymaza» adresár"
+#: lib/api.php:644
+msgid "Delete denied."
+msgstr "Vymazanie odmietnuté."
 
 #: lib/Driver/ldap.php:321
 #, php-format
 msgid "Delete failed: (%s) %s"
 msgstr "Vymazávanie zlyhalo: (%s) %s"
 
-#: lib/Driver.php:1884 lib/Driver/null.php:62
+#: lib/Driver.php:2108 lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
 msgstr "Vymazávanie kontaktov nie je k dispozícii."
 
@@ -435,12 +428,11 @@ msgstr "Vymaz
 msgid "Deletion failed"
 msgstr "Vymazávanie zlyhalo"
 
-#: config/attributes.php.dist:300
+#: config/attributes.php.dist:312
 msgid "Department"
 msgstr "Oddelenie"
 
-#: templates/addressbooks.inc:138 lib/Forms/CreateAddressBook.php:37
-#: lib/Forms/EditAddressBook.php:44
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
 msgid "Description"
 msgstr "Popis"
 
@@ -457,24 +449,19 @@ msgstr "Zobrazenie"
 msgid "Display Options"
 msgstr "Nastavenie zobrazenia"
 
-#: lib/Object.php:348
+#: lib/Object.php:354
 msgid "Download"
 msgstr "Stiahnu»"
 
-#: templates/browse/row.inc:15 templates/browse/row.inc:16
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
 #: templates/browse/contactrow.inc:25
 msgid "Download vCard"
 msgstr "Stiahnu» vCard"
 
-#: templates/prefs/columnselect.inc:52
-msgid "Drag columns to re-arrange them. Check a column to enable it."
-msgstr ""
-"Presunte ståpce na zmenu ich poradia. Kliknite na ståpec na jeho zapnutie."
-
-#: addressbooks/index.php:40 templates/addressbook_list.php:31
-#: templates/addressbooks.inc:123 templates/browse/actions.inc:6
-#: templates/browse/row.inc:28 templates/browse/row.inc:29
-#: templates/browse/column_headers.inc:10 templates/browse/contactrow.inc:33
+#: templates/addressbook_list.php:31 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/column_headers.inc:11
+#: templates/browse/actions.inc:6 templates/browse/contactrow.inc:33
+#: addressbooks/index.php:40
 msgid "Edit"
 msgstr "Upravi»"
 
@@ -488,24 +475,20 @@ msgstr "Upravi
 msgid "Edit %s"
 msgstr "Upravi» %s"
 
-#: templates/addressbooks.inc:100
-msgid "Edit Address Books"
-msgstr "Upravi» adresáre"
-
-#: config/attributes.php.dist:237
+#: config/attributes.php.dist:249
 msgid "Email"
 msgstr "Email"
 
-#: config/attributes.php.dist:243
+#: config/attributes.php.dist:255
 msgid "Emails"
 msgstr "E-Maily"
 
-#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
 #, php-format
 msgid "Error adding %d contact(s) to list."
 msgstr "Nastala chyba pri pridávaní %d kontaktov do zoznamu."
 
-#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
 msgstr "Nastala chyba pri pridávaní %d z %d po¾adovaných kontaktov do zoznamu."
@@ -531,7 +514,7 @@ msgid "Error removing %d of %d requested contact(s) from list."
 msgstr ""
 "Nastala chyba pri vymazávaní %d z %d po¾adovaných kontaktov zo zoznamu."
 
-#: lib/api.php:578
+#: lib/api.php:707
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr "Nastala chyba pri prehµadávaní adresára: %s"
@@ -552,7 +535,7 @@ msgstr "Exportova
 msgid "Export the following address book completely."
 msgstr "Exportova» celý nasledujúci adresár."
 
-#: data.php:142 data.php:241 data.php:319 add.php:42 search.php:121
+#: data.php:247 data.php:346 data.php:424 add.php:42 search.php:106
 #: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
@@ -563,11 +546,11 @@ msgstr "Nastala chyba pri pr
 msgid "Failed to add %s to %s: %s"
 msgstr "Nastala chyba pri pridávaní %s do %s: %s"
 
-#: lib/Views/Browse.php:345
+#: lib/Views/Browse.php:352
 msgid "Failed to browse list"
 msgstr "Nemo¾no zobrazi» zoznam"
 
-#: lib/Views/Browse.php:376
+#: lib/Views/Browse.php:383
 msgid "Failed to browse the directory"
 msgstr "Nastala chyba pri prehµadávaní adresára."
 
@@ -582,20 +565,20 @@ msgstr ""
 msgid "Failed to find object to be added: %s"
 msgstr "Nemo¾no nájs» objekt na pridanie: %s"
 
-#: search.php:190
+#: search.php:175
 msgid "Failed to search the address book"
 msgstr "Nastala chyba pri hµadaní adresára"
 
-#: data.php:157
+#: data.php:262
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "Nastala chyba pri prehµadávaní adresára: %s"
 
-#: config/sources.php.dist:550
+#: config/sources.php.dist:565
 msgid "Favourite Recipients"
 msgstr "Obµúbení adresáti"
 
-#: config/attributes.php.dist:264
+#: config/attributes.php.dist:276
 msgid "Fax"
 msgstr "Fax"
 
@@ -607,7 +590,7 @@ msgstr "S
 msgid "Find"
 msgstr "Nájs»"
 
-#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
 msgid "Finish"
 msgstr "Ukonèi»"
 
@@ -615,7 +598,7 @@ msgstr "Ukon
 msgid "First Name"
 msgstr "Krstné meno"
 
-#: config/attributes.php.dist:326
+#: config/attributes.php.dist:350
 msgid "Freebusy URL"
 msgstr "URL s informáciou o voµnosti/obsadenosti"
 
@@ -623,83 +606,83 @@ msgstr "URL s inform
 msgid "From"
 msgstr "Z"
 
-#: config/attributes.php.dist:384
+#: config/attributes.php.dist:430
 msgid "Gender"
 msgstr "Pohlavie"
 
-#: config/sources.php.dist:776
+#: config/sources.php.dist:791
 msgid "Global Address Book"
 msgstr "Globálny adresár"
 
-#: templates/browse/row.inc:49 templates/browse/contactrow.inc:44
+#: templates/browse/row.inc:61 templates/browse/contactrow.inc:44
 msgid "Group"
 msgstr "Skupina"
 
-#: config/attributes.php.dist:123
+#: config/attributes.php.dist:135
 msgid "Home Address"
 msgstr "Adresa (domov)"
 
-#: config/attributes.php.dist:546
+#: config/attributes.php.dist:592
 msgid "Home Address Extended"
 msgstr "Roz¹írená adresa (domov)"
 
-#: config/attributes.php.dist:141
+#: config/attributes.php.dist:153
 msgid "Home City"
 msgstr "Mesto (domov)"
 
-#: config/attributes.php.dist:159
+#: config/attributes.php.dist:171
 msgid "Home Country"
 msgstr "Krajina (domov)"
 
-#: config/attributes.php.dist:414
+#: config/attributes.php.dist:460
 msgid "Home Email"
 msgstr "E-mail (domov)"
 
-#: config/attributes.php.dist:430
+#: config/attributes.php.dist:476
 msgid "Home Fax"
 msgstr "Fax (domov)"
 
-#: config/attributes.php.dist:552
+#: config/attributes.php.dist:598
 msgid "Home Latitude"
 msgstr "Zemepisná ¹írka (domov)"
 
-#: config/attributes.php.dist:557
+#: config/attributes.php.dist:603
 msgid "Home Longitude"
 msgstr "Zemepisná då¾ka (domov)"
 
-#: config/attributes.php.dist:440
+#: config/attributes.php.dist:486
 msgid "Home Mobile Phone"
 msgstr "Mobilný telefón (domov)"
 
-#: config/attributes.php.dist:249
+#: config/attributes.php.dist:261
 msgid "Home Phone"
 msgstr "Telefón (domov)"
 
-#: config/attributes.php.dist:135
+#: config/attributes.php.dist:147
 msgid "Home Post Office Box"
 msgstr "P.O.Box (domov)"
 
-#: config/attributes.php.dist:153
+#: config/attributes.php.dist:165
 msgid "Home Postal Code"
 msgstr "Smerovacie èíslo (domov)"
 
-#: config/attributes.php.dist:147
+#: config/attributes.php.dist:159
 msgid "Home State/Province"
 msgstr "©tát/provincia (domov)"
 
-#: config/attributes.php.dist:129
+#: config/attributes.php.dist:141
 msgid "Home Street Address"
 msgstr "Ulica a èíslo (domov)"
 
-#: config/attributes.php.dist:455
+#: config/attributes.php.dist:501
 msgid "Home Video Call"
 msgstr "Videohobor (domov)"
 
-#: config/attributes.php.dist:540
+#: config/attributes.php.dist:586
 msgid "Home Website URL"
 msgstr "URL WWW stránky (domov)"
 
-#: config/sources.php.dist:667
+#: config/sources.php.dist:682
 msgid "IMSP"
 msgstr "IMSP"
 
@@ -708,38 +691,38 @@ msgstr "IMSP"
 msgid "Import Address Book, Step %d"
 msgstr "Importova» adresár, krok %d"
 
-#: data.php:387
+#: data.php:501
 msgid "Import/Export Address Books"
 msgstr "Importova»/Exportova» adresáre"
 
-#: config/attributes.php.dist:360
+#: config/attributes.php.dist:406
 msgid "Initials"
 msgstr "Iniciály"
 
-#: config/attributes.php.dist:366
+#: config/attributes.php.dist:412
 msgid "Instant Messenger"
 msgstr "Instantný messenger"
 
-#: lib/api.php:867 lib/api.php:959
+#: lib/api.php:999 lib/api.php:1132
 msgid "Invalid ID"
 msgstr "Neplatné ID"
 
-#: scripts/import_squirrelmail_abook.php:105 lib/api.php:345 lib/api.php:567
-#: lib/api.php:622 lib/api.php:681 lib/api.php:729 lib/api.php:863
-#: lib/api.php:955 lib/api.php:1020 lib/api.php:1578
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
 #, php-format
 msgid "Invalid address book: %s"
 msgstr "Neplatný adresár: %s"
 
-#: lib/api.php:1024
+#: lib/api.php:1198
 msgid "Invalid contact unique ID"
 msgstr "Neplatné unikátne ID kontaktu"
 
-#: lib/api.php:1582 lib/api.php:1668 lib/api.php:1729
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
 msgid "Invalid email"
 msgstr "Neplatná e-mailová adresa"
 
-#: lib/api.php:1590
+#: lib/api.php:1786
 msgid "Invalid entry"
 msgstr "Neplatná polo¾ka"
 
@@ -747,15 +730,15 @@ msgstr "Neplatn
 msgid "Invalid key specified."
 msgstr "Bol zadaný neplatný kµúè."
 
-#: lib/api.php:1586
+#: lib/api.php:1782
 msgid "Invalid name"
 msgstr "Neplatné meno"
 
-#: config/attributes.php.dist:276
+#: config/attributes.php.dist:288
 msgid "Job Title"
 msgstr "Funkcia"
 
-#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
 #, php-format
 msgid "Key for saving must be a UID not %s!"
 msgstr "Kµúè pre ulo¾enie musí by» UID a nie %s!"
@@ -766,11 +749,11 @@ msgid ""
 msgstr ""
 "Je po¾adovaná podpora LDAP, ale LDAP modul nie je dostupný alebo nahratý."
 
-#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
 msgid "LDIF Address Book"
 msgstr "Adresár LDIF"
 
-#: config/attributes.php.dist:390
+#: config/attributes.php.dist:436
 msgid "Language"
 msgstr "Jazyk"
 
@@ -782,35 +765,51 @@ msgstr "Posledn
 msgid "Last Name"
 msgstr "Priezvisko"
 
-#: config/attributes.php.dist:396
+#: config/attributes.php.dist:442
 msgid "Latitude"
 msgstr "Zemepisná ¹írka"
 
-#: templates/browse/column_headers.inc:16
+#: templates/browse/column_headers.inc:17
 msgid "List"
 msgstr "Zoznam"
 
-#: config/sources.php.dist:238 config/sources.php.dist:918
+#: config/sources.php.dist:251 config/sources.php.dist:944
 msgid "Location"
 msgstr "Adresa"
 
-#: config/attributes.php.dist:401
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "Logo"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr "MIME typ loga"
+
+#: config/attributes.php.dist:447
 msgid "Longitude"
 msgstr "Zemepisná då¾ka"
 
-#: addressbooks/index.php:46 templates/addressbook_list.php:2
+#: lib/api.php:616
+msgid "Malformed request."
+msgstr "Chybná po¾iadavka."
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
 msgid "Manage Address Books"
 msgstr "Spravova» adresáre"
 
-#: config/attributes.php.dist:372
+#: config/attributes.php.dist:418
 msgid "Manager"
 msgstr "Mana¾ér"
 
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Oznaèi» tento kontakt pre vlastnú vizitku"
+
 #: templates/browse/search.inc:109
 msgid "Matching"
 msgstr "Obsahujúce"
 
-#: lib/api.php:306
+#: lib/api.php:329
 msgid "Maximum Number of Contacts"
 msgstr "Maximálny poèet kontaktov"
 
@@ -830,7 +829,7 @@ msgstr "Prostredn
 msgid "Missing DN in LDAP source configuration."
 msgstr "Chýba DN v konfigurácii LDAP zdroja."
 
-#: config/attributes.php.dist:259
+#: config/attributes.php.dist:271
 msgid "Mobile Phone"
 msgstr "Mobilný telefón"
 
@@ -843,7 +842,7 @@ msgstr "
 msgid "More Options..."
 msgstr "Ïal¹ie nastavenia..."
 
-#: lib/api.php:1706
+#: lib/api.php:1902
 msgid "More than 1 entry found"
 msgstr "Vyhovuje viac ako 1 polo¾ka"
 
@@ -859,26 +858,22 @@ msgstr "Presun
 msgid "Move right"
 msgstr "Presunú» vpravo"
 
-#: data.php:63 templates/data/import.inc:16
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr "Adresár z Mulberry"
 
-#: lib/api.php:1614
+#: lib/api.php:1810
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
 msgstr "Existuje viacero osôb s adresou [%s], ale ¾iadna s menom [%s]"
 
-#: config/sources.php.dist:162
+#: config/sources.php.dist:167
 msgid "My Address Book"
 msgstr "Môj adresár"
 
-#: addressbooks.php:174
-msgid "My Address Books"
-msgstr "Moje adresáre"
-
-#: templates/addressbooks.inc:130 lib/Forms/CreateAddressBook.php:36
-#: lib/Forms/EditAddressBook.php:43 config/attributes.php.dist:47
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
 msgid "Name"
 msgstr "Meno"
 
@@ -898,12 +893,12 @@ msgstr "Pr
 msgid "Name:"
 msgstr "Meno:"
 
-#: add.php:70 lib/Block/tree_menu.php:27
+#: add.php:70 lib/Block/tree_menu.php:28
 msgid "New Contact"
 msgstr "Nový kontakt"
 
-#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
-#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
 msgid "Next"
 msgstr "Ïalej"
 
@@ -911,31 +906,31 @@ msgstr "
 msgid "Nickname"
 msgstr "Prezývka"
 
-#: lib/api.php:1709 lib/api.php:1769
+#: lib/api.php:1905 lib/api.php:1965
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "Pre %s neexistuje nijaká polo¾ka %s"
 
-#: data.php:52
+#: data.php:93
 msgid ""
 "No Address Books are currently available. Import and Export is disabled."
 msgstr ""
 "®iadne adresáre nie sú momentálne dostupné. Import a export sú vypnuté."
 
-#: search.php:107
+#: search.php:92
 msgid "No Address Books are currently available. Searching is disabled."
 msgstr "®iadne adresáre nie sú momentálne dostupné. Hµadanie je vypnuté."
 
-#: lib/api.php:561 lib/api.php:616 lib/api.php:676 lib/api.php:858
-#: lib/api.php:950 lib/api.php:1015
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
 msgid "No address book specified"
 msgstr "Nebol zadaný ¾iaden adresár"
 
-#: minisearch.php:77
+#: minisearch.php:80
 msgid "No contacts found"
 msgstr "Neboli nájdené ¾iadne kontakty"
 
-#: templates/browse/column_headers.inc:43
+#: templates/browse/column_headers.inc:44
 msgid "No contacts match the current filter."
 msgstr "®iadne kontakty neodpovedajú aktuálnemu filtru."
 
@@ -947,7 +942,7 @@ msgstr "
 msgid "No source for favourite recipients exists."
 msgstr "Neexistuje ¾iaden zdroj pre obµúbených adresátov."
 
-#: lib/api.php:762 lib/api.php:1060
+#: lib/api.php:893 lib/api.php:1235
 msgid "No vCard data was found."
 msgstr "Neboli nájdené údaje vCard."
 
@@ -955,8 +950,8 @@ msgstr "Neboli n
 msgid "None"
 msgstr "®iadne"
 
-#: lib/Views/DeleteContact.php:26 lib/Views/EditContact.php:33
-#: lib/Views/Contact.php:49
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
 msgid "Not Found"
 msgstr "Nenájdené"
 
@@ -964,7 +959,7 @@ msgstr "Nen
 msgid "Not found"
 msgstr "Nenájdené"
 
-#: config/attributes.php.dist:314
+#: config/attributes.php.dist:338
 msgid "Notes"
 msgstr "Poznámky"
 
@@ -972,20 +967,20 @@ msgstr "Pozn
 msgid "Number of items per page"
 msgstr "Poèet polo¾iek na stránku"
 
-#: lib/api.php:909 lib/api.php:1085
+#: lib/api.php:1041 lib/api.php:1260
 msgid "Object not found"
 msgstr "Objekt nebol nájdený"
 
-#: lib/Driver/kolab.php:1184
+#: lib/Driver/kolab.php:1199
 #, php-format
 msgid "Object with UID %s does not exist!"
 msgstr "Objekt s UID %s neexistuje!"
 
-#: config/attributes.php.dist:282
+#: config/attributes.php.dist:294
 msgid "Occupation"
 msgstr "Povolanie"
 
-#: config/attributes.php.dist:306
+#: config/attributes.php.dist:318
 msgid "Office"
 msgstr "Pracovisko"
 
@@ -998,27 +993,27 @@ msgstr ""
 "Po ulo¾ení tejto stránky s nastaveniami bude Vá¹ adresár trvale vymazaný. Ak "
 "toto nechcete, musíte zmeni» Vá¹ výber na \"®iaden\"."
 
-#: lib/api.php:1068
+#: lib/api.php:1243
 msgid "Only one vcard supported."
 msgstr "Iba jedna vcard je podporovaná"
 
-#: config/sources.php.dist:245 config/sources.php.dist:924
+#: config/sources.php.dist:258 config/sources.php.dist:950
 msgid "Organization"
 msgstr "Organizácia"
 
-#: config/sources.php.dist:246 config/sources.php.dist:926
+#: config/sources.php.dist:259 config/sources.php.dist:952
 msgid "Other"
 msgstr "Iné"
 
-#: config/attributes.php.dist:332
+#: config/attributes.php.dist:356
 msgid "PGP Public Key"
 msgstr "PGP verejný kµúè"
 
-#: config/attributes.php.dist:471
+#: config/attributes.php.dist:517
 msgid "PTT"
 msgstr "PTT"
 
-#: config/attributes.php.dist:269
+#: config/attributes.php.dist:281
 msgid "Pager"
 msgstr "Pager"
 
@@ -1026,20 +1021,24 @@ msgstr "Pager"
 msgid "Permanently delete this contact?"
 msgstr "Trvale vymaza» tento kontakt?"
 
-#: deletefile.php:36 lib/Driver.php:721 lib/api.php:740 lib/api.php:1599
-#: lib/Driver/sql.php:486
+#: deletefile.php:36 lib/Driver.php:791 lib/api.php:870 lib/api.php:1795
+#: lib/Driver/sql.php:515
 msgid "Permission denied"
 msgstr "Prístup zamietnutý"
 
-#: templates/addressbooks.inc:120
-msgid "Permissions"
-msgstr "Práva"
-
-#: config/sources.php.dist:235 config/sources.php.dist:914
+#: config/sources.php.dist:248 config/sources.php.dist:940
 msgid "Personal"
 msgstr "Osobné"
 
-#: data.php:64 templates/data/import.inc:17
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "Fotografia"
+
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr "MIME typ fotografie"
+
+#: data.php:105 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr "Adresár z Pine"
 
@@ -1047,8 +1046,8 @@ msgstr "Adres
 msgid "Please name the new contact list:"
 msgstr "Zadajte prosím meno pre nový zoznam:"
 
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:167
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
 msgid "Previous"
 msgstr "Predo¹lé"
 
@@ -1062,7 +1061,7 @@ msgstr "Chybn
 msgid "Read failed: (%s) %s"
 msgstr "Chyba pri èítaní: (%s) %s"
 
-#: lib/Driver.php:1868 lib/Driver/null.php:52
+#: lib/Driver.php:2092 lib/Driver/null.php:52
 msgid "Reading contacts is not available."
 msgstr "Èitanie kontaktov nie je k dispozícii."
 
@@ -1083,7 +1082,7 @@ msgstr "Vzdialen
 msgid "Remove from this list"
 msgstr "Odstráni» zo zoznamu"
 
-#: lib/Driver.php:1906
+#: lib/Driver.php:2130
 msgid ""
 "Removing user data is not supported in the current address book storage "
 "driver."
@@ -1099,7 +1098,7 @@ msgstr ""
 "Prepísa» existujúci adresár importovaným adresárom? <strong>Varovanie: toto "
 "vyma¾e v¹etky polo¾ky vo Va¹om aktuálnom adresári.</strong>"
 
-#: lib/Driver.php:615
+#: lib/Driver.php:685
 msgid "Requested object not found."
 msgstr "Po¾adovaný objekt nebol nájdený"
 
@@ -1107,11 +1106,11 @@ msgstr "Po
 msgid "Reset to Defaults"
 msgstr "Obnovi» na prednastavené hodnoty"
 
-#: config/attributes.php.dist:338
+#: config/attributes.php.dist:362
 msgid "S/MIME Public Certificate"
 msgstr "Verejný S/MIME certifikát"
 
-#: config/attributes.php.dist:465
+#: config/attributes.php.dist:511
 msgid "SIP"
 msgstr "SIP"
 
@@ -1120,8 +1119,7 @@ msgstr "SIP"
 msgid "STARTTLS failed: (%s) %s"
 msgstr "Chyba pri STARTTLS: (%s) %s"
 
-#: templates/addressbooks.inc:147 lib/Forms/EditAddressBook.php:46
-#: lib/Forms/EditContact.php:26
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
 msgid "Save"
 msgstr "Ulo¾i»"
 
@@ -1129,42 +1127,34 @@ msgstr "Ulo
 msgid "Save search as a virtual address book?"
 msgstr "Ulo¾i» hµadanie ako virtuálny adresár?"
 
-#: lib/Driver.php:1894 lib/Driver/null.php:67
+#: lib/Driver.php:2118 lib/Driver/null.php:67
 msgid "Saving contacts is not available."
 msgstr "Ukladanie kontaktov nie je k dispozícii."
 
-#: templates/browse/header.inc:3 templates/browse/search.inc:111
-#: templates/browse/search.inc:119 templates/block/minisearch.inc:26
-#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
 msgid "Search"
 msgstr "Hµada»"
 
-#: lib/api.php:1374
+#: lib/api.php:1568
 msgid "Search failed"
 msgstr "Hµadanie zlyhalo"
 
-#: lib/api.php:1604 lib/api.php:1610 lib/api.php:1619 lib/api.php:1632
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
 #, php-format
 msgid "Search failed: %s"
 msgstr "Hµadanie zlyhalo: %s"
 
-#: templates/block/minisearch.inc:24
+#: templates/block/minisearch.inc:23
 msgid "Search for: "
 msgstr "Hµada»: "
 
-#: lib/Driver.php:1853 lib/Driver/null.php:47
+#: lib/Driver.php:2077 lib/Driver/null.php:47
 msgid "Searching is not available."
 msgstr "Hµadanie nie je k dispozícii."
 
-#: templates/addressbooks.inc:84
-msgid "Select an address book to delete"
-msgstr "Zvoµte adresár na vymazanie"
-
-#: templates/addressbooks.inc:109
-msgid "Select an address book to edit"
-msgstr "Zvoµte adresár na úpravu"
-
-#: templates/browse/row.inc:40
+#: templates/browse/row.inc:52
 msgid "Select contact"
 msgstr "Zvoµte kontakt"
 
@@ -1243,17 +1233,17 @@ msgstr "Zobrazi
 msgid "Sort Direction"
 msgstr "Smer triedenia"
 
-#: templates/browse/column_headers.inc:31
+#: templates/browse/column_headers.inc:32
 #, php-format
 msgid "Sort by %s"
 msgstr "Zoradi» podµa %s"
 
-#: templates/browse/column_headers.inc:26
+#: templates/browse/column_headers.inc:27
 #, php-format
 msgid "Sort by %s only"
 msgstr "Zoradi» iba podµa %s"
 
-#: templates/browse/column_headers.inc:29
+#: templates/browse/column_headers.inc:30
 #, php-format
 msgid "Sort by %s, then by %s"
 msgstr "Zoradi» podµa %s, potom podµa %s"
@@ -1262,7 +1252,7 @@ msgstr "Zoradi
 msgid "Source:"
 msgstr "Zdroj:"
 
-#: lib/api.php:299
+#: lib/api.php:322
 msgid "Sources"
 msgstr "Zdroje"
 
@@ -1270,7 +1260,7 @@ msgstr "Zdroje"
 msgid "Spouse"
 msgstr "Partner"
 
-#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr "Do zoznamu bol(o) úspe¹ne pridaný(ch) %d kontakt(ov)."
@@ -1280,12 +1270,12 @@ msgstr "Do zoznamu bol(o) 
 msgid "Successfully added %s to %s"
 msgstr "Pridanie %s do %s bolo úspe¹né"
 
-#: lib/Views/Browse.php:291
+#: lib/Views/Browse.php:298
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr "Úspe¹ne vytvorený adresár \"%s\"."
 
-#: search.php:165
+#: search.php:150
 #, php-format
 msgid "Successfully created virtual address book \"%s\""
 msgstr "Úspe¹ne vytvorený virtuálny adresár \"%s\""
@@ -1300,7 +1290,7 @@ msgstr "
 msgid "Successfully removed %d contact(s) from list."
 msgstr "Zo zoznamu bolo úspe¹ne vymazaný(ch) %d kontakt(ov)."
 
-#: data.php:61
+#: data.php:102
 msgid "TSV"
 msgstr "TSV (hodnoty oddelené tabulátorom)"
 
@@ -1316,7 +1306,7 @@ msgstr "Cie
 msgid "Target Contact List"
 msgstr "Cieµový zoznam kontaktov"
 
-#: data.php:321
+#: data.php:426
 #, php-format
 msgid "The %s file didn't contain any contacts."
 msgstr "Súbor %s neobsahuje ¾iadne kontakty."
@@ -1325,7 +1315,7 @@ msgstr "S
 msgid "The VFS backend needs to be configured to enable attachment uploads."
 msgstr "Backend VFS musí by» nastavený aby bolo mo¾né priklada» súbory."
 
-#: lib/Driver.php:1824
+#: lib/Driver.php:2048
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr "Adresár \"%s\" neexistuje."
@@ -1335,26 +1325,15 @@ msgstr "Adres
 msgid "The address book \"%s\" has been created."
 msgstr "Adresár \"%s\" bol vytvorený."
 
-#: addressbooks.php:104
-#, php-format
-msgid "The address book \"%s\" was created successfully."
-msgstr "Adresár \"%s\" bol úspe¹ne vytvorený."
-
-#: addressbooks.php:130
-#, php-format
-msgid "The address book \"%s\" was removed successfully."
-msgstr "Adresár \"%s\" bol úspe¹ne zmazaný."
-
-#: addressbooks.php:151
-#, php-format
-msgid "The address book \"%s\" was successfully updated."
-msgstr "Adresár \"%s\" bol úspe¹ne aktualizovaný."
-
-#: data.php:328
+#: data.php:433
 #, php-format
 msgid "The address book could not be purged: %s"
 msgstr "Nepodarilo sa vymaza» kontakty z adresára: %s"
 
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Adresár s Va¹ou vizitkou u¾ neexistuje."
+
 #: addressbooks/delete.php:50
 #, php-format
 msgid "The addressbook \"%s\" has been deleted."
@@ -1379,12 +1358,12 @@ msgstr "Po
 msgid "The file \"%s\" has been deleted."
 msgstr "Súbor \"%s\" bol vymazaný."
 
-#: data.php:301
+#: data.php:406
 msgid "The import can be finished despite the warnings."
 msgstr "Importovanie mô¾e by» ukonèené napriek varovaniam."
 
-#: lib/Views/DeleteContact.php:36 lib/Views/EditContact.php:43
-#: lib/Views/Contact.php:59
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
 msgid "The requested contact was not found."
 msgstr "Po¾adovaný kontakt nebol nájdený."
 
@@ -1401,20 +1380,20 @@ msgstr ""
 "®iaden z dostupných adresárov neumo¾òuje vkladanie nových polo¾iek. Ak "
 "predpokladáte, ¾e ide o chybu, kontaktujte prosím správcu Vá¹ho systému."
 
-#: lib/Views/Browse.php:349
+#: lib/Views/Browse.php:356
 #, php-format
 msgid "There is %d contact in this list that is not viewable to you"
 msgid_plural "There are %d contacts in this list that are not viewable to you"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "V tomto zozname je %d kontakt, ktorý si nemô¾ete prezrie»."
+msgstr[1] "V tomto zozname sú %d kontakty, ktoré si nemô¾ete prezrie»."
+msgstr[2] "V tomto zozname je %d kontaktov, ktoré si nemô¾ete prezrie»."
 
-#: search.php:161
+#: search.php:146
 #, php-format
 msgid "There was a problem creating the virtual address book: %s"
 msgstr "Nastala chyba pri vytváraní virtuálneho adresára: %s"
 
-#: lib/Forms/AddContact.php:90
+#: lib/Forms/AddContact.php:95
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
@@ -1422,15 +1401,10 @@ msgstr ""
 "Nastala chyba pri pridávaní tohto kontaktu. Prosím kontaktujte správcu Vá¹ho "
 "systému."
 
-#: lib/Views/Browse.php:311
+#: lib/Views/Browse.php:318
 msgid "There was an error creating a new list."
 msgstr "Nastala chyba pri vytváraní nového zoznamu."
 
-#: addressbooks.php:96 addressbooks.php:102
-#, php-format
-msgid "There was an error creating this address book: %s"
-msgstr "Nastala chyba pri vytváraní tohto adresára: %s"
-
 #: lib/Views/Browse.php:221
 #, php-format
 msgid "There was an error deleting \"%s\" from the source address book."
@@ -1441,30 +1415,25 @@ msgstr "Nastala chyba pri vymaz
 msgid "There was an error deleting this contact: %s"
 msgstr "Nastala chyba pri vymazávaní tohto kontaktu: %s."
 
-#: lib/Views/Browse.php:355
+#: lib/Views/Browse.php:362
 msgid "There was an error displaying the list"
 msgstr "Nastala chyba pri zobrazovaní zoznamu"
 
-#: data.php:355
+#: data.php:469
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "Nastala chyba pri importe údajov: %s"
 
-#: lib/api.php:758 lib/api.php:1055
+#: lib/api.php:889 lib/api.php:1230
 msgid "There was an error importing the iCalendar data."
 msgstr "Nastala chyba pri importe údajov iCalendar."
 
-#: lib/api.php:235
+#: lib/api.php:258
 #, php-format
 msgid "There was an error removing an address book for %s"
 msgstr "Nastala chyba pri vymazávaní adresára %s"
 
-#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
-#, php-format
-msgid "There was an error removing this address book: %s"
-msgstr "Nastala chyba pri vymazávaní tohto adresára: %s"
-
-#: lib/Forms/EditContact.php:86
+#: lib/Forms/EditContact.php:93
 msgid ""
 "There was an error saving the contact. Contact your system administrator for "
 "further help."
@@ -1472,12 +1441,7 @@ msgstr ""
 "Nastala chyba pri ukladaní kontaktu. Prosím kontaktujte správcu Vá¹ho "
 "systému."
 
-#: addressbooks.php:149
-#, php-format
-msgid "There was an error updating this address book: %s"
-msgstr "Nastala chyba pri aktualizácii tohto adresára: %s"
-
-#: data.php:187
+#: data.php:292
 msgid "There were no addresses to export."
 msgstr "Neexistujú ¾iadne adresáre na export."
 
@@ -1490,11 +1454,15 @@ msgstr "Adres
 msgid "This addressbook cannot be deleted"
 msgstr "Tento adresár nemô¾e by» vymazaný"
 
-#: data.php:286
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Tento kontakt bol oznaèený pre Va¹u vizitku."
+
+#: data.php:391
 msgid "This file format is not supported."
 msgstr "Tento formát súboru nie je podporovaný."
 
-#: lib/api.php:1623 lib/api.php:1636
+#: lib/api.php:1819 lib/api.php:1832
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr "Táto osoba u¾ má záznam %s v adresári."
@@ -1505,7 +1473,7 @@ msgid ""
 msgstr ""
 "Toto bude prednastavený adresár pre pridávanie alebo importovanie kontaktov."
 
-#: config/attributes.php.dist:229
+#: config/attributes.php.dist:241
 msgid "Time Zone"
 msgstr "Èasová zóna"
 
@@ -1513,7 +1481,7 @@ msgstr "
 msgid "Unable to find contact owner."
 msgstr "Nemo¾né nájs» vlastníka kontaktu."
 
-#: lib/Driver.php:1746 lib/Turba.php:672
+#: lib/Driver.php:1968 lib/Turba.php:659
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "Nemo¾né nahra» definíciu %s."
@@ -1527,11 +1495,11 @@ msgstr "Ned
 msgid "Unable to search."
 msgstr "Nie je mo¾né hµada»."
 
-#: config/attributes.php.dist:353
+#: config/attributes.php.dist:391
 msgid "Unfiled"
 msgstr "Nenastavená"
 
-#: lib/api.php:796 lib/api.php:906 lib/api.php:1073
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr "Nepodporovaný typ obsahu (Content-Type): %s"
@@ -1541,7 +1509,7 @@ msgstr "Nepodporovan
 msgid "View \"%s\""
 msgstr "Zobrazi» \"%s\""
 
-#: minisearch.php:72
+#: minisearch.php:72 minisearch.php:73
 msgid "View Contact"
 msgstr "Zobrazi» kontakt"
 
@@ -1549,75 +1517,75 @@ msgstr "Zobrazi
 msgid "View to display by default:"
 msgstr "Prednastavený spôsob zobrazenia:"
 
-#: config/attributes.php.dist:460
+#: config/attributes.php.dist:506
 msgid "VoIP"
 msgstr "VoIP"
 
-#: config/attributes.php.dist:320
+#: config/attributes.php.dist:344
 msgid "Website URL"
 msgstr "URL WWW stránky"
 
-#: config/attributes.php.dist:173
+#: config/attributes.php.dist:185
 msgid "Work Address"
 msgstr "Adresa (práca)"
 
-#: config/attributes.php.dist:524
+#: config/attributes.php.dist:570
 msgid "Work Address Extended"
 msgstr "Roz¹írená adresa (práca)"
 
-#: config/attributes.php.dist:191
+#: config/attributes.php.dist:203
 msgid "Work City"
 msgstr "Mesto (práca)"
 
-#: config/attributes.php.dist:209
+#: config/attributes.php.dist:221
 msgid "Work Country"
 msgstr "Krajina (práca)"
 
-#: config/attributes.php.dist:408
+#: config/attributes.php.dist:454
 msgid "Work Email"
 msgstr "Email (práca)"
 
-#: config/attributes.php.dist:425
+#: config/attributes.php.dist:471
 msgid "Work Fax"
 msgstr "Fax (práca)"
 
-#: config/attributes.php.dist:530
+#: config/attributes.php.dist:576
 msgid "Work Latitude"
 msgstr "Zemepisná ¹írka (práca)"
 
-#: config/attributes.php.dist:535
+#: config/attributes.php.dist:581
 msgid "Work Longitude"
 msgstr "Zemepisná då¾ka (práca)"
 
-#: config/attributes.php.dist:435
+#: config/attributes.php.dist:481
 msgid "Work Mobile Phone"
 msgstr "Mobilný telefón (práca)"
 
-#: config/attributes.php.dist:254
+#: config/attributes.php.dist:266
 msgid "Work Phone"
 msgstr "Telefón (práca)"
 
-#: config/attributes.php.dist:185
+#: config/attributes.php.dist:197
 msgid "Work Post Office Box"
 msgstr "P.O. Box (práca)"
 
-#: config/attributes.php.dist:203
+#: config/attributes.php.dist:215
 msgid "Work Postal Code"
 msgstr "Smerovacie èíslo (práca)"
 
-#: config/attributes.php.dist:197
+#: config/attributes.php.dist:209
 msgid "Work State/Province"
 msgstr "©tát/provincia (práca)"
 
-#: config/attributes.php.dist:179
+#: config/attributes.php.dist:191
 msgid "Work Street Address"
 msgstr "Ulica a èíslo (práca)"
 
-#: config/attributes.php.dist:450
+#: config/attributes.php.dist:496
 msgid "Work Video Call"
 msgstr "Videohovor (práca)"
 
-#: config/attributes.php.dist:518
+#: config/attributes.php.dist:564
 msgid "Work Website URL"
 msgstr "URL WWW stránky (práca)"
 
@@ -1625,7 +1593,7 @@ msgstr "URL WWW str
 msgid "You are not allowed to change this addressbook."
 msgstr "Nemáte právo na úpravu tohto adresára."
 
-#: data.php:250 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#: data.php:355 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:281
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
 msgstr "Nemáte právo vytvori» viac ako %d kontaktov v \"%s\"."
@@ -1634,7 +1602,7 @@ msgstr "Nem
 msgid "You are not allowed to delete this addressbook."
 msgstr "Nemáte právo na vymazanie tohto adresára."
 
-#: lib/api.php:198
+#: lib/api.php:204
 msgid "You are not allowed to remove user data."
 msgstr "Nemáte právo na vymazanie u¾ívateµských údajov."
 
@@ -1650,8 +1618,12 @@ msgstr "Do virtu
 msgid "You cannot delete contacts from a virtual address book"
 msgstr "Z virtuálneho adresára nemô¾ete vymaza» kontakty."
 
-#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
-#: lib/Views/EditContact.php:49
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr "E¹te nemáte oznaèený kontakt pre Va¹u elektronickú vizitku."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
 msgid "You do not have permission to view this contact."
 msgstr "Nemáte právo na zobrazenie tohto kontaktu."
 
@@ -1663,9 +1635,13 @@ msgstr "Nem
 msgid "You do not have permissions to delete this address book."
 msgstr "Nemáte právo na vymazanie tohto adresára."
 
-#: addressbooks.php:59
-msgid "You do not have permissions to delete this source."
-msgstr "Nemáte právo na vymazanie tohto zdroja."
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"Nemáte dostaèujúce práva na preèítanie adresára, ktorý obsahuje kontakt pre "
+"Va¹u elektronickú vizitku."
 
 #: lib/Driver/ldap.php:741
 msgid ""
@@ -1675,7 +1651,7 @@ msgstr ""
 "Na pou¾itie funkcie skontrolova» schému musíte ma» nain¹talovanú kni¾nicu "
 "PEAR Net_LDAP."
 
-#: search.php:148
+#: search.php:133
 msgid "You must provide a name for virtual address books."
 msgstr "Musíte uvies» názov pre virtuálne adresáre."
 
@@ -1692,19 +1668,28 @@ msgstr "Mus
 msgid "You must select at least one contact first."
 msgstr "Musíte vybra» aspoò jeden kontakt."
 
-#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
 msgid "You only have permission to view this contact."
 msgstr "Máte právo iba na zobrazenie tohto kontaktu."
 
-#: lib/Views/Browse.php:362
+#: lib/Views/Browse.php:369
 msgid "Your default address book is not browseable."
 msgstr "Vá¹ prednastavený adresár nie je mo¾né prehliada»."
 
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "Va¹a elektronická vizitka"
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr "Kontakt pre Va¹u elektronickú vizitku nebol nájdený v adresári."
+
 #: templates/browse/contactrow.inc:12
 msgid "[no value]"
 msgstr "[¾iadna hodnota]"
 
-#: lib/Turba.php:614
+#: lib/Turba.php:601
 msgid "_Browse"
 msgstr "_Prezera»"
 
@@ -1716,11 +1701,11 @@ msgstr "_Kontakty"
 msgid "_Delete"
 msgstr "_Vymaza»"
 
-#: contact.php:85
+#: contact.php:91
 msgid "_Edit"
 msgstr "_Upravi»"
 
-#: lib/Turba.php:623
+#: lib/Turba.php:610
 msgid "_Import/Export"
 msgstr "_Import/Export"
 
@@ -1728,15 +1713,15 @@ msgstr "_Import/Export"
 msgid "_Lists"
 msgstr "Zobrazi» _zoznamy"
 
-#: lib/Turba.php:611
+#: lib/Turba.php:598
 msgid "_My Address Books"
 msgstr "_Môj adresár"
 
-#: lib/Turba.php:617
+#: lib/Turba.php:604
 msgid "_New Contact"
 msgstr "_Nový kontakt"
 
-#: lib/Turba.php:628
+#: lib/Turba.php:615
 msgid "_Print"
 msgstr "_Tlaèi»"
 
@@ -1744,15 +1729,15 @@ msgstr "_Tla
 msgid "_Remove from this list"
 msgstr "Odst_ráni» z tohto zoznamu"
 
-#: lib/Turba.php:619
+#: lib/Turba.php:606
 msgid "_Search"
 msgstr "_Hµada»"
 
-#: contact.php:82
+#: contact.php:88
 msgid "_View"
 msgstr "Ná_hµad"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "ascending"
 msgstr "vzostupne"
 
@@ -1769,36 +1754,36 @@ msgstr "Vami"
 msgid "contact"
 msgstr "kontakt"
 
-#: data.php:207 data.php:212 templates/data/export.inc:1
+#: data.php:312 data.php:317 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "kontakty.csv"
 
-#: data.php:232
+#: data.php:337
 msgid "contacts.ldif"
 msgstr "kontakty.ldif"
 
-#: data.php:217
+#: data.php:322
 msgid "contacts.tsv"
 msgstr "kontakty.tsv"
 
-#: data.php:227
+#: data.php:332
 msgid "contacts.vcf"
 msgstr "kontakty.vcf"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "descending"
 msgstr "zostupne"
 
-#: config/attributes.php.dist:387
+#: config/attributes.php.dist:433
 msgid "female"
 msgstr "¾ena"
 
-#: lib/Block/tree_menu.php:37
+#: lib/Block/tree_menu.php:38
 #, php-format
 msgid "in %s"
 msgstr "v %s"
 
-#: config/attributes.php.dist:387
+#: config/attributes.php.dist:433
 msgid "male"
 msgstr "mu¾"
 
@@ -1818,7 +1803,7 @@ msgstr "do zoznamu kontaktov"
 msgid "to a different Address Book"
 msgstr "do iného adresára"
 
-#: data.php:62 templates/browse/column_headers.inc:13
+#: data.php:103 templates/browse/column_headers.inc:14
 #: templates/data/import.inc:15 templates/data/export.inc:15
 msgid "vCard"
 msgstr "vCard"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index 0699468..f4e2fef 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: Turba H3 (2.2-RC2)\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"
+"PO-Revision-Date: 2008-10-23 10:24+0200\n"
 "Last-Translator: Altay Þeref Özaygen\n"
 "Language-Team: i18n at lists.horde.org\n"
 "MIME-Version: 1.0\n"
@@ -193,11 +193,7 @@ msgstr "Ba
 
 #: config/attributes.php.dist:95
 msgid "Birthday"
-msgstr ""
-"#-#-#-#-#  compendium.po (Imp H3 (4.2-RC2))  #-#-#-#-#\n"
-"Doðumgünü\n"
-"#-#-#-#-#  tr_TR.po (Turba H3 (2.2-RC2))  #-#-#-#-#\n"
-"Doðum günü"
+msgstr "Doðum günü"
 
 #: config/attributes.php.dist:99
 msgid "Birthdays"
diff --git a/po/turba.pot b/po/turba.pot
index 0e56233..d54ba73 100644
--- a/po/turba.pot
+++ b/po/turba.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: 2008-06-13 23:43+0200\n"
+"POT-Creation-Date: 2008-09-25 12:32+0200\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"
@@ -25,17 +25,17 @@ msgstr ""
 msgid " Delete IMSP Address Book"
 msgstr ""
 
-#: data.php:367
+#: data.php:455
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr ""
 
-#: lib/Forms/EditContact.php:76
+#: lib/Forms/EditContact.php:83
 #, php-format
 msgid "\"%s\" updated, but saving the uploaded file failed: %s"
 msgstr ""
 
-#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
 #, php-format
 msgid "\"%s\" updated."
 msgstr ""
@@ -58,19 +58,19 @@ msgstr ""
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr ""
 
-#: lib/Forms/AddContact.php:83
+#: lib/Driver.php:619
 #, php-format
-msgid "%s added."
+msgid "%d. %s of %s"
 msgstr ""
 
-#: data.php:392
+#: lib/Forms/AddContact.php:88
 #, php-format
-msgid "%s file successfully imported."
+msgid "%s added."
 msgstr ""
 
-#: lib/Driver.php:578
+#: data.php:483
 #, php-format
-msgid "%s of %s"
+msgid "%s file successfully imported."
 msgstr ""
 
 #: templates/list/numPager.inc:6
@@ -78,7 +78,7 @@ msgstr ""
 msgid "%s to %s of %s"
 msgstr ""
 
-#: lib/Turba.php:560
+#: lib/Turba.php:541
 #, php-format
 msgid "%s's Address Book"
 msgstr ""
@@ -112,7 +112,7 @@ msgstr ""
 msgid "Add to"
 msgstr ""
 
-#: lib/Driver.php:1959 lib/Driver/null.php:57
+#: lib/Driver.php:2113 lib/Driver/null.php:57
 msgid "Adding contacts is not available."
 msgstr ""
 
@@ -132,7 +132,7 @@ msgstr ""
 msgid "Address Books"
 msgstr ""
 
-#: data.php:347
+#: data.php:435
 msgid "Address book successfully purged."
 msgstr ""
 
@@ -141,7 +141,7 @@ msgstr ""
 msgid "Address books that will not be displayed:"
 msgstr ""
 
-#: search.php:199 templates/browse/search.inc:47
+#: search.php:184 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr ""
 
@@ -153,7 +153,7 @@ msgstr ""
 msgid "All"
 msgstr ""
 
-#: lib/api.php:916
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr ""
 
@@ -174,11 +174,11 @@ msgstr ""
 msgid "Are you sure that you want to delete the selected contacts?"
 msgstr ""
 
-#: config/attributes.php.dist:378
+#: config/attributes.php.dist:424
 msgid "Assistant"
 msgstr ""
 
-#: search.php:196 templates/browse/search.inc:46
+#: search.php:181 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr ""
 
@@ -195,7 +195,7 @@ msgstr ""
 msgid "Birthdays"
 msgstr ""
 
-#: contact.php:106 templates/browse/row.inc:6
+#: contact.php:128 templates/browse/row.inc:10
 msgid "Blank name"
 msgstr ""
 
@@ -208,11 +208,11 @@ msgstr ""
 msgid "Browse"
 msgstr ""
 
-#: config/attributes.php.dist:288
+#: config/attributes.php.dist:300
 msgid "Business Category"
 msgstr ""
 
-#: data.php:86
+#: data.php:101
 msgid "CSV"
 msgstr ""
 
@@ -229,7 +229,7 @@ msgstr ""
 msgid "Cannot delete all address book entries for %s"
 msgstr ""
 
-#: config/attributes.php.dist:350
+#: config/attributes.php.dist:388
 msgid "Category"
 msgstr ""
 
@@ -292,58 +292,59 @@ msgstr ""
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr ""
 
-#: config/attributes.php.dist:476
+#: config/attributes.php.dist:522
 msgid "Common Address Extended"
 msgstr ""
 
-#: config/attributes.php.dist:494
+#: config/attributes.php.dist:540
 msgid "Common City"
 msgstr ""
 
-#: config/attributes.php.dist:512
+#: config/attributes.php.dist:558
 msgid "Common Country"
 msgstr ""
 
-#: config/attributes.php.dist:420
+#: config/attributes.php.dist:466
 msgid "Common Phone"
 msgstr ""
 
-#: config/attributes.php.dist:488
+#: config/attributes.php.dist:534
 msgid "Common Post Office Box"
 msgstr ""
 
-#: config/attributes.php.dist:506
+#: config/attributes.php.dist:552
 msgid "Common Postal Code"
 msgstr ""
 
-#: config/attributes.php.dist:500
+#: config/attributes.php.dist:546
 msgid "Common State/Province"
 msgstr ""
 
-#: config/attributes.php.dist:482
+#: config/attributes.php.dist:528
 msgid "Common Street"
 msgstr ""
 
-#: config/attributes.php.dist:445
+#: config/attributes.php.dist:491
 msgid "Common Video Call"
 msgstr ""
 
-#: config/sources.php.dist:243 config/sources.php.dist:922
+#: config/sources.php.dist:256 config/sources.php.dist:948
 msgid "Communications"
 msgstr ""
 
-#: config/attributes.php.dist:294
+#: config/attributes.php.dist:306
 msgid "Company"
 msgstr ""
 
-#: config/attributes.php.dist:223
+#: config/attributes.php.dist:235
 msgid "Company Address"
 msgstr ""
 
-#: scripts/import_squirrelmail_abook.php:112 lib/api.php:523 lib/api.php:577
-#: lib/api.php:630 lib/api.php:678 lib/api.php:733 lib/api.php:792
-#: lib/api.php:842 lib/api.php:978 lib/api.php:1070 lib/api.php:1136
-#: lib/api.php:1251 lib/api.php:1484 lib/api.php:1561 lib/api.php:1710
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
 #, php-format
 msgid "Connection failed: %s"
 msgstr ""
@@ -356,7 +357,7 @@ msgstr ""
 msgid "Contact Search"
 msgstr ""
 
-#: config/sources.php.dist:851
+#: config/sources.php.dist:866
 msgid "Contacts"
 msgstr ""
 
@@ -364,7 +365,7 @@ msgstr ""
 msgid "Contacts displayed:"
 msgstr ""
 
-#: lib/Views/Browse.php:339
+#: lib/Views/Browse.php:346
 #, php-format
 msgid "Contacts in list: %s"
 msgstr ""
@@ -385,7 +386,7 @@ msgstr ""
 msgid "Create a new Address Book"
 msgstr ""
 
-#: lib/ListView.php:447
+#: lib/ListView.php:448
 msgid "Create a new Contact List in:"
 msgstr ""
 
@@ -393,7 +394,7 @@ msgstr ""
 msgid "Created"
 msgstr ""
 
-#: contact.php:89
+#: contact.php:95
 msgid "De_lete"
 msgstr ""
 
@@ -408,7 +409,7 @@ msgstr ""
 msgid "Delete %s"
 msgstr ""
 
-#: lib/api.php:621
+#: lib/api.php:644
 msgid "Delete denied."
 msgstr ""
 
@@ -417,7 +418,7 @@ msgstr ""
 msgid "Delete failed: (%s) %s"
 msgstr ""
 
-#: lib/Driver.php:1967 lib/Driver/null.php:62
+#: lib/Driver.php:2121 lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
 msgstr ""
 
@@ -425,7 +426,7 @@ msgstr ""
 msgid "Deletion failed"
 msgstr ""
 
-#: config/attributes.php.dist:300
+#: config/attributes.php.dist:312
 msgid "Department"
 msgstr ""
 
@@ -446,17 +447,17 @@ msgstr ""
 msgid "Display Options"
 msgstr ""
 
-#: lib/Object.php:348
+#: lib/Object.php:354
 msgid "Download"
 msgstr ""
 
-#: templates/browse/row.inc:15 templates/browse/row.inc:16
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
 #: templates/browse/contactrow.inc:25
 msgid "Download vCard"
 msgstr ""
 
-#: templates/addressbook_list.php:31 templates/browse/row.inc:28
-#: templates/browse/row.inc:29 templates/browse/column_headers.inc:11
+#: templates/addressbook_list.php:31 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/column_headers.inc:11
 #: templates/browse/actions.inc:6 templates/browse/contactrow.inc:33
 #: addressbooks/index.php:40
 msgid "Edit"
@@ -472,20 +473,20 @@ msgstr ""
 msgid "Edit %s"
 msgstr ""
 
-#: config/attributes.php.dist:237
+#: config/attributes.php.dist:249
 msgid "Email"
 msgstr ""
 
-#: config/attributes.php.dist:243
+#: config/attributes.php.dist:255
 msgid "Emails"
 msgstr ""
 
-#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
 #, php-format
 msgid "Error adding %d contact(s) to list."
 msgstr ""
 
-#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
 msgstr ""
@@ -510,7 +511,7 @@ msgstr ""
 msgid "Error removing %d of %d requested contact(s) from list."
 msgstr ""
 
-#: lib/api.php:684
+#: lib/api.php:707
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr ""
@@ -531,7 +532,7 @@ msgstr ""
 msgid "Export the following address book completely."
 msgstr ""
 
-#: data.php:159 data.php:258 data.php:336 add.php:42 search.php:121
+#: data.php:247 data.php:346 data.php:424 add.php:42 search.php:106
 #: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
@@ -542,11 +543,11 @@ msgstr ""
 msgid "Failed to add %s to %s: %s"
 msgstr ""
 
-#: lib/Views/Browse.php:345
+#: lib/Views/Browse.php:352
 msgid "Failed to browse list"
 msgstr ""
 
-#: lib/Views/Browse.php:376
+#: lib/Views/Browse.php:383
 msgid "Failed to browse the directory"
 msgstr ""
 
@@ -560,20 +561,20 @@ msgstr ""
 msgid "Failed to find object to be added: %s"
 msgstr ""
 
-#: search.php:190
+#: search.php:175
 msgid "Failed to search the address book"
 msgstr ""
 
-#: data.php:174
+#: data.php:262
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr ""
 
-#: config/sources.php.dist:550
+#: config/sources.php.dist:565
 msgid "Favourite Recipients"
 msgstr ""
 
-#: config/attributes.php.dist:264
+#: config/attributes.php.dist:276
 msgid "Fax"
 msgstr ""
 
@@ -585,7 +586,7 @@ msgstr ""
 msgid "Find"
 msgstr ""
 
-#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
 msgid "Finish"
 msgstr ""
 
@@ -593,7 +594,7 @@ msgstr ""
 msgid "First Name"
 msgstr ""
 
-#: config/attributes.php.dist:326
+#: config/attributes.php.dist:350
 msgid "Freebusy URL"
 msgstr ""
 
@@ -601,83 +602,83 @@ msgstr ""
 msgid "From"
 msgstr ""
 
-#: config/attributes.php.dist:384
+#: config/attributes.php.dist:430
 msgid "Gender"
 msgstr ""
 
-#: config/sources.php.dist:776
+#: config/sources.php.dist:791
 msgid "Global Address Book"
 msgstr ""
 
-#: templates/browse/row.inc:49 templates/browse/contactrow.inc:44
+#: templates/browse/row.inc:61 templates/browse/contactrow.inc:44
 msgid "Group"
 msgstr ""
 
-#: config/attributes.php.dist:123
+#: config/attributes.php.dist:135
 msgid "Home Address"
 msgstr ""
 
-#: config/attributes.php.dist:546
+#: config/attributes.php.dist:592
 msgid "Home Address Extended"
 msgstr ""
 
-#: config/attributes.php.dist:141
+#: config/attributes.php.dist:153
 msgid "Home City"
 msgstr ""
 
-#: config/attributes.php.dist:159
+#: config/attributes.php.dist:171
 msgid "Home Country"
 msgstr ""
 
-#: config/attributes.php.dist:414
+#: config/attributes.php.dist:460
 msgid "Home Email"
 msgstr ""
 
-#: config/attributes.php.dist:430
+#: config/attributes.php.dist:476
 msgid "Home Fax"
 msgstr ""
 
-#: config/attributes.php.dist:552
+#: config/attributes.php.dist:598
 msgid "Home Latitude"
 msgstr ""
 
-#: config/attributes.php.dist:557
+#: config/attributes.php.dist:603
 msgid "Home Longitude"
 msgstr ""
 
-#: config/attributes.php.dist:440
+#: config/attributes.php.dist:486
 msgid "Home Mobile Phone"
 msgstr ""
 
-#: config/attributes.php.dist:249
+#: config/attributes.php.dist:261
 msgid "Home Phone"
 msgstr ""
 
-#: config/attributes.php.dist:135
+#: config/attributes.php.dist:147
 msgid "Home Post Office Box"
 msgstr ""
 
-#: config/attributes.php.dist:153
+#: config/attributes.php.dist:165
 msgid "Home Postal Code"
 msgstr ""
 
-#: config/attributes.php.dist:147
+#: config/attributes.php.dist:159
 msgid "Home State/Province"
 msgstr ""
 
-#: config/attributes.php.dist:129
+#: config/attributes.php.dist:141
 msgid "Home Street Address"
 msgstr ""
 
-#: config/attributes.php.dist:455
+#: config/attributes.php.dist:501
 msgid "Home Video Call"
 msgstr ""
 
-#: config/attributes.php.dist:540
+#: config/attributes.php.dist:586
 msgid "Home Website URL"
 msgstr ""
 
-#: config/sources.php.dist:667
+#: config/sources.php.dist:682
 msgid "IMSP"
 msgstr ""
 
@@ -686,38 +687,38 @@ msgstr ""
 msgid "Import Address Book, Step %d"
 msgstr ""
 
-#: data.php:410
+#: data.php:501
 msgid "Import/Export Address Books"
 msgstr ""
 
-#: config/attributes.php.dist:360
+#: config/attributes.php.dist:406
 msgid "Initials"
 msgstr ""
 
-#: config/attributes.php.dist:366
+#: config/attributes.php.dist:412
 msgid "Instant Messenger"
 msgstr ""
 
-#: lib/api.php:973 lib/api.php:1065
+#: lib/api.php:999 lib/api.php:1132
 msgid "Invalid ID"
 msgstr ""
 
-#: scripts/import_squirrelmail_abook.php:105 lib/api.php:345 lib/api.php:673
-#: lib/api.php:728 lib/api.php:787 lib/api.php:835 lib/api.php:969
-#: lib/api.php:1061 lib/api.php:1126 lib/api.php:1693
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
 #, php-format
 msgid "Invalid address book: %s"
 msgstr ""
 
-#: lib/api.php:1130
+#: lib/api.php:1198
 msgid "Invalid contact unique ID"
 msgstr ""
 
-#: lib/api.php:1697 lib/api.php:1783 lib/api.php:1844
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
 msgid "Invalid email"
 msgstr ""
 
-#: lib/api.php:1705
+#: lib/api.php:1786
 msgid "Invalid entry"
 msgstr ""
 
@@ -725,15 +726,15 @@ msgstr ""
 msgid "Invalid key specified."
 msgstr ""
 
-#: lib/api.php:1701
+#: lib/api.php:1782
 msgid "Invalid name"
 msgstr ""
 
-#: config/attributes.php.dist:276
+#: config/attributes.php.dist:288
 msgid "Job Title"
 msgstr ""
 
-#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
 #, php-format
 msgid "Key for saving must be a UID not %s!"
 msgstr ""
@@ -743,11 +744,11 @@ msgid ""
 "LDAP support is required but the LDAP module is not available or not loaded."
 msgstr ""
 
-#: data.php:91 templates/data/import.inc:18 templates/data/export.inc:16
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
 msgid "LDIF Address Book"
 msgstr ""
 
-#: config/attributes.php.dist:390
+#: config/attributes.php.dist:436
 msgid "Language"
 msgstr ""
 
@@ -759,7 +760,7 @@ msgstr ""
 msgid "Last Name"
 msgstr ""
 
-#: config/attributes.php.dist:396
+#: config/attributes.php.dist:442
 msgid "Latitude"
 msgstr ""
 
@@ -767,15 +768,23 @@ msgstr ""
 msgid "List"
 msgstr ""
 
-#: config/sources.php.dist:238 config/sources.php.dist:918
+#: config/sources.php.dist:251 config/sources.php.dist:944
 msgid "Location"
 msgstr ""
 
-#: config/attributes.php.dist:401
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr ""
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr ""
+
+#: config/attributes.php.dist:447
 msgid "Longitude"
 msgstr ""
 
-#: lib/api.php:593
+#: lib/api.php:616
 msgid "Malformed request."
 msgstr ""
 
@@ -783,15 +792,19 @@ msgstr ""
 msgid "Manage Address Books"
 msgstr ""
 
-#: config/attributes.php.dist:372
+#: config/attributes.php.dist:418
 msgid "Manager"
 msgstr ""
 
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr ""
+
 #: templates/browse/search.inc:109
 msgid "Matching"
 msgstr ""
 
-#: lib/api.php:306
+#: lib/api.php:329
 msgid "Maximum Number of Contacts"
 msgstr ""
 
@@ -811,7 +824,7 @@ msgstr ""
 msgid "Missing DN in LDAP source configuration."
 msgstr ""
 
-#: config/attributes.php.dist:259
+#: config/attributes.php.dist:271
 msgid "Mobile Phone"
 msgstr ""
 
@@ -824,7 +837,7 @@ msgstr ""
 msgid "More Options..."
 msgstr ""
 
-#: lib/api.php:1821
+#: lib/api.php:1902
 msgid "More than 1 entry found"
 msgstr ""
 
@@ -840,17 +853,17 @@ msgstr ""
 msgid "Move right"
 msgstr ""
 
-#: data.php:89 templates/data/import.inc:16
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr ""
 
-#: lib/api.php:1729
+#: lib/api.php:1810
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
 msgstr ""
 
-#: config/sources.php.dist:162
+#: config/sources.php.dist:167
 msgid "My Address Book"
 msgstr ""
 
@@ -875,12 +888,12 @@ msgstr ""
 msgid "Name:"
 msgstr ""
 
-#: add.php:70 lib/Block/tree_menu.php:27
+#: add.php:70 lib/Block/tree_menu.php:28
 msgid "New Contact"
 msgstr ""
 
-#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
-#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
 msgid "Next"
 msgstr ""
 
@@ -888,22 +901,22 @@ msgstr ""
 msgid "Nickname"
 msgstr ""
 
-#: lib/api.php:1824 lib/api.php:1884
+#: lib/api.php:1905 lib/api.php:1965
 #, php-format
 msgid "No %s entry found for %s"
 msgstr ""
 
-#: data.php:78
+#: data.php:93
 msgid ""
 "No Address Books are currently available. Import and Export is disabled."
 msgstr ""
 
-#: search.php:107
+#: search.php:92
 msgid "No Address Books are currently available. Searching is disabled."
 msgstr ""
 
-#: lib/api.php:667 lib/api.php:722 lib/api.php:782 lib/api.php:964
-#: lib/api.php:1056 lib/api.php:1121
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
 msgid "No address book specified"
 msgstr ""
 
@@ -923,7 +936,7 @@ msgstr ""
 msgid "No source for favourite recipients exists."
 msgstr ""
 
-#: lib/api.php:868 lib/api.php:1166
+#: lib/api.php:893 lib/api.php:1235
 msgid "No vCard data was found."
 msgstr ""
 
@@ -940,7 +953,7 @@ msgstr ""
 msgid "Not found"
 msgstr ""
 
-#: config/attributes.php.dist:314
+#: config/attributes.php.dist:338
 msgid "Notes"
 msgstr ""
 
@@ -948,20 +961,20 @@ msgstr ""
 msgid "Number of items per page"
 msgstr ""
 
-#: lib/api.php:1015 lib/api.php:1191
+#: lib/api.php:1041 lib/api.php:1260
 msgid "Object not found"
 msgstr ""
 
-#: lib/Driver/kolab.php:1184
+#: lib/Driver/kolab.php:1199
 #, php-format
 msgid "Object with UID %s does not exist!"
 msgstr ""
 
-#: config/attributes.php.dist:282
+#: config/attributes.php.dist:294
 msgid "Occupation"
 msgstr ""
 
-#: config/attributes.php.dist:306
+#: config/attributes.php.dist:318
 msgid "Office"
 msgstr ""
 
@@ -972,27 +985,27 @@ msgid ""
 "to \"None\"."
 msgstr ""
 
-#: lib/api.php:1174
+#: lib/api.php:1243
 msgid "Only one vcard supported."
 msgstr ""
 
-#: config/sources.php.dist:245 config/sources.php.dist:924
+#: config/sources.php.dist:258 config/sources.php.dist:950
 msgid "Organization"
 msgstr ""
 
-#: config/sources.php.dist:246 config/sources.php.dist:926
+#: config/sources.php.dist:259 config/sources.php.dist:952
 msgid "Other"
 msgstr ""
 
-#: config/attributes.php.dist:332
+#: config/attributes.php.dist:356
 msgid "PGP Public Key"
 msgstr ""
 
-#: config/attributes.php.dist:471
+#: config/attributes.php.dist:517
 msgid "PTT"
 msgstr ""
 
-#: config/attributes.php.dist:269
+#: config/attributes.php.dist:281
 msgid "Pager"
 msgstr ""
 
@@ -1000,16 +1013,24 @@ msgstr ""
 msgid "Permanently delete this contact?"
 msgstr ""
 
-#: deletefile.php:36 lib/Driver.php:759 lib/api.php:846 lib/api.php:1714
-#: lib/Driver/sql.php:486
+#: deletefile.php:36 lib/Driver.php:804 lib/api.php:870 lib/api.php:1795
+#: lib/Driver/sql.php:515
 msgid "Permission denied"
 msgstr ""
 
-#: config/sources.php.dist:235 config/sources.php.dist:914
+#: config/sources.php.dist:248 config/sources.php.dist:940
 msgid "Personal"
 msgstr ""
 
-#: data.php:90 templates/data/import.inc:17
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr ""
+
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr ""
+
+#: data.php:105 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr ""
 
@@ -1017,8 +1038,8 @@ msgstr ""
 msgid "Please name the new contact list:"
 msgstr ""
 
-#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
-#: lib/Forms/EditContact.php:167
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
 msgid "Previous"
 msgstr ""
 
@@ -1032,7 +1053,7 @@ msgstr ""
 msgid "Read failed: (%s) %s"
 msgstr ""
 
-#: lib/Driver.php:1951 lib/Driver/null.php:52
+#: lib/Driver.php:2105 lib/Driver/null.php:52
 msgid "Reading contacts is not available."
 msgstr ""
 
@@ -1051,7 +1072,7 @@ msgstr ""
 msgid "Remove from this list"
 msgstr ""
 
-#: lib/Driver.php:1989
+#: lib/Driver.php:2143
 msgid ""
 "Removing user data is not supported in the current address book storage "
 "driver."
@@ -1063,7 +1084,7 @@ msgid ""
 "deletes all entries in your current address book.</strong>"
 msgstr ""
 
-#: lib/Driver.php:653
+#: lib/Driver.php:698
 msgid "Requested object not found."
 msgstr ""
 
@@ -1071,11 +1092,11 @@ msgstr ""
 msgid "Reset to Defaults"
 msgstr ""
 
-#: config/attributes.php.dist:338
+#: config/attributes.php.dist:362
 msgid "S/MIME Public Certificate"
 msgstr ""
 
-#: config/attributes.php.dist:465
+#: config/attributes.php.dist:511
 msgid "SIP"
 msgstr ""
 
@@ -1092,21 +1113,21 @@ msgstr ""
 msgid "Save search as a virtual address book?"
 msgstr ""
 
-#: lib/Driver.php:1977 lib/Driver/null.php:67
+#: lib/Driver.php:2131 lib/Driver/null.php:67
 msgid "Saving contacts is not available."
 msgstr ""
 
 #: templates/browse/search.inc:111 templates/browse/search.inc:119
 #: templates/browse/header.inc:3 templates/block/minisearch.inc:25
-#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
 msgid "Search"
 msgstr ""
 
-#: lib/api.php:1489
+#: lib/api.php:1568
 msgid "Search failed"
 msgstr ""
 
-#: lib/api.php:1719 lib/api.php:1725 lib/api.php:1734 lib/api.php:1747
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
 #, php-format
 msgid "Search failed: %s"
 msgstr ""
@@ -1115,11 +1136,11 @@ msgstr ""
 msgid "Search for: "
 msgstr ""
 
-#: lib/Driver.php:1936 lib/Driver/null.php:47
+#: lib/Driver.php:2090 lib/Driver/null.php:47
 msgid "Searching is not available."
 msgstr ""
 
-#: templates/browse/row.inc:40
+#: templates/browse/row.inc:52
 msgid "Select contact"
 msgstr ""
 
@@ -1214,7 +1235,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lib/api.php:299
+#: lib/api.php:322
 msgid "Sources"
 msgstr ""
 
@@ -1222,7 +1243,7 @@ msgstr ""
 msgid "Spouse"
 msgstr ""
 
-#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr ""
@@ -1232,12 +1253,12 @@ msgstr ""
 msgid "Successfully added %s to %s"
 msgstr ""
 
-#: lib/Views/Browse.php:291
+#: lib/Views/Browse.php:298
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr ""
 
-#: search.php:165
+#: search.php:150
 #, php-format
 msgid "Successfully created virtual address book \"%s\""
 msgstr ""
@@ -1252,7 +1273,7 @@ msgstr ""
 msgid "Successfully removed %d contact(s) from list."
 msgstr ""
 
-#: data.php:87
+#: data.php:102
 msgid "TSV"
 msgstr ""
 
@@ -1268,7 +1289,7 @@ msgstr ""
 msgid "Target Contact List"
 msgstr ""
 
-#: data.php:338
+#: data.php:426
 #, php-format
 msgid "The %s file didn't contain any contacts."
 msgstr ""
@@ -1277,7 +1298,7 @@ msgstr ""
 msgid "The VFS backend needs to be configured to enable attachment uploads."
 msgstr ""
 
-#: lib/Driver.php:1907
+#: lib/Driver.php:2061
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr ""
@@ -1287,11 +1308,15 @@ msgstr ""
 msgid "The address book \"%s\" has been created."
 msgstr ""
 
-#: data.php:345
+#: data.php:433
 #, php-format
 msgid "The address book could not be purged: %s"
 msgstr ""
 
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr ""
+
 #: addressbooks/delete.php:50
 #, php-format
 msgid "The addressbook \"%s\" has been deleted."
@@ -1316,7 +1341,7 @@ msgstr ""
 msgid "The file \"%s\" has been deleted."
 msgstr ""
 
-#: data.php:318
+#: data.php:406
 msgid "The import can be finished despite the warnings."
 msgstr ""
 
@@ -1336,25 +1361,25 @@ msgid ""
 "is an error, please contact your system administrator."
 msgstr ""
 
-#: lib/Views/Browse.php:349
+#: lib/Views/Browse.php:356
 #, php-format
 msgid "There is %d contact in this list that is not viewable to you"
 msgid_plural "There are %d contacts in this list that are not viewable to you"
 msgstr[0] ""
 msgstr[1] ""
 
-#: search.php:161
+#: search.php:146
 #, php-format
 msgid "There was a problem creating the virtual address book: %s"
 msgstr ""
 
-#: lib/Forms/AddContact.php:90
+#: lib/Forms/AddContact.php:95
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
 msgstr ""
 
-#: lib/Views/Browse.php:311
+#: lib/Views/Browse.php:318
 msgid "There was an error creating a new list."
 msgstr ""
 
@@ -1368,31 +1393,31 @@ msgstr ""
 msgid "There was an error deleting this contact: %s"
 msgstr ""
 
-#: lib/Views/Browse.php:355
+#: lib/Views/Browse.php:362
 msgid "There was an error displaying the list"
 msgstr ""
 
-#: data.php:378
+#: data.php:469
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr ""
 
-#: lib/api.php:864 lib/api.php:1161
+#: lib/api.php:889 lib/api.php:1230
 msgid "There was an error importing the iCalendar data."
 msgstr ""
 
-#: lib/api.php:235
+#: lib/api.php:258
 #, php-format
 msgid "There was an error removing an address book for %s"
 msgstr ""
 
-#: lib/Forms/EditContact.php:86
+#: lib/Forms/EditContact.php:93
 msgid ""
 "There was an error saving the contact. Contact your system administrator for "
 "further help."
 msgstr ""
 
-#: data.php:204
+#: data.php:292
 msgid "There were no addresses to export."
 msgstr ""
 
@@ -1405,11 +1430,15 @@ msgstr ""
 msgid "This addressbook cannot be deleted"
 msgstr ""
 
-#: data.php:303
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr ""
+
+#: data.php:391
 msgid "This file format is not supported."
 msgstr ""
 
-#: lib/api.php:1738 lib/api.php:1751
+#: lib/api.php:1819 lib/api.php:1832
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr ""
@@ -1419,7 +1448,7 @@ msgid ""
 "This will be the default address book when adding or importing contacts."
 msgstr ""
 
-#: config/attributes.php.dist:229
+#: config/attributes.php.dist:241
 msgid "Time Zone"
 msgstr ""
 
@@ -1427,7 +1456,7 @@ msgstr ""
 msgid "Unable to find contact owner."
 msgstr ""
 
-#: lib/Driver.php:1829 lib/Turba.php:676
+#: lib/Driver.php:1981 lib/Turba.php:659
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr ""
@@ -1441,11 +1470,11 @@ msgstr ""
 msgid "Unable to search."
 msgstr ""
 
-#: config/attributes.php.dist:353
+#: config/attributes.php.dist:391
 msgid "Unfiled"
 msgstr ""
 
-#: lib/api.php:902 lib/api.php:1012 lib/api.php:1179
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr ""
@@ -1463,75 +1492,75 @@ msgstr ""
 msgid "View to display by default:"
 msgstr ""
 
-#: config/attributes.php.dist:460
+#: config/attributes.php.dist:506
 msgid "VoIP"
 msgstr ""
 
-#: config/attributes.php.dist:320
+#: config/attributes.php.dist:344
 msgid "Website URL"
 msgstr ""
 
-#: config/attributes.php.dist:173
+#: config/attributes.php.dist:185
 msgid "Work Address"
 msgstr ""
 
-#: config/attributes.php.dist:524
+#: config/attributes.php.dist:570
 msgid "Work Address Extended"
 msgstr ""
 
-#: config/attributes.php.dist:191
+#: config/attributes.php.dist:203
 msgid "Work City"
 msgstr ""
 
-#: config/attributes.php.dist:209
+#: config/attributes.php.dist:221
 msgid "Work Country"
 msgstr ""
 
-#: config/attributes.php.dist:408
+#: config/attributes.php.dist:454
 msgid "Work Email"
 msgstr ""
 
-#: config/attributes.php.dist:425
+#: config/attributes.php.dist:471
 msgid "Work Fax"
 msgstr ""
 
-#: config/attributes.php.dist:530
+#: config/attributes.php.dist:576
 msgid "Work Latitude"
 msgstr ""
 
-#: config/attributes.php.dist:535
+#: config/attributes.php.dist:581
 msgid "Work Longitude"
 msgstr ""
 
-#: config/attributes.php.dist:435
+#: config/attributes.php.dist:481
 msgid "Work Mobile Phone"
 msgstr ""
 
-#: config/attributes.php.dist:254
+#: config/attributes.php.dist:266
 msgid "Work Phone"
 msgstr ""
 
-#: config/attributes.php.dist:185
+#: config/attributes.php.dist:197
 msgid "Work Post Office Box"
 msgstr ""
 
-#: config/attributes.php.dist:203
+#: config/attributes.php.dist:215
 msgid "Work Postal Code"
 msgstr ""
 
-#: config/attributes.php.dist:197
+#: config/attributes.php.dist:209
 msgid "Work State/Province"
 msgstr ""
 
-#: config/attributes.php.dist:179
+#: config/attributes.php.dist:191
 msgid "Work Street Address"
 msgstr ""
 
-#: config/attributes.php.dist:450
+#: config/attributes.php.dist:496
 msgid "Work Video Call"
 msgstr ""
 
-#: config/attributes.php.dist:518
+#: config/attributes.php.dist:564
 msgid "Work Website URL"
 msgstr ""
 
@@ -1539,7 +1568,7 @@ msgstr ""
 msgid "You are not allowed to change this addressbook."
 msgstr ""
 
-#: data.php:267 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#: data.php:355 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:281
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
 msgstr ""
@@ -1548,7 +1577,7 @@ msgstr ""
 msgid "You are not allowed to delete this addressbook."
 msgstr ""
 
-#: lib/api.php:198
+#: lib/api.php:204
 msgid "You are not allowed to remove user data."
 msgstr ""
 
@@ -1564,6 +1593,10 @@ msgstr ""
 msgid "You cannot delete contacts from a virtual address book"
 msgstr ""
 
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr ""
+
 #: edit.php:66 view.php:38 lib/Views/EditContact.php:49
 #: lib/Views/DeleteContact.php:42
 msgid "You do not have permission to view this contact."
@@ -1577,13 +1610,19 @@ msgstr ""
 msgid "You do not have permissions to delete this address book."
 msgstr ""
 
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+
 #: lib/Driver/ldap.php:741
 msgid ""
 "You must have the Net_LDAP PEAR library installed to use the schema check "
 "function."
 msgstr ""
 
-#: search.php:148
+#: search.php:133
 msgid "You must provide a name for virtual address books."
 msgstr ""
 
@@ -1604,15 +1643,24 @@ msgstr ""
 msgid "You only have permission to view this contact."
 msgstr ""
 
-#: lib/Views/Browse.php:362
+#: lib/Views/Browse.php:369
 msgid "Your default address book is not browseable."
 msgstr ""
 
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr ""
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr ""
+
 #: templates/browse/contactrow.inc:12
 msgid "[no value]"
 msgstr ""
 
-#: lib/Turba.php:618
+#: lib/Turba.php:601
 msgid "_Browse"
 msgstr ""
 
@@ -1624,11 +1672,11 @@ msgstr ""
 msgid "_Delete"
 msgstr ""
 
-#: contact.php:85
+#: contact.php:91
 msgid "_Edit"
 msgstr ""
 
-#: lib/Turba.php:627
+#: lib/Turba.php:610
 msgid "_Import/Export"
 msgstr ""
 
@@ -1636,15 +1684,15 @@ msgstr ""
 msgid "_Lists"
 msgstr ""
 
-#: lib/Turba.php:615
+#: lib/Turba.php:598
 msgid "_My Address Books"
 msgstr ""
 
-#: lib/Turba.php:621
+#: lib/Turba.php:604
 msgid "_New Contact"
 msgstr ""
 
-#: lib/Turba.php:632
+#: lib/Turba.php:615
 msgid "_Print"
 msgstr ""
 
@@ -1652,11 +1700,11 @@ msgstr ""
 msgid "_Remove from this list"
 msgstr ""
 
-#: lib/Turba.php:623
+#: lib/Turba.php:606
 msgid "_Search"
 msgstr ""
 
-#: contact.php:82
+#: contact.php:88
 msgid "_View"
 msgstr ""
 
@@ -1677,19 +1725,19 @@ msgstr ""
 msgid "contact"
 msgstr ""
 
-#: data.php:224 data.php:229 templates/data/export.inc:1
+#: data.php:312 data.php:317 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr ""
 
-#: data.php:249
+#: data.php:337
 msgid "contacts.ldif"
 msgstr ""
 
-#: data.php:234
+#: data.php:322
 msgid "contacts.tsv"
 msgstr ""
 
-#: data.php:244
+#: data.php:332
 msgid "contacts.vcf"
 msgstr ""
 
@@ -1697,16 +1745,16 @@ msgstr ""
 msgid "descending"
 msgstr ""
 
-#: config/attributes.php.dist:387
+#: config/attributes.php.dist:433
 msgid "female"
 msgstr ""
 
-#: lib/Block/tree_menu.php:37
+#: lib/Block/tree_menu.php:38
 #, php-format
 msgid "in %s"
 msgstr ""
 
-#: config/attributes.php.dist:387
+#: config/attributes.php.dist:433
 msgid "male"
 msgstr ""
 
@@ -1726,7 +1774,7 @@ msgstr ""
 msgid "to a different Address Book"
 msgstr ""
 
-#: data.php:88 templates/browse/column_headers.inc:14
+#: data.php:103 templates/browse/column_headers.inc:14
 #: templates/data/import.inc:15 templates/data/export.inc:15
 msgid "vCard"
 msgstr ""
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 7310684..8c20fbb 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -1,18 +1,20 @@
 # Turba Ukrainian win-1251 translation.
 # Copyright (C)
-# Andriy Kopystyansky <anri at polynet.lviv.ua>, 2007
-# 
+# Andriy Kopystyansky <anri at polynet.lviv.ua>, 2008
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: Turba H3 (2.2-cvs)\n"
+"Project-Id-Version: Turba H3 (2.3)\n"
 "Report-Msgid-Bugs-To: dev at lists.horde.org\n"
-"POT-Creation-Date: 2007-06-18 13:25+0300\n"
-"PO-Revision-Date: 2007-06-19 12:00+0200\n"
+"POT-Creation-Date: 2008-11-28 12:38+0200\n"
+"PO-Revision-Date: 2008-12-04 12:00+0200\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=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"
 
 #: templates/prefs/imsp_opt.inc:40
 msgid " Add an IMSP Address Book"
@@ -22,45 +24,50 @@ msgstr " 
 msgid " Delete IMSP Address Book"
 msgstr " Âèòåðòè IMSP-àäðåñíèê"
 
-#: data.php:351
+#: data.php:455
 #, php-format
 msgid "\"%s\" already exists and was not imported."
 msgstr "\"%s\" âæå ³ñíóº íå áóâ ³ìîðòîâàíèé."
 
-#: lib/Forms/EditContact.php:76
+#: lib/Forms/EditContact.php:83
 #, php-format
 msgid "\"%s\" updated, but saving the uploaded file failed: %s"
 msgstr "\"%s\" îíîâëåíî, àëå çáåðåãòè ï³äâàíòàæåíèé ôàéë íå âäàëîñü: %s"
 
-#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
 #, php-format
 msgid "\"%s\" updated."
 msgstr "\"%s\" îíîâëåíî."
 
-#: lib/Views/Browse.php:191
+#: lib/Views/Browse.php:192
 #, php-format
 msgid "\"%s\" was not copied because it is a list."
 msgstr "\"%s\" íå ñêîï³éîâàíî, áî öå ñïèñîê."
 
-#: lib/Views/Browse.php:189
+#: lib/Views/Browse.php:190
 #, php-format
 msgid "\"%s\" was not moved because it is a list."
 msgstr "\"%s\" íå ïåðåì³ùåíî, áî öå ñïèñîê."
 
-#: config/prefs.php.dist:118
+#: config/prefs.php.dist:127
 msgid "\"Firstname Lastname\"  (ie. John Doe)"
 msgstr "\"²ì'ÿ Ïð³çâèùå\"  (íàïð. Ïåòðî Ïåòðåíêî)"
 
-#: config/prefs.php.dist:117
+#: config/prefs.php.dist:126
 msgid "\"Lastname, Firstname\" (ie. Doe, John)"
 msgstr "\"Ïð³çâèùå, ²ì'ÿ\"  (íàïð. Ïåòðåíêî, Ïåòðî)"
 
-#: lib/Forms/AddContact.php:80
+#: lib/Driver.php:619
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s ç %s"
+
+#: lib/Forms/AddContact.php:88
 #, php-format
 msgid "%s added."
 msgstr "%s äîäàíî."
 
-#: data.php:370
+#: data.php:483
 #, php-format
 msgid "%s file successfully imported."
 msgstr "Ôàéë %s óñï³øíî ³ìïîðòîâàíî."
@@ -70,14 +77,14 @@ msgstr "
 msgid "%s to %s of %s"
 msgstr "%s ïî %s ç %s"
 
-#: lib/Turba.php:507
+#: lib/Turba.php:541
 #, php-format
 msgid "%s's Address Book"
 msgstr "%s Àäðåñíèê"
 
-#: lib/Block/minisearch.php:42
-msgid "A browser that supports iFrames is required"
-msgstr "Ïîòð³áíèé áðàóçåð ç ï³äòðèìêîþ iFrames."
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr "Ïîòð³áíèé áðàóçåð ç ï³äòðèìêîþ iframes"
 
 #: view.php:54
 #, php-format
@@ -96,10 +103,6 @@ msgstr "
 msgid "Add address book"
 msgstr "Äîäàòè àäðåñíèê"
 
-#: templates/prefs/columnselect.inc:237
-msgid "Add column"
-msgstr "Äîäàòè êîëîíêó"
-
 #: lib/Forms/EditContact.php:34
 msgid "Add file"
 msgstr "Äîäàòè ôàéë"
@@ -108,15 +111,19 @@ msgstr "
 msgid "Add to"
 msgstr "Äîäàòè äî"
 
-#: lib/Driver.php:1385
+#: lib/Driver.php:2113 lib/Driver/null.php:57
 msgid "Adding contacts is not available."
 msgstr "Âíåñåííÿ êîíòàêò³â íåìîæëèâå."
 
-#: templates/addressbooks.inc:97
+#: templates/addressbook_list.php:16
 msgid "Address Book"
 msgstr "Àäðåñíèê"
 
-#: lib/Views/Browse.php:77 config/prefs.php.dist:106
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Ñïèñîê àäðåñíèê³â"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
 msgid "Address Book Listing"
 msgstr "Ïåðåãëÿä Àäðåñíèêà"
 
@@ -124,24 +131,20 @@ msgstr "
 msgid "Address Books"
 msgstr "Àäðåñíèêè"
 
-#: data.php:331
+#: data.php:435
 msgid "Address book successfully purged."
 msgstr "Àäðåñíèê óñï³øíî î÷èùåíî."
 
-#: templates/addressbooks.inc:72
-msgid "Address book to delete "
-msgstr "Àäðåñíèê, ÿêèé âèòåðòè "
-
 #: templates/prefs/addressbookselect.inc:167
 #: templates/prefs/addressbookselect.inc:169
 msgid "Address books that will not be displayed:"
 msgstr "Àäðåñíèêè, ÿê³ íå áóäóòü â³äîáðàæàòèñü:"
 
-#: search.php:161 templates/browse/search.inc:47
+#: search.php:184 templates/browse/search.inc:47
 msgid "Advanced Search"
 msgstr "Ðîçøèðåíèé ïîøóê"
 
-#: config/attributes.php.dist:68
+#: config/attributes.php.dist:83
 msgid "Alias"
 msgstr "Ïñåâäîí³ì"
 
@@ -149,11 +152,15 @@ msgstr "
 msgid "All"
 msgstr "Âñ³"
 
-#: lib/api.php:657
+#: lib/api.php:941
 msgid "Already Exists"
 msgstr "Âæå ³ñíóº"
 
-#: config/attributes.php.dist:242
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Þâ³ëå¿"
+
+#: config/attributes.php.dist:102
 msgid "Anniversary"
 msgstr "г÷íèöÿ"
 
@@ -166,7 +173,11 @@ msgstr "
 msgid "Are you sure that you want to delete the selected contacts?"
 msgstr "Âè âïåâíåí³, ùî õî÷åòå âèòåðòè âèáðàí³ êîíòàêòè?"
 
-#: search.php:158 templates/browse/search.inc:46
+#: config/attributes.php.dist:424
+msgid "Assistant"
+msgstr ""
+
+#: search.php:181 templates/browse/search.inc:46
 msgid "Basic Search"
 msgstr "Ïðîñòèé ïîøóê"
 
@@ -175,16 +186,15 @@ msgstr "
 msgid "Bind failed: (%s) %s"
 msgstr "ϳä'ºäíàííÿ íåâäàëå: (%s) %s"
 
-#: config/attributes.php.dist:182
+#: config/attributes.php.dist:95
 msgid "Birthday"
 msgstr "Äåíü íàðîäæåííÿ"
 
-#: lib/Driver.php:466
-#, php-format
-msgid "Birthday of %s"
-msgstr "Äåíü íàðîäæåííÿ %s"
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Äí³ íàðîäæåííÿ"
 
-#: contact.php:94 templates/browse/row.inc:6
+#: contact.php:128 templates/browse/row.inc:10
 msgid "Blank name"
 msgstr ""
 
@@ -192,15 +202,16 @@ msgstr ""
 msgid "Both"
 msgstr "Îáèäâà"
 
-#: templates/menu.inc:8
+#: addressbooks/index.php:39 templates/menu.inc:8
+#: templates/addressbook_list.php:29
 msgid "Browse"
 msgstr "Ïåðåãëÿä"
 
-#: config/attributes.php.dist:177
+#: config/attributes.php.dist:300
 msgid "Business Category"
 msgstr "Á³çíåñ êàòåãîð³ÿ"
 
-#: data.php:60
+#: data.php:101
 msgid "CSV"
 msgstr "CSV"
 
@@ -208,40 +219,44 @@ msgstr "CSV"
 msgid "Can't add a group to itself."
 msgstr "Íå ìîæíà äîäàâàòè ãðóïó ñàìó äî ñåáå."
 
-#: lib/Driver/kolab.php:593 lib/Driver/kolab.php:870
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "³äì³íèòè"
+
+#: lib/Driver/kolab.php:624
 #, php-format
 msgid "Cannot delete all address book entries for %s"
 msgstr "Íå ìîæó âèòåðòè âñ³ çàïèñè ç àäðåñíèêà %s"
 
-#: templates/browse/column_headers.inc:24
+#: config/attributes.php.dist:388
+msgid "Category"
+msgstr "Êàòåãîð³ÿ"
+
+#: templates/browse/column_headers.inc:25
 #, php-format
 msgid "Change %s sort to %s"
-msgstr ""
+msgstr "Çì³íèòè %s ñîðòóâàííÿ íà %s"
+
+#: addressbooks/index.php:41 templates/addressbook_list.php:33
+msgid "Change Permissions"
+msgstr "Çì³íèòè Ïðàâà"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check All/None"
 msgstr "Ïîçíà÷èòè âñ³/æîäíîãî"
 
-#: templates/browse/column_headers.inc:7
+#: templates/browse/column_headers.inc:8
 msgid "Check _All/None"
 msgstr "Ïîçíà÷èòè âñ³/æîäíîãî"
 
-#: config/attributes.php.dist:253
+#: config/attributes.php.dist:115
 msgid "Children"
-msgstr ""
-
-#: templates/addressbooks.inc:52
-msgid "Choose a name"
-msgstr "Îáåð³òü íàçâó"
+msgstr "ijòè"
 
 #: lib/Forms/AddContact.php:36
 msgid "Choose an address book"
 msgstr "Âèáåð³òü àäðåñíèê"
 
-#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
-msgid "Choose an address book:"
-msgstr "Âèáåð³òü àäðåñíèê:"
-
 #: templates/prefs/addressbookselect.inc:163
 msgid "Choose which address books to display, and in what order:"
 msgstr "Âêàæ³òü, ÿê³ àäðåñíèêè ïîêàçàòè ³ â ÿêîìó ïîðÿäêó:"
@@ -250,11 +265,13 @@ msgstr "
 msgid "Choose which address books to use."
 msgstr "Âèáåð³òü, ÿê³ àäðåñíèêè âèêîðèñòîâóâàòè."
 
-#: templates/prefs/columnselect.inc:227
-msgid "Choose which columns to display and in what order:"
-msgstr "Âêàæ³òü, ÿê³ êîëîíêè ïîêàçàòè ³ â ÿêîìó ïîðÿäêó:"
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
 
-#: templates/block/minisearch.inc:27
+#: templates/block/minisearch.inc:26
 msgid "Close"
 msgstr "Çàêðèòè"
 
@@ -266,11 +283,7 @@ msgstr "
 msgid "Column Options"
 msgstr "Îïö³¿ êîëîíîê"
 
-#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
-msgid "Columns that will not be displayed:"
-msgstr "Êîëîíêè, ÿê³ íå áóäóòü ïîêàçàí³:"
-
-#: templates/data/export.inc:12 templates/data/import.inc:13
+#: templates/data/import.inc:13 templates/data/export.inc:12
 msgid "Comma separated values"
 msgstr "Ðîçä³ëåí³ êîìîþ çíà÷åííÿ"
 
@@ -278,18 +291,59 @@ msgstr "
 msgid "Comma separated values (Microsoft Outlook)"
 msgstr "Ðîçä³ëåí³ êîìîþ çíà÷åííÿ (Microsoft Outlook)"
 
-#: config/attributes.php.dist:80
+#: config/attributes.php.dist:522
+msgid "Common Address Extended"
+msgstr ""
+
+#: config/attributes.php.dist:540
+msgid "Common City"
+msgstr ""
+
+#: config/attributes.php.dist:558
+msgid "Common Country"
+msgstr ""
+
+#: config/attributes.php.dist:466
+msgid "Common Phone"
+msgstr ""
+
+#: config/attributes.php.dist:534
+msgid "Common Post Office Box"
+msgstr ""
+
+#: config/attributes.php.dist:552
+msgid "Common Postal Code"
+msgstr ""
+
+#: config/attributes.php.dist:546
+msgid "Common State/Province"
+msgstr ""
+
+#: config/attributes.php.dist:528
+msgid "Common Street"
+msgstr ""
+
+#: config/attributes.php.dist:491
+msgid "Common Video Call"
+msgstr ""
+
+#: config/sources.php.dist:256 config/sources.php.dist:948
+msgid "Communications"
+msgstr "Êîìóí³êàö³¿"
+
+#: config/attributes.php.dist:306
 msgid "Company"
 msgstr "Êîìïàí³ÿ"
 
-#: config/attributes.php.dist:148
+#: config/attributes.php.dist:235
 msgid "Company Address"
 msgstr "Àäðåñà êîìïàí³¿"
 
-#: lib/api.php:362 lib/api.php:407 lib/api.php:457 lib/api.php:506
-#: lib/api.php:552 lib/api.php:593 lib/api.php:710 lib/api.php:797
-#: lib/api.php:855 lib/api.php:939 lib/api.php:1148 lib/api.php:1197
-#: lib/api.php:1273
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
 #, php-format
 msgid "Connection failed: %s"
 msgstr "Çâ'ÿçîê âòðà÷åíî: %s"
@@ -302,7 +356,7 @@ msgstr "
 msgid "Contact Search"
 msgstr "Ïîøóê êîíòàêò³â"
 
-#: config/sources.php.dist:792
+#: config/sources.php.dist:866
 msgid "Contacts"
 msgstr "Êîíòàêòè"
 
@@ -310,7 +364,7 @@ msgstr "
 msgid "Contacts displayed:"
 msgstr "Ïîêàçàíî êîíòàêòè:"
 
-#: lib/Views/Browse.php:330
+#: lib/Views/Browse.php:346
 #, php-format
 msgid "Contacts in list: %s"
 msgstr "Êîíòàêòè â ñïèñêó: %s"
@@ -319,46 +373,51 @@ msgstr "
 msgid "Copy"
 msgstr "Êîï³þâàòè"
 
-#: templates/addressbooks.inc:61
+#: lib/Forms/CreateAddressBook.php:39
 msgid "Create"
 msgstr "Ñòâîðèòè"
 
-#: templates/addressbooks.inc:48
+#: lib/Forms/CreateAddressBook.php:34
 msgid "Create Address Book"
 msgstr "Ñòâîðèòè Àäðåñíèê"
 
-#: lib/ListView.php:443
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Ñòâîðèòè íîâèé Àäðåñíèê"
+
+#: lib/ListView.php:448
 msgid "Create a new Contact List in:"
 msgstr "Ñòâîðèòè íîâèé ñïèñîê êîíòàêò³â â:"
 
-#: lib/Views/Contact.php:58
+#: lib/Views/Contact.php:80
 msgid "Created"
 msgstr "Ñòâîðåíî"
 
-#: contact.php:83
+#: contact.php:95
 msgid "De_lete"
 msgstr "Âèòåðòè"
 
-#: templates/addressbooks.inc:86 templates/browse/actions.inc:3
-#: lib/Views/DeleteContact.php:58
+#: addressbooks/index.php:42 templates/addressbook_list.php:35
+#: templates/browse/actions.inc:3 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
 msgid "Delete"
 msgstr "Âèòåðòè"
 
-#: lib/Views/DeleteContact.php:28
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
 #, php-format
 msgid "Delete %s"
 msgstr "Âèòåðòè %s"
 
-#: templates/addressbooks.inc:68
-msgid "Delete Address Book"
-msgstr "Âèòåðòè Àäðåñíèê"
+#: lib/api.php:644
+msgid "Delete denied."
+msgstr "Âèòèðàííÿ çàáîðîíåíî."
 
-#: lib/Driver/ldap.php:285
+#: lib/Driver/ldap.php:321
 #, php-format
 msgid "Delete failed: (%s) %s"
 msgstr "Âèòèðàííÿ  íåâäàëå: (%s) %s"
 
-#: lib/Driver.php:1393
+#: lib/Driver.php:2121 lib/Driver/null.php:62
 msgid "Deleting contacts is not available."
 msgstr "Âèäàëåííÿ êîíòàêò³â íå ìîæëèâå."
 
@@ -366,11 +425,11 @@ msgstr "
 msgid "Deletion failed"
 msgstr "Âèäàëåííÿ íå âäàëîñÿ."
 
-#: config/attributes.php.dist:217
+#: config/attributes.php.dist:312
 msgid "Department"
 msgstr "³ää³ë"
 
-#: templates/addressbooks.inc:126
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
 msgid "Description"
 msgstr "Îïèñ"
 
@@ -387,72 +446,71 @@ msgstr "
 msgid "Display Options"
 msgstr "Îïö³¿ â³äîáðàæåííÿ"
 
-#: lib/Object.php:346
+#: lib/Object.php:354
 msgid "Download"
 msgstr "Ñêà÷àòè"
 
-#: templates/browse/row.inc:13
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
+#: templates/browse/contactrow.inc:25
 msgid "Download vCard"
 msgstr "Ñêà÷àòè vCard"
 
-#: templates/addressbooks.inc:113 templates/browse/actions.inc:6
-#: templates/browse/column_headers.inc:10 templates/browse/row.inc:21
+#: addressbooks/index.php:40 templates/addressbook_list.php:31
+#: templates/browse/column_headers.inc:11 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/contactrow.inc:33
+#: templates/browse/actions.inc:6
 msgid "Edit"
 msgstr "Ðåäàãóâàòè"
 
-#: edit.php:91
+#: edit.php:91 templates/browse/contactrow.inc:33
 #, php-format
 msgid "Edit \"%s\""
 msgstr "Ðåäàãóâàòè \"%s\""
 
-#: lib/Views/EditContact.php:35
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
 #, php-format
 msgid "Edit %s"
 msgstr "Ðåäàãóâàòè %s"
 
-#: templates/addressbooks.inc:92
-msgid "Edit Address Books"
-msgstr "Ðåäàãóâàòè Àäðåñíèêè"
-
-#: config/attributes.php.dist:56
+#: config/attributes.php.dist:249
 msgid "Email"
 msgstr "Å-ïîøòà"
 
-#: config/attributes.php.dist:62
+#: config/attributes.php.dist:255
 msgid "Emails"
 msgstr "Å-ïîøòè"
 
-#: lib/Views/Browse.php:256 lib/Views/Browse.php:295
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
 #, php-format
 msgid "Error adding %d contact(s) to list."
 msgstr "Ïîìèëêà äîäàâàííÿ %d êîíòàêòó(³â) äî ñïèñêó."
 
-#: lib/Views/Browse.php:258 lib/Views/Browse.php:297
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
 #, php-format
 msgid "Error adding %d of %d requested contact(s) to list."
 msgstr "Ïîìèëêà äîäàâàííÿ %d ç %d âêàçàíèõ êîíòàêò³â äî ñïèñêó."
 
-#: lib/Views/Browse.php:133
+#: lib/Views/Browse.php:134
 #, php-format
 msgid "Error deleting %d contact(s)."
 msgstr "Ïîìèëêà âèäàëåííÿ %d êîíòàêòó(³â)."
 
-#: lib/Views/Browse.php:135
+#: lib/Views/Browse.php:136
 #, php-format
 msgid "Error deleting %d of %d requested contacts(s)."
 msgstr "Ïîìèëêà âèäàëåííÿ %d ç %d âêàçàíèõ êîíòàêò³â."
 
-#: lib/Views/Browse.php:116
+#: lib/Views/Browse.php:117
 #, php-format
 msgid "Error removing %d contact(s) from list."
 msgstr "Ïîìèëêà âèäàëåííÿ %d êîíòàêòó(³â) ç³ ñïèñêó."
 
-#: lib/Views/Browse.php:118
+#: lib/Views/Browse.php:119
 #, php-format
 msgid "Error removing %d of %d requested contact(s) from list."
 msgstr "Ïîìèëêà âèäàëåííÿ %d ç %d âêàçàíèõ êîíòàêò³â(³â) ç³ ñïèñêó."
 
-#: lib/api.php:463
+#: lib/api.php:707
 #, php-format
 msgid "Error searching the address book: %s"
 msgstr "Ïîìèëêà ïîøóêó â Àäðåñíèêó: %s"
@@ -473,50 +531,54 @@ msgstr "
 msgid "Export the following address book completely."
 msgstr "Åêñïîðòóâàòè íàñòóïíèé àäðåñíèê ïîâí³ñòþ."
 
-#: add.php:42 search.php:86 data.php:143 data.php:242 data.php:320
-#: lib/Views/Browse.php:83 lib/Views/Browse.php:151 lib/Views/Browse.php:179
+#: search.php:106 add.php:42 data.php:247 data.php:346 data.php:424
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
 #, php-format
 msgid "Failed to access the address book: %s"
 msgstr "Íåâäàëèé äîñòóï äî àäðåñíèêà: %s"
 
-#: lib/Views/Browse.php:207
+#: lib/Views/Browse.php:211
 #, php-format
 msgid "Failed to add %s to %s: %s"
 msgstr "Íå âäàëîñü äîäàòè %s äî %s: %s"
 
-#: lib/Views/Browse.php:336
+#: lib/Views/Browse.php:352
 msgid "Failed to browse list"
 msgstr "Íå âäàëîñü ïðîãëÿíóòè ñïèñîê"
 
-#: lib/Views/Browse.php:363
+#: lib/Views/Browse.php:383
 msgid "Failed to browse the directory"
 msgstr "Íå âäàëîñü ïðîãëÿíóòè äèðåêòîð³þ"
 
-#: lib/Driver/ldap.php:318
+#: lib/Driver/ldap.php:354
 #, php-format
 msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
 msgstr ""
 "Íå âäàëîñü çì³íèòè ³ì'ÿ: (%s) %s; Ñòàðèé DN = %s, Íîâèé DN = %s, Root = %s"
 
-#: lib/Views/Browse.php:185
+#: lib/Views/Browse.php:186
 #, php-format
 msgid "Failed to find object to be added: %s"
 msgstr "Íå âäàëîñü çíàéòè îá'ºêò äëÿ äîäàâàííÿ: %s"
 
-#: search.php:152
+#: search.php:175
 msgid "Failed to search the address book"
 msgstr "Ïîìèëêà ïîøóêó â Àäðåñíèêó"
 
-#: data.php:158
+#: data.php:262
 #, php-format
 msgid "Failed to search the directory: %s"
 msgstr "Íå âäàëîñü çíàéòè äèðåêòîð³þ: %s"
 
-#: config/attributes.php.dist:171
+#: config/sources.php.dist:565
+msgid "Favourite Recipients"
+msgstr "Ïîïóëÿðí³ îòðèìóâà÷³"
+
+#: config/attributes.php.dist:276
 msgid "Fax"
 msgstr "Ôàêñ"
 
-#: lib/Forms/Contact.php:40
+#: lib/Forms/Contact.php:41
 msgid "Files"
 msgstr "Ôàéëè"
 
@@ -524,15 +586,15 @@ msgstr "
 msgid "Find"
 msgstr "Ïîøóê"
 
-#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:155
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
 msgid "Finish"
 msgstr "ʳíåöü"
 
-#: config/attributes.php.dist:46
+#: config/attributes.php.dist:53
 msgid "First Name"
 msgstr "²ì'ÿ"
 
-#: config/attributes.php.dist:206
+#: config/attributes.php.dist:350
 msgid "Freebusy URL"
 msgstr "URL â³ëüíèé/çàíÿòèé"
 
@@ -540,43 +602,83 @@ msgstr "URL 
 msgid "From"
 msgstr "³ä"
 
-#: config/sources.php.dist:722
+#: config/attributes.php.dist:430
+msgid "Gender"
+msgstr "Ñòàòü"
+
+#: config/sources.php.dist:791
 msgid "Global Address Book"
 msgstr "Ãëîáàëüíèé Àäðåñíèê"
 
-#: templates/browse/row.inc:39
+#: templates/browse/row.inc:61 templates/browse/contactrow.inc:44
 msgid "Group"
 msgstr "Ãðóïà"
 
-#: config/attributes.php.dist:86
+#: config/attributes.php.dist:135
 msgid "Home Address"
 msgstr "Äîìàøíÿ àäðåñà"
 
-#: config/attributes.php.dist:97
+#: config/attributes.php.dist:592
+msgid "Home Address Extended"
+msgstr "Äîìàøíÿ àäðåñà Ðîçøèðåíà"
+
+#: config/attributes.php.dist:153
 msgid "Home City"
 msgstr ""
 
-#: config/attributes.php.dist:112
+#: config/attributes.php.dist:171
 msgid "Home Country"
 msgstr ""
 
-#: config/attributes.php.dist:154
+#: config/attributes.php.dist:460
+msgid "Home Email"
+msgstr "Äîìàøíÿ å-ïîøòà"
+
+#: config/attributes.php.dist:476
+msgid "Home Fax"
+msgstr "Äîìàøí³é ôàêñ"
+
+#: config/attributes.php.dist:598
+msgid "Home Latitude"
+msgstr "Äîìàøíÿ øèðîòà"
+
+#: config/attributes.php.dist:603
+msgid "Home Longitude"
+msgstr "Äîìàøíÿ äîâãîòà"
+
+#: config/attributes.php.dist:486
+msgid "Home Mobile Phone"
+msgstr "Äîìàøí³é Ìîá³ëüíèé òåëåôîí"
+
+#: config/attributes.php.dist:261
 msgid "Home Phone"
 msgstr "Äîìàøí³é òåëåôîí"
 
-#: config/attributes.php.dist:107
+#: config/attributes.php.dist:147
+msgid "Home Post Office Box"
+msgstr ""
+
+#: config/attributes.php.dist:165
 msgid "Home Postal Code"
 msgstr ""
 
-#: config/attributes.php.dist:102
+#: config/attributes.php.dist:159
 msgid "Home State/Province"
 msgstr ""
 
-#: config/attributes.php.dist:92
+#: config/attributes.php.dist:141
 msgid "Home Street Address"
 msgstr ""
 
-#: config/sources.php.dist:613
+#: config/attributes.php.dist:501
+msgid "Home Video Call"
+msgstr ""
+
+#: config/attributes.php.dist:586
+msgid "Home Website URL"
+msgstr "URL äîìàøíüîãî âåáñàéòó"
+
+#: config/sources.php.dist:682
 msgid "IMSP"
 msgstr "IMSP"
 
@@ -585,46 +687,54 @@ msgstr "IMSP"
 msgid "Import Address Book, Step %d"
 msgstr "²ìïîðò àäðåñíèêà, Êðîê %d"
 
-#: data.php:388
+#: data.php:501
 msgid "Import/Export Address Books"
 msgstr "²ìïîðò/Åêñïîðò àäðåñíèê³â"
 
-#: config/attributes.php.dist:232
+#: config/attributes.php.dist:406
 msgid "Initials"
 msgstr ""
 
-#: lib/api.php:705 lib/api.php:792
+#: config/attributes.php.dist:412
+msgid "Instant Messenger"
+msgstr "Îíëàéí ìåññåíäæåð"
+
+#: lib/api.php:999 lib/api.php:1132
 msgid "Invalid ID"
 msgstr "Íåïðàâèëüíèé ID"
 
-#: lib/api.php:274 lib/api.php:452 lib/api.php:501 lib/api.php:547
-#: lib/api.php:588 lib/api.php:701 lib/api.php:788 lib/api.php:845
-#: lib/api.php:1256
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
 #, php-format
 msgid "Invalid address book: %s"
 msgstr "Íåïðàâèëüíèé àäðåñíèê: %s"
 
-#: lib/api.php:1260 lib/api.php:1334 lib/api.php:1390
+#: lib/api.php:1198
+msgid "Invalid contact unique ID"
+msgstr ""
+
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
 msgid "Invalid email"
 msgstr "Íåïðàâèëüíà å-ïîøòà"
 
-#: lib/api.php:1268
+#: lib/api.php:1786
 msgid "Invalid entry"
 msgstr "Íåïðàâèëüíèé çàïèñ"
 
-#: lib/Driver/ldap.php:281
+#: lib/Driver/ldap.php:317
 msgid "Invalid key specified."
 msgstr "Âêàçàíî íåêîðåêòíèé êëþ÷."
 
-#: lib/api.php:1264
+#: lib/api.php:1782
 msgid "Invalid name"
 msgstr "Íåïðàâèëüíå ³ì'ÿ"
 
-#: lib/api.php:849
-msgid "Invalid objectId"
-msgstr "Íåä³éñíèé objectId"
+#: config/attributes.php.dist:288
+msgid "Job Title"
+msgstr ""
 
-#: lib/Driver/kolab.php:828 lib/Driver/kolab.php:850
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
 #, php-format
 msgid "Key for saving must be a UID not %s!"
 msgstr ""
@@ -635,31 +745,71 @@ msgid ""
 msgstr ""
 "ϳäòðèìêà LDAP íåîáõ³äíà, àëå ìîäóëü LDAP íå äîñòóïíèé àáî íå çàâàíòàæåíèé."
 
-#: data.php:65 templates/data/export.inc:16 templates/data/import.inc:18
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
 msgid "LDIF Address Book"
 msgstr ""
 
-#: lib/Views/Contact.php:64
+#: config/attributes.php.dist:436
+msgid "Language"
+msgstr "Ìîâà"
+
+#: lib/Views/Contact.php:91
 msgid "Last Modified"
 msgstr "Âîñòàííº îíîâëåíî"
 
-#: config/attributes.php.dist:51
+#: config/attributes.php.dist:59
 msgid "Last Name"
 msgstr "Ïð³çâèùå"
 
-#: templates/browse/column_headers.inc:16
+#: config/attributes.php.dist:442
+msgid "Latitude"
+msgstr "Øèðîòà"
+
+#: templates/browse/column_headers.inc:17
 msgid "List"
 msgstr "Ñïèñîê"
 
+#: config/sources.php.dist:251 config/sources.php.dist:944
+msgid "Location"
+msgstr "̳ñöå ïåðåáóâàííÿ"
+
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "Ëîãîòèï"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr ""
+
+#: config/attributes.php.dist:447
+msgid "Longitude"
+msgstr "Äîâãîòà"
+
+#: lib/api.php:616
+msgid "Malformed request."
+msgstr "Íåïðàâèëüíèé çàïèò."
+
+#: addressbooks/index.php:46 templates/addressbook_list.php:2
+msgid "Manage Address Books"
+msgstr "Êåðóâàííÿ Àäðåñíèêàìè"
+
+#: config/attributes.php.dist:418
+msgid "Manager"
+msgstr "Ìåíåäæåð"
+
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Ïîçíà÷èòè öå ÿê âëàñíèé êîíòàêò"
+
 #: templates/browse/search.inc:109
 msgid "Matching"
 msgstr ""
 
-#: lib/api.php:249
+#: lib/api.php:329
 msgid "Maximum Number of Contacts"
 msgstr "Ìàêñèìàëüíà ê³ëüê³ñòü êîíòàêò³â"
 
-#: config/prefs.php.dist:88
+#: config/prefs.php.dist:97
 msgid "Maximum number of pages"
 msgstr "Ìàêñèìàëüíà ê³ëüê³ñòü ñòîð³íîê"
 
@@ -667,24 +817,28 @@ msgstr "
 msgid "Menu List"
 msgstr "Ñïèñîê ìåíþ"
 
-#: lib/Driver/ldap.php:311
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Ïî-áàòüêîâ³"
+
+#: lib/Driver/ldap.php:347
 msgid "Missing DN in LDAP source configuration."
 msgstr ""
 
-#: config/attributes.php.dist:166
+#: config/attributes.php.dist:271
 msgid "Mobile Phone"
 msgstr "Ìîá³ëüíèé òåëåôîí"
 
-#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
 #, php-format
 msgid "Modify failed: (%s) %s"
-msgstr ""
+msgstr "Çì³íà íåâäàëà: (%s) %s"
 
 #: templates/browse/header.inc:8
 msgid "More Options..."
 msgstr "Á³ëüøå îïö³é..."
 
-#: lib/api.php:1375
+#: lib/api.php:1902
 msgid "More than 1 entry found"
 msgstr "Á³ëüøå í³æ 1 çàïèñ çíàéäåíî"
 
@@ -693,34 +847,29 @@ msgid "Move"
 msgstr "Ïåðåíåñòè"
 
 #: templates/prefs/addressbookselect.inc:184
-#: templates/prefs/columnselect.inc:248
 msgid "Move left"
 msgstr "Ïîñóíóòè âë³âî"
 
 #: templates/prefs/addressbookselect.inc:186
-#: templates/prefs/columnselect.inc:250
 msgid "Move right"
 msgstr "Ïîñóíóòè âïðàâî"
 
-#: data.php:63 templates/data/import.inc:16
+#: data.php:104 templates/data/import.inc:16
 msgid "Mulberry Address Book"
 msgstr "Àäðåñíèê Mulberry"
 
-#: lib/api.php:1292
+#: lib/api.php:1810
 #, php-format
 msgid ""
 "Multiple persons with address [%s], but none with name [%s] already exist"
 msgstr "ʳëüêà îñ³á ç àäðåñàìè [%s], àëå æîäåí ç ³ìåíåì [%s] ³ñíóþòü"
 
-#: config/sources.php.dist:147
+#: config/sources.php.dist:167
 msgid "My Address Book"
 msgstr "̳é Àäðåñíèê"
 
-#: addressbooks.php:176
-msgid "My Address Books"
-msgstr "Ìî¿ Àäðåñíèêè"
-
-#: templates/addressbooks.inc:118 config/attributes.php.dist:40
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
 msgid "Name"
 msgstr "²ì'ÿ"
 
@@ -728,58 +877,67 @@ msgstr "
 msgid "Name Format"
 msgstr "Ôîðìàò ³ìåí³"
 
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Ïðèñòàâêà ³ìåí³"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr ""
+
 #: templates/browse/search_vbook.inc:6
 msgid "Name:"
 msgstr ""
 
-#: add.php:70 lib/Block/tree_menu.php:27
+#: add.php:70 lib/Block/tree_menu.php:28
 msgid "New Contact"
 msgstr "Íîâèé êîíòàêò"
 
-#: templates/data/import.inc:46 lib/Forms/EditContact.php:110
-#: lib/Forms/EditContact.php:117 lib/Forms/EditContact.php:170
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
 msgid "Next"
 msgstr "Íàñòóïíèé"
 
-#: config/attributes.php.dist:222
+#: config/attributes.php.dist:89
 msgid "Nickname"
 msgstr "ͳê"
 
-#: lib/api.php:1378 lib/api.php:1427
+#: lib/api.php:1905 lib/api.php:1965
 #, php-format
 msgid "No %s entry found for %s"
 msgstr "Íå çíàéäåíî çàïèñ³â %s äëÿ %s"
 
-#: data.php:52
+#: data.php:93
 msgid ""
 "No Address Books are currently available. Import and Export is disabled."
 msgstr "Æîäíèõ àäðåñíèê³â çàðàç íå äîñòóïíî. ²ìïîðò ³ åêñïîðò çàáîðîíåí³."
 
-#: search.php:72
+#: search.php:92
 msgid "No Address Books are currently available. Searching is disabled."
 msgstr "Æîäíèõ àäðåñíèê³â çàðàç íå äîñòóïíî. Ïîøóê çàáîðîíåíèé."
 
-#: lib/api.php:1343
-msgid "No address books found."
-msgstr "Æîäíîãî àäðåñíèêà íå çíàéäåíî."
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
+msgid "No address book specified"
+msgstr "Æîäíîãî àäðåñíèêà íå âêàçàíî"
 
-#: minisearch.php:81
+#: minisearch.php:80
 msgid "No contacts found"
-msgstr "Æîäíèõ êîíòàêò³â íå çíàéäåíî."
+msgstr "Æîäíèõ êîíòàêò³â íå çíàéäåíî"
 
-#: templates/browse/column_headers.inc:43
+#: templates/browse/column_headers.inc:44
 msgid "No contacts match the current filter."
 msgstr "Æîäåí êîíòàêò íå â³äïîâ³äຠïîòî÷íîìó ô³ëüòðó."
 
-#: lib/ListView.php:251
+#: lib/ListView.php:255
 msgid "No matching contacts"
-msgstr "³äïîâ³äíèõ êîíòêò³â íå çíàéäåíî."
+msgstr "³äïîâ³äíèõ êîíòàêò³â íå çíàéäåíî"
 
-#: lib/Driver/favourites.php:120
+#: lib/Driver/favourites.php:124
 msgid "No source for favourite recipients exists."
 msgstr ""
 
-#: lib/api.php:614 lib/api.php:881
+#: lib/api.php:893 lib/api.php:1235
 msgid "No vCard data was found."
 msgstr "Æîäíèõ vCard äàíèõ íå çíàéäåíî."
 
@@ -787,28 +945,37 @@ msgstr "
 msgid "None"
 msgstr "Æîäåí"
 
-#: lib/Views/Contact.php:33 lib/Views/DeleteContact.php:26
-#: lib/Views/EditContact.php:33
+#: lib/Views/EditContact.php:33 lib/Views/DeleteContact.php:26
+#: lib/Views/Contact.php:49
 msgid "Not Found"
 msgstr "Íå çíàéäåíî"
 
-#: edit.php:48 deletefile.php:22
+#: deletefile.php:22 edit.php:48
 msgid "Not found"
 msgstr "Íå çíàéäåíî"
 
-#: config/attributes.php.dist:188
+#: config/attributes.php.dist:338
 msgid "Notes"
-msgstr "Çàïèñè"
+msgstr "Íîòàòêè"
 
-#: config/prefs.php.dist:96
+#: config/prefs.php.dist:105
 msgid "Number of items per page"
-msgstr "×èñëî îäèíèöü íà ñòîð³íêó"
+msgstr "ʳëüê³ñòü íà ñòîð³íêó"
 
-#: lib/api.php:721 lib/api.php:861
+#: lib/api.php:1041 lib/api.php:1260
 msgid "Object not found"
 msgstr "Îá'ºêò íå çíàéäåíî"
 
-#: config/attributes.php.dist:227
+#: lib/Driver/kolab.php:1199
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Îá'ºêò ç UID %s íå ³ñíóº!"
+
+#: config/attributes.php.dist:294
+msgid "Occupation"
+msgstr "Ïîñàäà"
+
+#: config/attributes.php.dist:318
 msgid "Office"
 msgstr "Îô³ñ"
 
@@ -821,28 +988,52 @@ msgstr ""
 "Îñê³ëüêè Âè çáåðåãëè öþ ñòîð³íêó íàñòðîéîê, àäðåñíèê áóäå íàçàâæäè âèòåðòî."
 "ßêùî öå íå òå, ùî Âàì ïîòð³áíî, òîä³ çì³í³òü ñâ³é âèá³ð íà \"Æîäåí\"."
 
-#: lib/api.php:889
+#: lib/api.php:1243
 msgid "Only one vcard supported."
 msgstr "ϳäòðèìóºòüñÿ ò³ëüêè îäíà vcard."
 
-#: config/attributes.php.dist:194
+#: config/sources.php.dist:258 config/sources.php.dist:950
+msgid "Organization"
+msgstr "Îðãàí³çàö³ÿ"
+
+#: config/sources.php.dist:259 config/sources.php.dist:952
+msgid "Other"
+msgstr "²íøèé"
+
+#: config/attributes.php.dist:356
 msgid "PGP Public Key"
 msgstr "Ïóáë³÷íèé êëþ÷ PGP"
 
+#: config/attributes.php.dist:517
+msgid "PTT"
+msgstr ""
+
+#: config/attributes.php.dist:281
+msgid "Pager"
+msgstr "Ïåéäæåð"
+
 #: lib/Views/DeleteContact.php:57
 msgid "Permanently delete this contact?"
 msgstr "Íàçàâæäè âèòåðòè öåé êîíòàêò?"
 
-#: deletefile.php:36 lib/Driver.php:646 lib/api.php:597 lib/api.php:714
-#: lib/api.php:801 lib/api.php:1076 lib/api.php:1277 lib/Driver/sql.php:470
+#: deletefile.php:36 lib/api.php:870 lib/api.php:1795 lib/Driver.php:804
+#: lib/Driver/sql.php:515
 msgid "Permission denied"
 msgstr " äîñòóï³ â³äìîâëåíî"
 
-#: templates/addressbooks.inc:110
-msgid "Permissions"
-msgstr "Ïðàâà"
+#: config/sources.php.dist:248 config/sources.php.dist:940
+msgid "Personal"
+msgstr "Ïðèâàòí³"
+
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "Ôîòî"
 
-#: data.php:64 templates/data/import.inc:17
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr ""
+
+#: data.php:105 templates/data/import.inc:17
 msgid "Pine Address Book"
 msgstr "Àäðåñíèê Pine"
 
@@ -850,38 +1041,43 @@ msgstr "
 msgid "Please name the new contact list:"
 msgstr "Áóäü-ëàñêà, íàçâ³òü íîâèé ñïèñîê êîíòàêò³â:"
 
-#: lib/Forms/EditContact.php:113 lib/Forms/EditContact.php:116
-#: lib/Forms/EditContact.php:162
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
 msgid "Previous"
 msgstr "Ïîïåðåäíÿ"
 
-#: lib/Driver/ldap.php:162
+#: lib/Driver/ldap.php:197
 #, php-format
 msgid "Query failed: (%s) %s"
 msgstr "Íåâäàëèé çàïèò: (%s) %s"
 
-#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
 #, php-format
 msgid "Read failed: (%s) %s"
 msgstr "Çá³é ÷èòàííÿ: (%s) %s"
 
-#: lib/Driver.php:1377
+#: lib/Driver.php:2105 lib/Driver/null.php:52
 msgid "Reading contacts is not available."
 msgstr "×èòàííÿ êîíòàêò³â íå äîñòóïíå."
 
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Ñïðàâä³ âèòåðòè àäðåñíèê \"%s\"? Öå íåçâîðîòíÿ îïåðàö³ÿ ³ âñ³ êîíòàêòè â "
+"öüîìó àäðåñíèêó áóäóòü íàçàâæäè âèòåðò³."
+
 #: templates/prefs/addressbookselect.inc:175
 msgid "Remove address book"
 msgstr "Âèäàëèòè àäðåñíèê"
 
-#: templates/prefs/columnselect.inc:239
-msgid "Remove column"
-msgstr "Âèäàëèòè êîëîíêó"
-
 #: templates/browse/actions.inc:3
 msgid "Remove from this list"
 msgstr "Âèäàëèòè ç öüîãî ïåðåë³êó"
 
-#: lib/Driver.php:1415 lib/Driver/share.php:142
+#: lib/Driver.php:2143
 msgid ""
 "Removing user data is not supported in the current address book storage "
 "driver."
@@ -897,7 +1093,7 @@ msgstr ""
 "Çàì³í³òè ³ñíóþ÷èé àäðåñíèê ³ìïîðòîâàíèì? <strong> Óâàãà: Öå çíèùèòü âñ³ "
 "çàïèñè â Âàøîìó àäðåñíèêó.</strong>"
 
-#: lib/Driver.php:543
+#: lib/Driver.php:698
 msgid "Requested object not found."
 msgstr "Âêàçàíèé îá'ºêò íå çíàéäåíî."
 
@@ -905,20 +1101,20 @@ msgstr "
 msgid "Reset to Defaults"
 msgstr "Î÷èñòèòè äî òèïîâèõ"
 
-#: config/attributes.php.dist:200
+#: config/attributes.php.dist:362
 msgid "S/MIME Public Certificate"
 msgstr "S/MIME ³äêðèòèé Ñåðòèô³êàò"
 
+#: config/attributes.php.dist:511
+msgid "SIP"
+msgstr ""
+
 #: lib/Driver/ldap.php:84
 #, php-format
 msgid "STARTTLS failed: (%s) %s"
 msgstr "Çá³é STARTTLS: (%s) %s"
 
-#: config/attributes.php.dist:237
-msgid "Salutation"
-msgstr "Çâåðòàííÿ"
-
-#: templates/addressbooks.inc:135 lib/Forms/EditContact.php:26
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
 msgid "Save"
 msgstr "Çáåðåãòè"
 
@@ -926,46 +1122,34 @@ msgstr "
 msgid "Save search as a virtual address book?"
 msgstr "Çáåðåãòè ïîøóê ÿê ïñåâäî-àäðåñíèê?"
 
-#: lib/Driver.php:1403
+#: lib/Driver.php:2131 lib/Driver/null.php:67
 msgid "Saving contacts is not available."
 msgstr "Çáåðåæåííÿ êîíòàêò³â íå äîñòóïíå."
 
-#: templates/browse/header.inc:3 templates/browse/search.inc:111
-#: templates/browse/search.inc:119 templates/block/minisearch.inc:26
-#: lib/Block/tree_menu.php:49 config/prefs.php.dist:107
+#: templates/block/minisearch.inc:25 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/browse/header.inc:3
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
 msgid "Search"
 msgstr "Ïîøóê"
 
-#: lib/api.php:1153
+#: lib/api.php:1568
 msgid "Search failed"
 msgstr "Ïîøóê íåâäàëèé"
 
-#: lib/api.php:1282 lib/api.php:1288 lib/api.php:1297 lib/api.php:1310
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
 #, php-format
 msgid "Search failed: %s"
 msgstr "Ïîøóê íåâäàëèé: %s"
 
-#: templates/block/minisearch.inc:24
+#: templates/block/minisearch.inc:23
 msgid "Search for: "
 msgstr ""
 
-#: lib/Driver.php:1362
+#: lib/Driver.php:2090 lib/Driver/null.php:47
 msgid "Searching is not available."
 msgstr "Ïîøóê íå äîñòóïíèé."
 
-#: templates/block/minisearch.inc:28
-msgid "Searching..."
-msgstr "Øóêàþ..."
-
-#: templates/addressbooks.inc:76
-msgid "Select an address book to delete"
-msgstr "Âêàæ³òü, ÿêèé àäðåñíèê ñòåðòè"
-
-#: templates/addressbooks.inc:101
-msgid "Select an address book to edit"
-msgstr "Âêàæ³òü, ÿêèé àäðåñíèê ðåäàãóâàòè"
-
-#: templates/browse/row.inc:30
+#: templates/browse/row.inc:52
 msgid "Select contact"
 msgstr "Âèáåð³òü êîíòàêò"
 
@@ -977,6 +1161,12 @@ msgstr "
 msgid "Select the address book to import to:"
 msgstr "Âêàæ³òü àäðåñíèê, â ÿêèé ³ìïîðòóâàòè:"
 
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+
 #: templates/data/import.inc:36
 msgid "Select the charset of the source file:"
 msgstr "Âêàæ³òü êîäóâàííÿ âõ³äíîãî ôàéëó:"
@@ -993,15 +1183,13 @@ msgstr "
 msgid "Select the format of the source file:"
 msgstr "Âèáåð³òü ôîðìàò âõ³äíîãî ôàéëó:"
 
-#: config/prefs.php.dist:116
+#: config/prefs.php.dist:125
 msgid "Select the format used to display names:"
 msgstr "Âèáåð³òü ôîðìàò äëÿ â³äîáðàæåííÿ ³ìåí:"
 
 #: config/prefs.php.dist:25
-msgid "Select view to display by default, sort options, and paging options."
-msgstr ""
-"Âèáåð³òü âèãëÿä äëÿ ïîêàçó ïî çàìîâ÷óâàííþ, îïö³¿ ñîðòóâàííÿ ³ îïö³¿ "
-"ðîçáèòòÿ."
+msgid "Select view to display by default and paging options."
+msgstr "Âèáåð³òü âèãëÿä äëÿ ïîêàçó ïî çàìîâ÷óâàííþ ³ îïö³¿ ðîçáèòòÿ."
 
 #: config/prefs.php.dist:18
 msgid "Select which fields to display in the address lists."
@@ -1033,21 +1221,21 @@ msgstr "
 msgid "Show Lists"
 msgstr "Ïîêàçàòè ñïèñêè"
 
-#: lib/ListView.php:319 lib/ListView.php:325
+#: lib/ListView.php:323 lib/ListView.php:329
 msgid "Sort Direction"
 msgstr "Íàïðÿì ñîðòóâàííÿ"
 
-#: templates/browse/column_headers.inc:31
+#: templates/browse/column_headers.inc:32
 #, php-format
 msgid "Sort by %s"
 msgstr "Ñîðòóâàòè ïî %s"
 
-#: templates/browse/column_headers.inc:26
+#: templates/browse/column_headers.inc:27
 #, php-format
 msgid "Sort by %s only"
 msgstr "Ñîðòóâàòè ò³ëüêè ïî %s"
 
-#: templates/browse/column_headers.inc:29
+#: templates/browse/column_headers.inc:30
 #, php-format
 msgid "Sort by %s, then by %s"
 msgstr "Ñîðòóâàòè ïî %s, ïîò³ì ïî %s"
@@ -1056,49 +1244,49 @@ msgstr "
 msgid "Source:"
 msgstr "Äæåðåëî:"
 
-#: lib/api.php:242
+#: lib/api.php:322
 msgid "Sources"
 msgstr "Äæåðåëà"
 
-#: config/attributes.php.dist:248
+#: config/attributes.php.dist:109
 msgid "Spouse"
 msgstr ""
 
-#: lib/Views/Browse.php:254 lib/Views/Browse.php:293
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
 #, php-format
 msgid "Successfully added %d contact(s) to list."
 msgstr "Óñï³øíî äîäàíî %d êîíòàêò³â äî ñïèñîêó."
 
-#: lib/Views/Browse.php:211
+#: lib/Views/Browse.php:215
 #, php-format
 msgid "Successfully added %s to %s"
 msgstr "Óñï³øíî äîäàíî %s äî %s"
 
-#: lib/Views/Browse.php:283
+#: lib/Views/Browse.php:298
 #, php-format
 msgid "Successfully created the contact list \"%s\"."
 msgstr "Óñï³øíî ñòâîðåíî ñïèñîê êîíòàêò³â \"%s\"."
 
-#: search.php:127
+#: search.php:150
 #, php-format
 msgid "Successfully created virtual address book \"%s\""
 msgstr "Óñï³øíî ñòâîðåíî ïñåâäî-äðåñíèê \"%s\""
 
-#: lib/Views/Browse.php:131
+#: lib/Views/Browse.php:132
 #, php-format
 msgid "Successfully deleted %d contact(s)."
 msgstr "Óñï³øíî âèäàëåíî %d êîíòàêò(³â)."
 
-#: lib/Views/Browse.php:114
+#: lib/Views/Browse.php:115
 #, php-format
 msgid "Successfully removed %d contact(s) from list."
 msgstr "Óñï³øíî âèäàëåíî %d êîíòàêò(³â) ç³ ñïèñêó."
 
-#: data.php:61
+#: data.php:102
 msgid "TSV"
 msgstr "TSV"
 
-#: templates/data/export.inc:14 templates/data/import.inc:14
+#: templates/data/import.inc:14 templates/data/export.inc:14
 msgid "Tab separated values"
 msgstr "Çíà÷åííÿ ðîçä³ëåí³ òàáóëÿö³ºþ"
 
@@ -1110,7 +1298,7 @@ msgstr "
 msgid "Target Contact List"
 msgstr ""
 
-#: data.php:322
+#: data.php:426
 #, php-format
 msgid "The %s file didn't contain any contacts."
 msgstr "Ôàéë %s íå ì³ñòèòü äàíèõ."
@@ -1120,32 +1308,41 @@ msgid "The VFS backend needs to be configured to enable attachment uploads."
 msgstr ""
 "VFS áóôåð ìóñèòü áóòè ñêîíô³ãóðîâàíèé, ùîá äîçâîëèòè çàêà÷óâàííÿ äîäàòê³â."
 
-#: lib/Driver.php:1333
+#: lib/Driver.php:2061
 #, php-format
 msgid "The address book \"%s\" does not exist."
 msgstr "Àäðåñíèêà \"%s\" íå ³ñíóº."
 
-#: addressbooks.php:105
+#: addressbooks/create.php:32
 #, php-format
-msgid "The address book \"%s\" was created successfully."
-msgstr "Àäðåñíèê \"%s\" óñï³øíî ñòâîðåíî."
+msgid "The address book \"%s\" has been created."
+msgstr "Àäðåñíèê \"%s\" áóâ ñòâîðåíèé."
 
-#: addressbooks.php:132
+#: data.php:433
 #, php-format
-msgid "The address book \"%s\" was removed successfully."
-msgstr "Àäðåñíèê \"%s\" óñï³øíî âèäàëåíî."
+msgid "The address book could not be purged: %s"
+msgstr "Àäðåñíèê íå ìîæå áóòè âè÷èùåíèé: %s."
+
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Àäðåñíèêà ç Âàøèì âëàñíèì êîíòàêòîì á³ëüøå íå ³ñíóº."
 
-#: addressbooks.php:153
+#: addressbooks/delete.php:50
 #, php-format
-msgid "The address book \"%s\" was successfully updated."
-msgstr "Àäðåñíèê \"%s\" óñï³øíî îíîâëåíî."
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Àäðåñíèê \"%s\" áóâ âèòåðòèé."
 
-#: data.php:329
+#: addressbooks/edit.php:44
 #, php-format
-msgid "The address book could not be purged: %s"
-msgstr "Àäðåñíèê íå ìîæå áóòè âè÷èùåíèé: %s."
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "Àäðåñíèê \"%s\" ïåðåéìåíîâàíî íà \"%s\"."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Àäðåñíèê \"%s\" çáåðåæåíî."
 
-#: contact.php:23 vcard.php:19 view.php:28
+#: vcard.php:19 view.php:28 contact.php:23
 msgid "The contact you requested does not exist."
 msgstr "Âêàçàíèé Âàìè êîíòàêò íå ³ñíóº."
 
@@ -1154,16 +1351,16 @@ msgstr "
 msgid "The file \"%s\" has been deleted."
 msgstr "Ôàéë \"%s\" áóëî âèòåðòî."
 
-#: data.php:302
+#: data.php:406
 msgid "The import can be finished despite the warnings."
 msgstr "²ìïîðò ìîæå áóòè çàâåðøåíî, íå äèâëÿ÷èñü íà ïîïåðåäæåííÿ."
 
-#: lib/Views/Contact.php:43 lib/Views/DeleteContact.php:36
-#: lib/Views/EditContact.php:43
+#: lib/Views/EditContact.php:43 lib/Views/DeleteContact.php:36
+#: lib/Views/Contact.php:59
 msgid "The requested contact was not found."
 msgstr "Âêàçàíîãî êîíòàêòó íå çíàéäåíî."
 
-#: lib/Views/Browse.php:79
+#: lib/Views/Browse.php:80
 msgid "There are no browseable address books."
 msgstr "Íåìຠàäðåñíèêà, ÿêèé ìîæíà ïðîãëÿíóòè."
 
@@ -1177,12 +1374,20 @@ msgstr ""
 "ñêîíô³ãóðîâàíèé íà ïðèºäíàííÿ íîâèõ çàïèñ³â. ßêùî Âè äóìàºòå, ùî öå ïîìèëêà, "
 "áóäü-ëàñêà çâ'ÿæ³òüñÿ ç Âàøèì àäì³í³ñòðàòîðîì."
 
-#: search.php:123
+#: lib/Views/Browse.php:356
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "Â ñïèñêó º %d êîíòàêò, ÿêèé Âè íå ìîæåòå ïåðåãëÿäàòè"
+msgstr[1] "Â ñïèñêó º %d êîíòàêòè, ÿêèé Âè íå ìîæåòå ïåðåãëÿäàòè"
+msgstr[2] " ñïèñêó º %d êîíòàêò³â, ÿêèé Âè íå ìîæåòå ïåðåãëÿäàòè"
+
+#: search.php:146
 #, php-format
 msgid "There was a problem creating the virtual address book: %s"
 msgstr "Òðàïèëàñü ïîìèëêà ïðè ñòâîðåíí³ öüîãî àäðåñíèêà: %s"
 
-#: lib/Forms/AddContact.php:86
+#: lib/Forms/AddContact.php:95
 msgid ""
 "There was an error adding the new contact. Contact your system administrator "
 "for further help."
@@ -1190,16 +1395,11 @@ msgstr ""
 "Áóëà ïîìèëêà ïðè äîäàâàíí³ íîâîãî êîíòàêòó. Çâ'ÿæ³òüñÿ ç àäì³í³ñòðàòîðîì äëÿ "
 "ïîäàëüøî¿ äîïîìîãè."
 
-#: lib/Views/Browse.php:302
+#: lib/Views/Browse.php:318
 msgid "There was an error creating a new list."
 msgstr "Òðàïèëàñü ïîìèëêà ñòâîðåííÿ íîâîãî ñïèñêó."
 
-#: addressbooks.php:92 addressbooks.php:95
-#, php-format
-msgid "There was an error creating this address book: %s"
-msgstr "Òðàïèëàñü ïîìèëêà ïðè ñòâîðåíí³ öüîãî àäðåñíèêà: %s"
-
-#: lib/Views/Browse.php:217
+#: lib/Views/Browse.php:221
 #, php-format
 msgid "There was an error deleting \"%s\" from the source address book."
 msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ \"%s\" ç àäðåñíèêà-äæåðåëà."
@@ -1209,35 +1409,33 @@ msgstr "
 msgid "There was an error deleting this contact: %s"
 msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ öüîãî êîíòàêòó: %s"
 
-#: lib/Views/Browse.php:342
+#: lib/Views/Browse.php:362
 msgid "There was an error displaying the list"
 msgstr "Òðàïèëàñü ïîìèëêà â³äîáðàæåíí³ ñïèñêó"
 
-#: data.php:356
+#: data.php:469
 #, php-format
 msgid "There was an error importing the data: %s"
 msgstr "Òðàïèëàñü ïîìèëêà ïðè ³ìïîðòóâàíí³ äàíèõ: %s."
 
-#: lib/api.php:610 lib/api.php:876
+#: lib/api.php:889 lib/api.php:1230
 msgid "There was an error importing the iCalendar data."
 msgstr "Òðàïèëàñü ïîìèëêà ³ìïîðòó äàíèõ ç iCalendar"
 
-#: lib/api.php:195
+#: lib/api.php:258
 #, php-format
 msgid "There was an error removing an address book for %s"
 msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ àäðåñíèêà äëÿ %s"
 
-#: addressbooks.php:115 addressbooks.php:122 addressbooks.php:130
-#, php-format
-msgid "There was an error removing this address book: %s"
-msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ öüîãî àäðåñíèêà: %s"
-
-#: addressbooks.php:151
-#, php-format
-msgid "There was an error updating this address book: %s"
-msgstr "Òðàïèëàñü ïîìèëêà îíîâëåííÿ öüîãî àäðåñíèêà: %s."
+#: lib/Forms/EditContact.php:93
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Òðàïèëàñü ïîìèëêà çáåðåæåííÿ êîíòàêòó. Çâ'ÿæ³òüñÿ ç àäì³í³ñòðàòîðîì äëÿ "
+"ïîäàëüøî¿ äîïîìîãè."
 
-#: data.php:188
+#: data.php:292
 msgid "There were no addresses to export."
 msgstr "Íåìຠæîäíî¿ àäðåñè, ùîá åêñïîðòóâàòè."
 
@@ -1246,111 +1444,179 @@ msgstr "
 msgid "These address books will display in this order:"
 msgstr "Ö³ àäðåñíèêè áóäóòü ïîêàçàí³ â òàêîìó ïîðÿäêó:"
 
-#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
-msgid "These columns will display in this order:"
-msgstr "Ö³ êîëîíêè áóäóòü ïîêàçàí³ â òàêîìó ïîðÿäêó:"
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Öåé àäðåñíèê íå ìîæå áóòè âèòåðòèé."
+
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Öåé êîíòàêò ïîçíà÷åíèé ÿê Âàø âëàñíèé."
 
-#: data.php:287
+#: data.php:391
 msgid "This file format is not supported."
 msgstr "Öåé ôîðìàò ôàéëó íå ï³äòðèìóºòüñÿ."
 
-#: lib/api.php:1301 lib/api.php:1314
+#: lib/api.php:1819 lib/api.php:1832
 #, php-format
 msgid "This person already has a %s entry in the address book"
 msgstr "Ïðî öþ îñîáó âæå ³ñíóº %s çàïèñ â àäðåñíèêó"
 
-#: config/prefs.php.dist:129
+#: config/prefs.php.dist:138
 msgid ""
 "This will be the default address book when adding or importing contacts."
 msgstr "Öå áóäå îñíîâíèé àäðåñíèê ïðè äîäàâàíí³ àáî ³ìïîðòóâàíí³ êîíòàêò³â."
 
-#: config/attributes.php.dist:74
-msgid "Title"
-msgstr "Íàçâà"
+#: config/attributes.php.dist:241
+msgid "Time Zone"
+msgstr "×àñîâèé ïîÿñ"
 
-#: lib/Driver.php:1277
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Íå ìîæó çíàéòè âëàñíèêà êîíòàêòó."
+
+#: lib/Turba.php:659 lib/Driver.php:1981
 #, php-format
 msgid "Unable to load the definition of %s."
 msgstr "Íå ìîæó çàâàíòàæèòè âèçíà÷åííÿ %s"
 
-#: lib/Driver/kolab.php:459
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Íå ìîæó çáåðåãòè àäðåñíèê \"%s\": %s"
+
+#: lib/Driver/kolab.php:490
 msgid "Unable to search."
 msgstr "Íå ìîæó øóêàòè."
 
-#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:110
-#: lib/Forms/EditContact.php:113 lib/Forms/EditContact.php:116
-#: lib/Forms/EditContact.php:164
-msgid "Undo Changes"
-msgstr "³äì³íèòè çì³íè"
-
-#: lib/api.php:1182
+#: config/attributes.php.dist:391
 msgid "Unfiled"
 msgstr "Íåçàïîâíåíèé"
 
-#: lib/api.php:643 lib/api.php:746 lib/api.php:894
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
 #, php-format
 msgid "Unsupported Content-Type: %s"
 msgstr "Content-Type íå ï³äòðèìóºòüñÿ: %s"
 
-#: minisearch.php:76
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Îãëÿä \"%s\""
+
+#: minisearch.php:72 minisearch.php:73
 msgid "View Contact"
 msgstr "Ïðîãëÿíóòè êîíòàêò"
 
-#: config/prefs.php.dist:105
+#: config/prefs.php.dist:114
 msgid "View to display by default:"
 msgstr "Ñòàíäàðòíèé âèãëÿä äëÿ â³äîáðàæåííÿ:"
 
-#: config/attributes.php.dist:212
+#: config/attributes.php.dist:506
+msgid "VoIP"
+msgstr ""
+
+#: config/attributes.php.dist:344
 msgid "Website URL"
 msgstr "URL âåáñàéòó"
 
-#: config/attributes.php.dist:117
+#: config/attributes.php.dist:185
 msgid "Work Address"
 msgstr "Ðîáî÷à àäðåñà"
 
-#: config/attributes.php.dist:128
+#: config/attributes.php.dist:570
+msgid "Work Address Extended"
+msgstr "Ðîáî÷à àäðåñà Ðîçøèðåíà"
+
+#: config/attributes.php.dist:203
 msgid "Work City"
-msgstr "̳ñòî"
+msgstr "̳ñòî ïðàö³"
 
-#: config/attributes.php.dist:143
+#: config/attributes.php.dist:221
 msgid "Work Country"
-msgstr "Êðà¿íà, äå ïðàöþºòå"
+msgstr "Êðà¿íà ïðàö³"
+
+#: config/attributes.php.dist:454
+msgid "Work Email"
+msgstr "Ðîáî÷à å-ïîøòà"
 
-#: config/attributes.php.dist:160
+#: config/attributes.php.dist:471
+msgid "Work Fax"
+msgstr "Ðîáî÷èé ôàêñ"
+
+#: config/attributes.php.dist:576
+msgid "Work Latitude"
+msgstr ""
+
+#: config/attributes.php.dist:581
+msgid "Work Longitude"
+msgstr ""
+
+#: config/attributes.php.dist:481
+msgid "Work Mobile Phone"
+msgstr "Ðîáî÷èé Ìîá³ëüíèé òåëåôîí"
+
+#: config/attributes.php.dist:266
 msgid "Work Phone"
 msgstr "Ðîáî÷èé òåëåôîí"
 
-#: config/attributes.php.dist:138
+#: config/attributes.php.dist:197
+msgid "Work Post Office Box"
+msgstr "Ðîáî÷à Ïîøòîâà ñêðèíüêà"
+
+#: config/attributes.php.dist:215
 msgid "Work Postal Code"
 msgstr "Ðîáî÷èé Ïîøòîâèé ²íäåêñ"
 
-#: config/attributes.php.dist:133
+#: config/attributes.php.dist:209
 msgid "Work State/Province"
 msgstr "Îáëàñòü àáî Ðåã³îí, äå ïðàöþºòå"
 
-#: config/attributes.php.dist:123
+#: config/attributes.php.dist:191
 msgid "Work Street Address"
 msgstr "Ðîáî÷à àäðåñà"
 
-#: add.php:48 data.php:251 lib/Views/Browse.php:158 lib/Views/Browse.php:267
+#: config/attributes.php.dist:496
+msgid "Work Video Call"
+msgstr ""
+
+#: config/attributes.php.dist:564
+msgid "Work Website URL"
+msgstr "URL ðîáî÷îãî âåáñàéòó"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Âàì íå ìîæíà çì³íþâàòè öåé àäðåñíèê."
+
+#: add.php:48 data.php:355 lib/Views/Browse.php:159 lib/Views/Browse.php:281
 #, php-format
 msgid "You are not allowed to create more than %d contacts in \"%s\"."
 msgstr "Âàì íå äîçâîëåíî ñòâîðþâàòè á³ëüøå, í³æ %d êîíòàêò³â â \"%s\""
 
-#: lib/Driver/vbook.php:139
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Âàì íå ìîæíà âèòèðàòè öåé àäðåñíèê."
+
+#: lib/api.php:204
+msgid "You are not allowed to remove user data."
+msgstr "Âàì íå ìîæíà âèòèðàòè äàí³ êîðèñòóâà÷à."
+
+#: lib/Driver/vbook.php:137
 msgid "You cannot add an entry to a virtual address book."
 msgstr "Âè íå ìîæåòå âíîñèòè çàïèñè â ïñåâäî-àäðåñíèê."
 
-#: lib/Driver/vbook.php:123
+#: lib/Driver/vbook.php:121
 msgid "You cannot add new contacts to a virtual address book"
 msgstr "Âè íå ìîæåòå âíîñèòè íîâ³ êîíòàêòè â ïñåâäî-àäðåñíèê"
 
-#: lib/Driver/vbook.php:131
+#: lib/Driver/vbook.php:129
 msgid "You cannot delete contacts from a virtual address book"
 msgstr "Âè íå ìîæåòå âèòèðàòè êîíòàêòè ç ïñåâäî-àäðåñíèêà"
 
-#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
-#: lib/Views/EditContact.php:49
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr "Âè ùå íå âêàçàëè, ÿêèé ç êîíòàêò³â Âàø âëàñíèé."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
 msgid "You do not have permission to view this contact."
 msgstr "Ó Âàñ íåìຠïðàâ äëÿ ïðîãëÿäó öüîãî êîíòàêòó."
 
@@ -1358,17 +1624,25 @@ msgstr "
 msgid "You do not have permission to view this object."
 msgstr "Ó Âàñ íåìຠïðàâ äëÿ ïðîãëÿäó öüîãî îá'ºêòó."
 
-#: addressbooks.php:58
-msgid "You do not have permissions to delete this source."
-msgstr "Ó Âàñ íåìຠïðàâ âèòèðàòè öå äæååðëî."
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Ó Âàñ íåìຠïðàâ âèòèðàòè öåé àäðåñíèê."
 
-#: lib/Driver/ldap.php:705
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"Ó Âàñ íåìຠäîñòàòíüî ïðàâ äëÿ ÷èòàííÿ àäðåñíèêà, ùî ì³ñòèòü Âàø âëàñíèé "
+"êîíòàêò."
+
+#: lib/Driver/ldap.php:741
 msgid ""
 "You must have the Net_LDAP PEAR library installed to use the schema check "
 "function."
 msgstr ""
 
-#: search.php:110
+#: search.php:133
 msgid "You must provide a name for virtual address books."
 msgstr "Âàì ñë³ä âêàçàòè íàçâó ïñåâäî-àäðåñíèêà."
 
@@ -1385,15 +1659,28 @@ msgstr "
 msgid "You must select at least one contact first."
 msgstr "Âàì ñë³ä âèáðàòè ñïî÷àòêó õî÷à á îäèí êîíòàêò."
 
-#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
 msgid "You only have permission to view this contact."
 msgstr "Ó Âàñ º ïðàâî ò³ëüêè íà ïåðåãëÿä öüîãî êîíòàêòó."
 
-#: lib/Views/Browse.php:349
+#: lib/Views/Browse.php:369
 msgid "Your default address book is not browseable."
 msgstr "Âàø îñíîâíèé àäðåñíèê íå ïåðåãëÿäàºòüñÿ."
 
-#: lib/Turba.php:556
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "Âàø âëàñíèé êîíòàêò"
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr "Âàø âëàñíèé êîíòàêò â³äñóòí³é â àäðåñíèêó."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[áåç çíà÷åííÿ]"
+
+#: lib/Turba.php:601
 msgid "_Browse"
 msgstr "Ïåðåãëÿä"
 
@@ -1405,11 +1692,11 @@ msgstr "
 msgid "_Delete"
 msgstr "Âèòåðòè"
 
-#: contact.php:79
+#: contact.php:91
 msgid "_Edit"
 msgstr "Ðåäàãóâàòè"
 
-#: lib/Turba.php:565
+#: lib/Turba.php:610
 msgid "_Import/Export"
 msgstr "²ìïîðò/Åêñïîðò"
 
@@ -1417,55 +1704,81 @@ msgstr "
 msgid "_Lists"
 msgstr "Ñïèñêè"
 
-#: lib/Turba.php:553
+#: lib/Turba.php:598
 msgid "_My Address Books"
 msgstr "Ìî¿ Àäðåñíèêè"
 
-#: lib/Turba.php:559
+#: lib/Turba.php:604
 msgid "_New Contact"
 msgstr "Íîâèé êîíòàêò"
 
+#: lib/Turba.php:615
+msgid "_Print"
+msgstr "Äðóê"
+
 #: templates/browse/actions.inc:3
 msgid "_Remove from this list"
 msgstr "Âèäàëèòè ç öüîãî ñïèñêó"
 
-#: lib/Turba.php:561
+#: lib/Turba.php:606
 msgid "_Search"
 msgstr "Ïîøóê"
 
-#: contact.php:76
+#: contact.php:88
 msgid "_View"
-msgstr ""
+msgstr "Ïåðåãëÿä"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "ascending"
 msgstr "ïî çðîñòàííþ"
 
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "ïî %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "ìíîþ"
+
 #: vcard.php:45
 msgid "contact"
 msgstr "êîíòàêò"
 
-#: data.php:208 data.php:213 templates/data/export.inc:1
+#: data.php:312 data.php:317 templates/data/export.inc:1
 msgid "contacts.csv"
 msgstr "contacts.csv"
 
-#: data.php:233
+#: data.php:337
 msgid "contacts.ldif"
 msgstr "contacts.ldif"
 
-#: data.php:218
+#: data.php:322
 msgid "contacts.tsv"
 msgstr "contacts.tsv"
 
-#: data.php:228
+#: data.php:332
 msgid "contacts.vcf"
 msgstr "contacts.vcf"
 
-#: templates/browse/column_headers.inc:24
+#: templates/browse/column_headers.inc:25
 msgid "descending"
 msgstr "ïî ñïàäàííþ"
 
-#: config/prefs.php.dist:119
+#: config/attributes.php.dist:433
+msgid "female"
+msgstr "æ³íî÷à"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "â %s"
+
+#: config/attributes.php.dist:433
+msgid "male"
+msgstr "÷îëîâ³÷à"
+
+#: config/prefs.php.dist:128
 msgid "no formatting"
 msgstr "áåç ôîðìàòóâàííÿ"
 
@@ -1481,7 +1794,7 @@ msgstr "
 msgid "to a different Address Book"
 msgstr "äî ³íøîãî Àäðåñíèêà"
 
-#: data.php:62 templates/browse/column_headers.inc:13
-#: templates/data/export.inc:15 templates/data/import.inc:15
+#: data.php:103 templates/browse/column_headers.inc:14
+#: templates/data/import.inc:15 templates/data/export.inc:15
 msgid "vCard"
 msgstr "vCard"
diff --git a/scripts/import_squirrelmail_abook.php b/scripts/import_squirrelmail_abook.php
deleted file mode 100755
index 52c04ce..0000000
--- a/scripts/import_squirrelmail_abook.php
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/usr/bin/php
-<?php
-/**
- * This script imports SquirrelMail file-based addressbooks into Turba.
- * It was developed against SquirrelMail 1.4.0, so use at your own risk
- * against different versions.
- *
- * Input can be either a single squirrelmail .abook file, or a directory
- * containing multiple .abook files.
- *
- * $Horde: turba/scripts/import_squirrelmail_abook.php,v 1.5.2.2 2008/01/02 11:32:40 jan Exp $
- *
- * Copyright 2007-2008 The Horde Project (http://www.horde.org/)
- *
- * See the enclosed file LICENSE for license information (ASL).  If you
- * did not receive this file, see http://www.horde.org/licenses/asl.php.
- *
- * @author Ben Chavet <ben at horde.org>
- */
-
- at define('AUTH_HANDLER', true);
- at define('HORDE_BASE', dirname(__FILE__) . '/../..');
- at define('TURBA_BASE', dirname(__FILE__) . '/..');
-
-// Do CLI checks and environment setup first.
-require_once HORDE_BASE . '/lib/core.php';
-require_once 'Horde/CLI.php';
-
-// Makre sure no one runs this from the web.
-if (!Horde_CLI::runningFromCli()) {
-    exit("Must be run from the command line\n");
-}
-
-// Load the CLI environment - make sure there's no time limit, init some
-// variables, etc.
-$cli = &Horde_CLI::singleton();
-$cli->init();
-
-// Read command line parameters.
-if (count($argv) != 2) {
-    $cli->message('Too many or too few parameters.', 'cli.error');
-    usage();
-}
-$data = $argv[1];
-
-// Make sure we load Horde base to get the auth config
-require_once HORDE_BASE . '/lib/base.php';
-if ($conf['auth']['admins']) {
-    $auth = Auth::singleton($conf['auth']['driver']);
-    $auth->setAuth($conf['auth']['admins'][0], array());
-}
-
-// Now that we are authenticated, we can load Turba's base. Otherwise,
-// the share code breaks, causing a new, completely empty share to be
-// created on the DataTree with no owner.
-require_once TURBA_BASE . '/lib/base.php';
-require_once TURBA_BASE . '/lib/Object/Group.php';
-
-// Get list of SquirrelMail address book files
-if (is_dir($data)) {
-    $files = array();
-    if ($handle = opendir($data)) {
-        while (false !== ($file = readdir($handle))) {
-            if (preg_match('/.abook$/', $file)) {
-                $files[] = $data . '/' . $file;
-            }
-        }
-        closedir($handle);
-    } else {
-        exit;
-    }
-} else {
-    $files = array($data);
-}
-
-// Loop through SquirrelMail address book files
-$auth = &Auth::singleton($conf['auth']['driver']);
-foreach($files as $file) {
-    if ($handle = fopen($file, 'r')) {
-
-        // Set current user
-        $user = substr(basename($file), 0, -6);
-        $auth->setAuth($user, array());
-        $cli->message('Importing ' . $user . '\'s address book');
-
-        // Reset user prefs
-        unset($prefs);
-        $prefs = &Prefs::factory($conf['prefs']['driver'], 'turba', $user, null, null, false);
-
-        // Reset $cfgSources for current user.
-        unset($cfgSources);
-        include TURBA_BASE . '/config/sources.php';
-        $cfgSources = Turba::getConfigFromShares($cfgSources);
-        $cfgSources = Turba::permissionsFilter($cfgSources);
-
-        // Get user's default addressbook
-        $import_source = $prefs->getValue('default_dir');
-        if (empty($import_source)) {
-            $import_source = array_keys($cfgSources);
-            $import_source = $import_source[0];
-        }
-
-        // Check existance of the specified source.
-        if (!isset($cfgSources[$import_source])) {
-            PEAR::raiseError(sprintf(_("Invalid address book: %s"), $import_source), 'horde.warning');
-            continue;
-        }
-
-        // Initiate driver
-        $driver = &Turba_Driver::singleton($import_source);
-        if (is_a($driver, 'PEAR_Error')) {
-            PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $import_source);
-            continue;
-        }
-
-        // Read addressbook file, one line at a time
-        while (!feof($handle)) {
-            $buffer = fgets($handle);
-            if (!empty($buffer)) {
-                $entry = explode('|', $buffer);
-                $members = explode(',', $entry[3]);
-
-                if (count($members) > 1) {
-                    // entry is a list of contacts, import each individually
-                    // and create a group that contains them.
-                    $attributes = array('alias' => $entry[0],
-                                        'firstname' => $entry[1],
-                                        'lastname' => $entry[2],
-                                        'notes' => $entry[4]);
-                    $gid = $driver->add($attributes);
-                    $group = new Turba_Object_Group($driver, array_merge($attributes, array('__key' => $gid)));
-                    foreach ($members as $member) {
-                        $result = $driver->add(array('firstname' => $member, 'email' => $member));
-                        if ($result && !is_a($result, 'PEAR_Error')) {
-                            $added = $group->addMember($result, $import_source);
-                            if (is_a($added, 'PEAR_Error')) {
-                                $cli->message('  ' . $added->getMessage(), 'cli.error');
-                            } else {
-                                $cli->message('  Added ' . $member, 'cli.success');
-                            }
-                        }
-                    }
-                    $group->store();
-                } else {
-                    // entry only contains one contact, import it
-                    $contact = array('alias' => $entry[0],
-                                     'firstname' => $entry[1],
-                                     'lastname' => $entry[2],
-                                     'email' => $entry[3],
-                                     'notes' => $entry[4]);
-                    $added = $driver->add($contact);
-                    if (is_a($added, 'PEAR_Error')) {
-                        $cli->message('  ' . $added->getMessage(), 'cli.error');
-                    } else {
-                        $cli->message('  Added ' . $entry[3], 'cli.success');
-                    }
-                }
-
-            }
-        }
-
-        fclose($handle);
-    }
-}
-
-function usage()
-{
-    $GLOBALS['cli']->writeln('Usage: import_squirrelmail_abook.php path-to-squirrelmail-data');
-    exit;
-}
diff --git a/scripts/import_squirrelmail_file_abook.php b/scripts/import_squirrelmail_file_abook.php
new file mode 100755
index 0000000..e6814bb
--- /dev/null
+++ b/scripts/import_squirrelmail_file_abook.php
@@ -0,0 +1,166 @@
+#!/usr/bin/php
+<?php
+/**
+ * This script imports SquirrelMail file-based addressbooks into Turba.
+ * It was developed against SquirrelMail 1.4.0, so use at your own risk
+ * against different versions.
+ *
+ * Input can be either a single squirrelmail .abook file, or a directory
+ * containing multiple .abook files.
+ *
+ * $Horde: turba/scripts/import_squirrelmail_file_abook.php,v 1.2.2.1 2008/12/04 14:44:04 jan Exp $
+ *
+ * Copyright 2007-2008 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Ben Chavet <ben at horde.org>
+ */
+
+ at define('AUTH_HANDLER', true);
+ at define('HORDE_BASE', dirname(__FILE__) . '/../..');
+ at define('TURBA_BASE', dirname(__FILE__) . '/..');
+
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+require_once 'Horde/CLI.php';
+
+// Makre sure no one runs this from the web.
+if (!Horde_CLI::runningFromCli()) {
+    exit("Must be run from the command line\n");
+}
+
+// Load the CLI environment - make sure there's no time limit, init some
+// variables, etc.
+$cli = &Horde_CLI::singleton();
+$cli->init();
+
+// Read command line parameters.
+if ($argc != 2) {
+    $cli->message('Too many or too few parameters.', 'cli.error');
+    $cli->writeln('Usage: import_squirrelmail_file_abook.php path-to-squirrelmail-data');
+    exit;
+}
+$data = $argv[1];
+
+// Make sure we load Horde base to get the auth config
+require_once HORDE_BASE . '/lib/base.php';
+if ($conf['auth']['admins']) {
+    $auth = Auth::singleton($conf['auth']['driver']);
+    $auth->setAuth($conf['auth']['admins'][0], array());
+}
+
+// Now that we are authenticated, we can load Turba's base. Otherwise, the
+// share code breaks, causing a new, completely empty share to be created on
+// the DataTree with no owner.
+require_once TURBA_BASE . '/lib/base.php';
+require_once TURBA_BASE . '/lib/Object/Group.php';
+
+// Get list of SquirrelMail address book files
+if (is_dir($data)) {
+    if (!($handle = opendir($data))) {
+        exit;
+    }
+    $files = array();
+    while (false !== ($file = readdir($handle))) {
+        if (preg_match('/.abook$/', $file)) {
+            $files[] = $data . '/' . $file;
+        }
+    }
+    closedir($handle);
+} else {
+    $files = array($data);
+}
+
+// Loop through SquirrelMail address book files
+$auth = &Auth::singleton($conf['auth']['driver']);
+foreach($files as $file) {
+    if (!($handle = fopen($file, 'r'))) {
+        continue;
+    }
+
+    // Set current user
+    $user = substr(basename($file), 0, -6);
+    $auth->setAuth($user, array());
+    $cli->message('Importing ' . $user . '\'s address book');
+
+    // Reset user prefs
+    unset($prefs);
+    $prefs = &Prefs::factory($conf['prefs']['driver'], 'turba', $user, null, null, false);
+
+    // Reset $cfgSources for current user.
+    unset($cfgSources);
+    include TURBA_BASE . '/config/sources.php';
+    $cfgSources = Turba::getConfigFromShares($cfgSources);
+    $cfgSources = Turba::permissionsFilter($cfgSources);
+
+    // Get user's default addressbook
+    $import_source = $prefs->getValue('default_dir');
+    if (empty($import_source)) {
+        $import_source = array_keys($cfgSources);
+        $import_source = $import_source[0];
+    }
+
+    // Check existance of the specified source.
+    if (!isset($cfgSources[$import_source])) {
+        PEAR::raiseError(sprintf(_("Invalid address book: %s"), $import_source), 'horde.warning');
+        continue;
+    }
+
+    // Initiate driver
+    $driver = &Turba_Driver::singleton($import_source);
+    if (is_a($driver, 'PEAR_Error')) {
+        PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $import_source);
+        continue;
+    }
+
+    // Read addressbook file, one line at a time
+    while (!feof($handle)) {
+        $buffer = fgets($handle);
+        if (empty($buffer)) {
+            continue;
+        }
+
+        $entry = explode('|', $buffer);
+        $members = explode(',', $entry[3]);
+
+        if (count($members) > 1) {
+            // Entry is a list of contacts, import each individually and
+            // create a group that contains them.
+            $attributes = array('alias' => $entry[0],
+                                'firstname' => $entry[1],
+                                'lastname' => $entry[2],
+                                'notes' => $entry[4]);
+            $gid = $driver->add($attributes);
+            $group = new Turba_Object_Group($driver, array_merge($attributes, array('__key' => $gid)));
+            foreach ($members as $member) {
+                $result = $driver->add(array('firstname' => $member, 'email' => $member));
+                if ($result && !is_a($result, 'PEAR_Error')) {
+                    $added = $group->addMember($result, $import_source);
+                    if (is_a($added, 'PEAR_Error')) {
+                        $cli->message('  ' . $added->getMessage(), 'cli.error');
+                    } else {
+                        $cli->message('  Added ' . $member, 'cli.success');
+                    }
+                }
+            }
+            $group->store();
+        } else {
+            // entry only contains one contact, import it
+            $contact = array('alias' => $entry[0],
+                             'firstname' => $entry[1],
+                             'lastname' => $entry[2],
+                             'email' => $entry[3],
+                             'notes' => $entry[4]);
+            $added = $driver->add($contact);
+            if (is_a($added, 'PEAR_Error')) {
+                $cli->message('  ' . $added->getMessage(), 'cli.error');
+            } else {
+                $cli->message('  Added ' . $entry[3], 'cli.success');
+            }
+        }
+    }
+
+    fclose($handle);
+}
diff --git a/scripts/import_squirrelmail_sql_abook.php b/scripts/import_squirrelmail_sql_abook.php
new file mode 100755
index 0000000..7695fa0
--- /dev/null
+++ b/scripts/import_squirrelmail_sql_abook.php
@@ -0,0 +1,172 @@
+#!/usr/bin/php
+<?php
+/**
+ * This script imports SquirrelMail database addressbooks into Turba.
+ *
+ * The first argument must be a DSN to the database containing the "address"
+ * table, e.g.: "mysql://root:password@localhost/squirrelmail".
+ *
+ * $Horde: turba/scripts/import_squirrelmail_sql_abook.php,v 1.4.2.2 2008/12/04 17:58:32 jan Exp $
+ *
+ * Copyright 2008 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Ben Chavet <ben at horde.org>
+ * @author Jan Schneider <jan at horde.org>
+ */
+
+ at define('AUTH_HANDLER', true);
+ at define('HORDE_BASE', dirname(__FILE__) . '/../..');
+ at define('TURBA_BASE', dirname(__FILE__) . '/..');
+
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+require_once 'Horde/CLI.php';
+
+// Makre sure no one runs this from the web.
+if (!Horde_CLI::runningFromCli()) {
+    exit("Must be run from the command line\n");
+}
+
+// Load the CLI environment - make sure there's no time limit, init some
+// variables, etc.
+$cli = &Horde_CLI::singleton();
+$cli->init();
+
+// Read command line parameters.
+if ($argc != 2) {
+    $cli->message('Too many or too few parameters.', 'cli.error');
+    $cli->writeln('Usage: import_squirrelmail_file_abook.php DSN');
+    exit;
+}
+$dsn = $argv[1];
+
+// Make sure we load Horde base to get the auth config
+require_once HORDE_BASE . '/lib/base.php';
+if ($conf['auth']['admins']) {
+    $auth = Auth::singleton($conf['auth']['driver']);
+    $auth->setAuth($conf['auth']['admins'][0], array());
+}
+
+// Now that we are authenticated, we can load Turba's base. Otherwise, the
+// share code breaks, causing a new, completely empty share to be created on
+// the DataTree with no owner.
+require_once TURBA_BASE . '/lib/base.php';
+require_once TURBA_BASE . '/lib/Object/Group.php';
+require_once 'Horde/MIME.php';
+
+// Connect to database.
+$db = &DB::connect($dsn);
+if (is_a($db, 'PEAR_Error')) {
+    $cli->fatal($db->toString());
+}
+
+// Loop through SquirrelMail address books.
+$handle = $db->query('SELECT owner, nickname, firstname, lastname, email, label FROM address ORDER BY owner');
+if (is_a($handle, 'PEAR_Error')) {
+    $cli->fatal($handle->toString());
+}
+$auth = &Auth::singleton($conf['auth']['driver']);
+$turba_shares = &Horde_Share::singleton('turba');
+$user = null;
+$count = 0;
+while ($row = $handle->fetchRow(DB_FETCHMODE_ASSOC)) {
+    // Set current user
+    if ($row['owner'] != $user) {
+        if (!is_null($user)) {
+            $cli->message('  Added ' . $count . ' contacts', 'cli.success');
+            $count = 0;
+        }
+        $user = $row['owner'];
+        $auth->setAuth($user, array());
+        $cli->message('Importing ' . $user . '\'s address book');
+
+        // Reset user prefs
+        unset($prefs);
+        $prefs = &Prefs::factory($conf['prefs']['driver'], 'turba', $user, null, null, false);
+
+        // Reset $cfgSources for current user.
+        unset($cfgSources);
+        $hasShares = false;
+        include TURBA_BASE . '/config/sources.php';
+        foreach ($cfgSources as $key => $cfg) {
+            if (!empty($cfg['use_shares'])) {
+                $has_share = true;
+                break;
+            }
+        }
+        if ($has_share) {
+            $cfgSources = Turba::getConfigFromShares($cfgSources);
+        }
+        $cfgSources = Turba::permissionsFilter($cfgSources);
+        if (!count($cfgSources)) {
+            $cli->message('No address book available for ' . $user, 'cli.error');
+            continue;
+        }
+
+        // Get user's default addressbook
+        $import_source = $prefs->getValue('default_dir');
+        if (empty($import_source)) {
+            $import_source = array_keys($cfgSources);
+            $import_source = $import_source[0];
+        }
+
+        // Check existance of the specified source.
+        if (!isset($cfgSources[$import_source])) {
+            $cli->message('  ' . sprintf(_("Invalid address book: %s"), $import_source), 'cli.error');
+            continue;
+        }
+
+        // Initiate driver
+        $driver = &Turba_Driver::singleton($import_source);
+        if (is_a($driver, 'PEAR_Error')) {
+            $cli->message('  ' . sprintf(_("Connection failed: %s"), $driver->getMessage()), 'cli.error');
+            continue;
+        }
+    }
+
+    if (!count($cfgSources)) {
+        continue;
+    }
+
+    $members = MIME::rfc822Explode($row['email'], ',;');
+    if (count($members) > 1) {
+        // Entry is a list of contacts, import each individually and create a
+        // group that contains them.
+        $attributes = array('alias' => $row['nickname'],
+                            'firstname' => $row['firstname'],
+                            'lastname' => $row['lastname'],
+                            'notes' => $row['label']);
+        $gid = $driver->add($attributes);
+        $group = new Turba_Object_Group($driver, array_merge($attributes, array('__key' => $gid)));
+        $count++;
+        foreach ($members as $member) {
+            $result = $driver->add(array('firstname' => $member, 'email' => $member));
+            if ($result && !is_a($result, 'PEAR_Error')) {
+                $added = $group->addMember($result, $import_source);
+                if (is_a($added, 'PEAR_Error')) {
+                    $cli->message('  ' . $added->getMessage(), 'cli.error');
+                } else {
+                    $count++;
+                }
+            }
+        }
+        $group->store();
+    } else {
+        // Entry only contains one contact, import it.
+        $contact = array('alias' => $row['nickname'],
+                         'firstname' => $row['firstname'],
+                         'lastname' => $row['lastname'],
+                         'email' => $row['email'],
+                         'notes' => $row['label']);
+        $added = $driver->add($contact);
+        if (is_a($added, 'PEAR_Error')) {
+            $cli->message('  ' . $added->getMessage(), 'cli.error');
+        } else {
+            $count++;
+        }
+    }
+}
+$cli->message('  Added ' . $count . ' contacts', 'cli.success');
diff --git a/scripts/sql/turba.mssql.sql b/scripts/sql/turba.mssql.sql
index c2e8849..7030a42 100644
--- a/scripts/sql/turba.mssql.sql
+++ b/scripts/sql/turba.mssql.sql
@@ -1,4 +1,4 @@
--- $Horde: turba/scripts/sql/turba.mssql.sql,v 1.1.2.5 2008/04/29 19:33:23 chuck Exp $
+-- $Horde: turba/scripts/sql/turba.mssql.sql,v 1.1.2.8 2008/11/28 20:07:52 chuck Exp $
 
 CREATE TABLE turba_objects (
     object_id VARCHAR(32) NOT NULL,
@@ -58,7 +58,7 @@ CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
 CREATE TABLE turba_shares (
     share_id INT NOT NULL,
     share_name VARCHAR(255) NOT NULL,
-    share_owner VARCHAR(32) NOT NULL,
+    share_owner VARCHAR(255) NOT NULL,
     share_flags SMALLINT NOT NULL DEFAULT 0,
     perm_creator SMALLINT NOT NULL DEFAULT 0,
     perm_default SMALLINT NOT NULL DEFAULT 0,
@@ -77,7 +77,7 @@ CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
 
 CREATE TABLE turba_shares_groups (
     share_id INT NOT NULL,
-    group_uid INT NOT NULL,
+    group_uid VARCHAR(255) NOT NULL,
     perm SMALLINT NOT NULL
 );
 
@@ -87,10 +87,10 @@ CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
 
 CREATE TABLE turba_shares_users (
     share_id INT NOT NULL,
-    user_uid VARCHAR(32) NOT NULL,
+    user_uid VARCHAR(255) NOT NULL,
     perm SMALLINT NOT NULL
 );
 
 CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
 CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
-CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
\ No newline at end of file
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
diff --git a/scripts/sql/turba.oci8.sql b/scripts/sql/turba.oci8.sql
index 1987d71..7b393f8 100644
--- a/scripts/sql/turba.oci8.sql
+++ b/scripts/sql/turba.oci8.sql
@@ -1,4 +1,4 @@
--- $Horde: turba/scripts/sql/turba.oci8.sql,v 1.1.2.5 2008/04/29 19:33:23 chuck Exp $
+-- $Horde: turba/scripts/sql/turba.oci8.sql,v 1.1.2.8 2008/11/28 20:07:52 chuck Exp $
 
 CREATE TABLE turba_objects (
     object_id VARCHAR2(32) NOT NULL,
@@ -57,7 +57,7 @@ CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
 CREATE TABLE turba_shares (
     share_id INT NOT NULL,
     share_name VARCHAR2(255) NOT NULL,
-    share_owner VARCHAR2(32) NOT NULL,
+    share_owner VARCHAR2(255) NOT NULL,
     share_flags SMALLINT NOT NULL DEFAULT 0,
     perm_creator SMALLINT NOT NULL DEFAULT 0,
     perm_default SMALLINT NOT NULL DEFAULT 0,
@@ -76,7 +76,7 @@ CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
 
 CREATE TABLE turba_shares_groups (
     share_id INT NOT NULL,
-    group_uid INT NOT NULL,
+    group_uid VARCHAR(255) NOT NULL,
     perm SMALLINT NOT NULL
 );
 
@@ -86,10 +86,10 @@ CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
 
 CREATE TABLE turba_shares_users (
     share_id INT NOT NULL,
-    user_uid VARCHAR2(32) NOT NULL,
+    user_uid VARCHAR2(255) NOT NULL,
     perm SMALLINT NOT NULL
 );
 
 CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
 CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
-CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
\ No newline at end of file
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
diff --git a/scripts/sql/turba.pgsql.sql b/scripts/sql/turba.pgsql.sql
index f5d1a67..1ccead3 100644
--- a/scripts/sql/turba.pgsql.sql
+++ b/scripts/sql/turba.pgsql.sql
@@ -1,4 +1,4 @@
--- $Horde: turba/scripts/sql/turba.pgsql.sql,v 1.1.2.6 2008/04/29 19:33:23 chuck Exp $
+-- $Horde: turba/scripts/sql/turba.pgsql.sql,v 1.1.2.9 2008/11/28 20:07:52 chuck Exp $
 
 CREATE TABLE turba_objects (
     object_id VARCHAR(32) NOT NULL,
@@ -58,7 +58,7 @@ CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
 CREATE TABLE turba_shares (
     share_id SMALLINT NOT NULL,
     share_name VARCHAR(255) NOT NULL,
-    share_owner VARCHAR(32) NOT NULL,
+    share_owner VARCHAR(255) NOT NULL,
     share_flags SMALLINT NOT NULL DEFAULT 0,
     perm_creator SMALLINT NOT NULL DEFAULT 0,
     perm_default SMALLINT NOT NULL DEFAULT 0,
@@ -77,7 +77,7 @@ CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
 
 CREATE TABLE turba_shares_groups (
     share_id SMALLINT NOT NULL,
-    group_uid SMALLINT NOT NULL,
+    group_uid VARCHAR(255) NOT NULL,
     perm SMALLINT NOT NULL
 );
 
@@ -87,7 +87,7 @@ CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
 
 CREATE TABLE turba_shares_users (
     share_id SMALLINT NOT NULL,
-    user_uid VARCHAR(32) NOT NULL,
+    user_uid VARCHAR(255) NOT NULL,
     perm SMALLINT NOT NULL
 );
 
diff --git a/scripts/sql/turba.sql b/scripts/sql/turba.sql
index 95b667a..3263ee8 100644
--- a/scripts/sql/turba.sql
+++ b/scripts/sql/turba.sql
@@ -1,4 +1,4 @@
--- $Horde: turba/scripts/sql/turba.sql,v 1.1.2.5 2008/04/29 19:33:23 chuck Exp $
+-- $Horde: turba/scripts/sql/turba.sql,v 1.1.2.8 2008/11/28 20:07:52 chuck Exp $
 
 CREATE TABLE turba_objects (
     object_id VARCHAR(32) NOT NULL,
@@ -57,7 +57,7 @@ CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
 CREATE TABLE turba_shares (
     share_id INT NOT NULL,
     share_name VARCHAR(255) NOT NULL,
-    share_owner VARCHAR(32) NOT NULL,
+    share_owner VARCHAR(255) NOT NULL,
     share_flags SMALLINT NOT NULL DEFAULT 0,
     perm_creator SMALLINT NOT NULL DEFAULT 0,
     perm_default SMALLINT NOT NULL DEFAULT 0,
@@ -76,7 +76,7 @@ CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
 
 CREATE TABLE turba_shares_groups (
     share_id INT NOT NULL,
-    group_uid INT NOT NULL,
+    group_uid VARCHAR(255) NOT NULL,
     perm SMALLINT NOT NULL
 );
 
@@ -86,7 +86,7 @@ CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
 
 CREATE TABLE turba_shares_users (
     share_id INT NOT NULL,
-    user_uid VARCHAR(32) NOT NULL,
+    user_uid VARCHAR(255) NOT NULL,
     perm SMALLINT NOT NULL
 );
 
diff --git a/scripts/sql/turba.xml b/scripts/sql/turba.xml
index e427aa4..0ec8afe 100644
--- a/scripts/sql/turba.xml
+++ b/scripts/sql/turba.xml
@@ -350,7 +350,7 @@
     <type>text</type>
     <default></default>
     <notnull>true</notnull>
-    <length>32</length>
+    <length>255</length>
    </field>
 
    <field>
@@ -475,10 +475,10 @@
 
    <field>
     <name>group_uid</name>
-    <type>integer</type>
+    <type>text</type>
     <default></default>
     <notnull>true</notnull>
-    <length>4</length>
+    <length>255</length>
    </field>
 
    <field>
@@ -536,7 +536,7 @@
     <type>text</type>
     <default></default>
     <notnull>true</notnull>
-    <length>32</length>
+    <length>255</length>
    </field>
 
    <field>
diff --git a/scripts/upgrades/2.2.1_to_2.3.pgsql.sql b/scripts/upgrades/2.2.1_to_2.3.pgsql.sql
new file mode 100644
index 0000000..e809eaf
--- /dev/null
+++ b/scripts/upgrades/2.2.1_to_2.3.pgsql.sql
@@ -0,0 +1,3 @@
+ALTER TABLE turba_shares ALTER share_owner TYPE VARCHAR(255);
+ALTER TABLE turba_shares_users ALTER user_uid TYPE VARCHAR(255);
+ALTER TABLE turba_shares_groups ALTER group_uid TYPE VARCHAR(255);
diff --git a/scripts/upgrades/2.2.1_to_2.3.sql b/scripts/upgrades/2.2.1_to_2.3.sql
new file mode 100644
index 0000000..2429538
--- /dev/null
+++ b/scripts/upgrades/2.2.1_to_2.3.sql
@@ -0,0 +1,3 @@
+ALTER TABLE turba_shares CHANGE share_owner share_owner VARCHAR(255);
+ALTER TABLE turba_shares_users CHANGE user_uid user_uid VARCHAR(255);
+ALTER TABLE turba_shares_groups CHANGE group_uid group_uid VARCHAR(255);
diff --git a/scripts/upgrades/2008-09-23_fix_group_uid.sql b/scripts/upgrades/2008-09-23_fix_group_uid.sql
new file mode 100644
index 0000000..6724d8f
--- /dev/null
+++ b/scripts/upgrades/2008-09-23_fix_group_uid.sql
@@ -0,0 +1 @@
+ALTER TABLE turba_shares_groups CHANGE group_uid group_uid VARCHAR(255);
diff --git a/scripts/upgrades/convert_datatree_shares_to_sql.php b/scripts/upgrades/convert_datatree_shares_to_sql.php
index 68fe147..23abda9 100755
--- a/scripts/upgrades/convert_datatree_shares_to_sql.php
+++ b/scripts/upgrades/convert_datatree_shares_to_sql.php
@@ -6,7 +6,7 @@
  * 2.1_to_2.2_add_sql_share_tables SQL creation script for your RDBMS before
  * executing this script.
  *
- * $Horde: turba/scripts/upgrades/convert_datatree_shares_to_sql.php,v 1.1.2.5 2008/06/06 15:08:03 mrubinsk Exp $
+ * $Horde: turba/scripts/upgrades/convert_datatree_shares_to_sql.php,v 1.1.2.6 2008/10/23 15:50:35 jan Exp $
  */
 
 @define('AUTH_HANDLER', true);
@@ -115,17 +115,19 @@ while ($row = $shares_result->fetchRow(MDB2_FETCHMODE_ASSOC)) {
 
     /* Insert the new data */
     $cli->message('Migrating share data for share_id: ' . $share_id, 'cli.message');
+    $error = false;
+    $db->beginTransaction();
     $result = insertData('turba_shares', $data);
     if (is_a($result, 'PEAR_Error')) {
-        ++$error_cnt;
-        $cli->message($result->getMessage(), 'cli.error');
+        $cli->message($result->toString(), 'cli.error');
+        $error = true;
     }
     if (count($groups)) {
         foreach ($groups as $group) {
             $result = insertData('turba_shares_groups', $group);
             if (is_a($result, 'PEAR_Error')) {
-                ++$error_cnt;
-                $cli->message($result->getMessage(), 'cli.error');
+                $cli->message($result->toString(), 'cli.error');
+                $error = true;
             }
         }
     }
@@ -133,30 +135,56 @@ while ($row = $shares_result->fetchRow(MDB2_FETCHMODE_ASSOC)) {
         foreach ($users as $user) {
             $result = insertData('turba_shares_users', $user);
             if (is_a($result, 'PEAR_Error')) {
-                ++$error_cnt;
-                $cli->message($result->getMessage(), 'cli.error');
+                $cli->message($result->toString(), 'cli.error');
+                $error = true;
             }
         }
     }
 
     /* Delete the datatree data, but ONLY if it was requested */
-    if ($delete_dt_data && !$error_cnt) {
+    if ($delete_dt_data && !$error) {
         $cli->message('DELETING datatree data for share_id: ' . $share_id, 'cli.message');
         $delete = $db->prepare('DELETE FROM horde_datatree_attributes WHERE datatree_id = ?', null, MDB2_PREPARE_MANIP);
-        $delete->execute(array($share_id));
+        if (is_a($delete, 'PEAR_Error')) {
+            $cli->message($delete->toString(), 'cli.error');
+            $error = true;
+        } else {
+            $delete_result = $delete->execute(array($share_id));
+            if (is_a($delete_result, 'PEAR_Error')) {
+                $cli->message($delete_result->toString(), 'cli.error');
+                $error = true;
+            }
+        }
         $delete->free();
 
         $delete = $db->prepare('DELETE FROM horde_datatree WHERE datatree_id = ?', null, MDB2_PREPARE_MANIP);
-        $delete->execute(array($share_id));
+        if (is_a($delete, 'PEAR_Error')) {
+            $cli->message($delete->toString(), 'cli.error');
+            $error = true;
+        } else {
+            $delete_result = $delete->execute(array($share_id));
+            if (is_a($delete_result, 'PEAR_Error')) {
+                $cli->message($delete_result->toString(), 'cli.error');
+                $error = true;
+            }
+        }
         $delete->free();
     }
 
     /* Cleanup */
     $query_result->free();
     unset($row, $rows, $data, $groups, $users);
+    if ($error) {
+        $db->rollback();
+        $cli->message('Rollback for share data for share_id: ' . $share_id, 'cli.message');
+        ++$error_cnt;
+    } else {
+        $db->commit();
+        $cli->message('Commit for share data for share_id: ' . $share_id, 'cli.message');
+    }
 }
 if ($error_cnt) {
-    $cli->message(sprintf("Encountered %u errors. No data was deleted from your database.", $error_cnt));
+    $cli->message(sprintf("Encountered %u errors.", $error_cnt));
 }
 echo "\nDone.\n";
 
diff --git a/search.php b/search.php
index 2328921..80de805 100644
--- a/search.php
+++ b/search.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/search.php,v 1.94.4.18 2008/04/14 16:59:01 mrubinsk Exp $
+ * $Horde: turba/search.php,v 1.94.4.21 2008/08/25 17:10:04 jan Exp $
  *
  * Copyright 2000-2008 The Horde Project (http://www.horde.org/)
  *
@@ -19,37 +19,22 @@
  */
 function _createVBook($params)
 {
-    $id = md5(microtime());
-    $vbook = array(
-        'type' => 'vbook',
-        'source' => $params['source'],
-        'criteria' => $params['criteria'],
-    );
-
-    /* Generate the new share. */
-    $share = &$GLOBALS['turba_shares']->newShare($id);
+    $params = array(
+        'name' => $params['name'],
+        'params' => serialize(array('type' => 'vbook',
+                                    'source' => $params['source'],
+                                    'criteria' => $params['criteria'])));
+
+    $share = &Turba::createShare(md5(microtime()), $params);
     if (is_a($share, 'PEAR_Error')) {
         return $share;
     }
 
-    $share->set('name', $params['name']);
-    $share->set('params', serialize($vbook));
-
-    $result = $GLOBALS['turba_shares']->addShare($share);
-    if (is_a($result, 'PEAR_Error')) {
-        return $result;
-    }
-
-    /* Add the new addressbook to the user's list of visible address
-     * books. */
-    $GLOBALS['prefs']->setValue('addressbooks', $GLOBALS['prefs']->getValue('addressbooks') . "\n" . $id);
-
-    return $id;
+    return $share->getName();
 }
 
 /**
  * Check for requested changes in sort order and apply to prefs.
- *
  */
 function updateSortOrderFromVars()
 {
@@ -65,7 +50,7 @@ function updateSortOrderFromVars()
         $append = true;
         $ascending = ($vars->get('sortdir') == 0);
         if ($vars->get('sortadd')) {
-            $sortorder = Turba::getPreferredSortOrder($columns);
+            $sortorder = Turba::getPreferredSortOrder();
             foreach ($sortorder as $i => $elt) {
                 if ($elt['field'] == $column_name) {
                     $sortorder[$i]['ascending'] = $ascending;
@@ -181,7 +166,7 @@ if (is_a($driver, 'PEAR_Error')) {
                 /* Read the columns to display from the preferences. */
                 $sources = Turba::getColumns();
                 $columns = isset($sources[$source]) ? $sources[$source] : array();
-                $results->sort(Turba::getPreferredSortOrder($columns));
+                $results->sort(Turba::getPreferredSortOrder());
 
                 $view = &new Turba_ListView($results, null, $columns);
                 $view->setType('search');
diff --git a/templates/browse/row.inc b/templates/browse/row.inc
index b901dac..8427e1c 100644
--- a/templates/browse/row.inc
+++ b/templates/browse/row.inc
@@ -2,10 +2,22 @@
 
 if ($ob->hasValue('name')) {
     $link_text = htmlspecialchars(Turba::formatName($ob));
+} elseif (isset($ob->driver->alternativeName) &&
+          !in_array($ob->driver->alternativeName, $this->columns) &&
+          $ob->hasValue($ob->driver->alternativeName)) {
+    $link_text = htmlspecialchars($ob->getValue($ob->driver->alternativeName));
 } else {
     $link_text = '<em>' . _("Blank name") . '</em>';
 }
 
+if ($own_source == $ob->getSource() && $own_id == $ob->getValue('__key')) {
+    $own_icon = Horde::img('user.png', _("Your own contact"),
+                           array('title' => _("Your own contact")),
+                           $GLOBALS['registry']->getImageDir('horde'));
+} else {
+    $own_icon = '&nbsp;';
+}
+
 $edit_url = $vcard_url = '&nbsp;';
 if ($ob->hasValue('__key')) {
     $vcard_url = Util::addParameter('vcard.php',
@@ -46,7 +58,7 @@ if ($ob->hasValue('__key')) {
   <td><?php echo $vcard_url ?></td>
 <?php endif; ?>
 <?php if ($this->showGroup): ?>
-  <td><?php echo $ob->isGroup() ? Horde::img('group.png', _("Group")) : '&nbsp;' ?></td>
+  <td><?php echo $ob->isGroup() ? Horde::img('group.png', _("Group")) : $own_icon ?></td>
 <?php endif; ?>
   <td<?php if ($this->showSort && $this->isSortColumn(0)) echo ' class="linedRowSelectedCol"' ?>><?php
 echo $cell;
diff --git a/templates/prefs/columnselect.inc b/templates/prefs/columnselect.inc
index 9a258b6..f79eb8c 100644
--- a/templates/prefs/columnselect.inc
+++ b/templates/prefs/columnselect.inc
@@ -104,8 +104,12 @@ foreach (array_keys($info['map']) as $column) {
 
 </div>
 
+<?php if ($browser->isBrowser('msie') && $browser->getMajor() < 7): ?>
+<div style="clear:both;">&nbsp;</div>
+<?php endif; ?>
+
 <script type="text/javascript">
-$('turba-prefs-cols-columns').observe('change', function(event) {
+$('turba-prefs-cols-columns').observe('click', function(event) {
     if (event.element().match('input[type=checkbox]')) {
         updateColumnsPref();
     }
diff --git a/test.php b/test.php
index 686b6e8..bfe7c04 100644
--- a/test.php
+++ b/test.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * $Horde: turba/test.php,v 1.9.10.8 2008/01/02 11:32:38 jan Exp $
+ * $Horde: turba/test.php,v 1.9.10.9 2008/09/26 14:25:21 jan Exp $
  *
  * Copyright 1999-2008 The Horde Project (http://www.horde.org/)
  *
@@ -89,22 +89,16 @@ if (!empty($server) && !empty($basedn) && !empty($filter)) {
     if (empty($port)) {
         $port = '389';
     }
-    // Backport a patch from CVS (see #500114)
-    //echo 'server="', $server, '" basedn="', $basedn, '" filter="', $filter, '"<br />';
     echo 'server="', htmlspecialchars($server), '" basedn="', htmlspecialchars($basedn), '" filter="', htmlspecialchars($filter), '"<br />';
     if ($user) {
-        // Backport a patch from CVS (see #500114)
-        //echo 'bind as user="', $user, '"<br />';
-	echo 'bind as user="', htmlspecialchars($user), '"<br />';
+        echo 'bind as user="', htmlspecialchars($user), '"<br />';
     } else {
         echo 'bind anonymously<br />';
     }
     $ldap = ldap_connect($server, $port);
     if ($ldap) {
         if (!empty($user) && !ldap_bind($ldap, $user, $passwd)) {
-	    // Backport a patch from CVS (see #500114)
-            //echo "<p>unable to bind as $user to LDAP server</p>\n";
-	    echo '<p>unable to bind as ' . htmlspecialchars($user) . ' to LDAP server</p>';
+            echo '<p>unable to bind as ' . htmlspecialchars($user) . ' to LDAP server</p>';
             ldap_close($ldap);
             $ldap = '';
         } elseif (empty($user) && !ldap_bind($ldap)) {
diff --git a/themes/screen.css b/themes/screen.css
index 2eb3cb5..81aa745 100644
--- a/themes/screen.css
+++ b/themes/screen.css
@@ -1,5 +1,5 @@
 /**
- * $Horde: turba/themes/screen.css,v 1.2.4.5 2008/05/19 16:17:39 jan Exp $
+ * $Horde: turba/themes/screen.css,v 1.2.4.6 2008/06/15 18:37:54 chuck Exp $
  */
 
 /* Menu bottom margin, added for BC. */
@@ -117,6 +117,7 @@ table#addressbook-list th.sortdown {
 }
 #turba-prefs-cols-columns .checkbox {
     margin-right: 2px;
+    cursor: default;
 }
 
 /* Redbox styles. */

-- 
Debian Horde Packages repository: turba2 package



More information about the pkg-horde-hackers mailing list